投票申请的安全性

时间:2020-03-05 18:43:36  来源:igfitidea点击:

我有一个项目可以为Java类构建投票桌面应用程序。尽管安全不是该项目的重点,但我想尽可能地切合实际。将安全性集成到Java应用程序中的一些主要工具是什么?

编辑:我并不主要担心物理安全性,我们只是在构建应用程序而不是整个系统。我想确保投票被正确记录,并且不能被其他人更改或者阅读。

解决方案

回答

这实际上取决于我们要集成哪种安全性。我们是否需要安全性来确保用户没有运行任何调试器,或者不翻转应用程序中的位以更改投票?我们是否要确保用户没有安装日志记录软件来跟踪谁为谁投票?我们是否要确保应该投票的人确实在投票?安全是一个非常广泛的主题,如果不知道我们到底在寻找什么,很难给出答案。

回答

如果我们正在寻找对此内容的"高级"解释(例如,而不是代码),则应用密码学提供了很多相关示例(我相信有关"安全选举"的部分内容涵盖了一些投票策略)。

回答

我认为,物理安全性对于投票站系统而言更为重要,而不是代码安全性。
从本质上讲,这些机器不应连接到任何种类的公共网络,尤其是互联网。但是拥有良好的物理安全性以防止任何形式的物理篡改非常重要。

回答

我主要不担心物理安全性,我们只是在构建应用程序而不是整个系统。我想确保投票被正确记录,并且不能被其他人更改或者阅读。

回答

一方面提出防止物理篡改(例如底层数据库)的问题,因为我们已经规定物理安全不是当前的关注点...

我认为主要考虑因素是如何确保给定选民只投票一次。在纸质投票中,每个注册选民都被限制在特定的展位/地点,并且通过姓名+ SSN和签名来进行验证。

我们可能需要高分辨率的数字签名捕获,因此需要触摸屏捕获外围设备或者触摸屏终端。一种更复杂的方法是生物特征识别扫描仪,但这需要政府记录拇指/指纹或者视网膜扫描。我已经看到隐私倡导者在律师事务所排队。

另一种方法是让选民"登记处"在选举之前向每个选民发布数字密钥,并向选民中提供一个(相对)短(具有加密强度的)随机字母/数字密钥,并将其与选民的姓名和/或者SSN输入。在特定的选举中,特定的选民需要知道该键。这些密钥将通过防篡改信封邮寄,就像银行用来邮政确认电汇和PIN码的邮递一样。该密钥必须包含校验和数据,以便用户可以立即对其进行验证,并且该输入应以4组为一组,例如XXXX-XXXX-XXXX-CCCC。

对于其他大多数人而言,很容易发现其他任何"秘密"知识,例如SSN(尽管我们似乎无法让信贷授予组织理解这一点),因此不适合进行身份验证。

可以通过生成一个公共密钥加密的数据文件(通过运动鞋网?)传输到中央系统来进行投票计数。这必须包括"投票站"身份信息和每个选民的记录,包括他们的SSN和数字密钥(或者签名或者生物识别数据)。具有无效密钥的投票将被消除。具有相同密钥和相同投票的多个投票被视为该候选人的单个投票。标记具有相同密钥和不同投票的多个投票以进行欺诈调查(通过电话与选民联系,发出新的密钥,并指示其投票)。

回答

我的公司最近以非常强大的安全性执行了app。也许有帮助。

这是Java EE应用程序。

架构如下:

  • 客户端计算机具有加密程序包。
  • 存储加密的用户输入和输出的脏服务
  • 清除外部存储密钥和解密数据无法访问的服务。

向用户颁发了加密卡(我们可能要使用不太安全的东西,例如pgp),并且jsp页面要求使用它们来加密所有输入。页面包含连接到冷冻应用程序的组件,要求用户提供密钥密码,然后使用服务器公钥对其进行加密,并使用用户私钥对其进行签名,然后提交。

数据存储在外部服务器中,然后传输到内部服务器,在此解密并验证签名,然后对数据进行处理和重新加密,然后将其发送到脏服务器,然后用户可以获取它。

因此,即使有人破解了肮脏的服务器(甚至拥有数据库),他也将获得大部分无用的数据。

我将加密并签名的投票发送到服务器。它会断言两件事:

  • 你知道谁发了票
  • 没有人会知道投票是什么。

然后从服务器获取数据,断言每个人最多投票一次,数票,瞧!

回答

问题是,我们需要可靠地识别用户,以防止他们重新投票并获得彼此的投票。

这与需要身份验证(并可能需要授权)的任何其他桌面应用程序没有什么不同。如果选民是具有用户帐户的网络上的封闭团体,则可以与目录集成并要求用户登录。

如果选民没有网络用户帐户,这将变得很有趣。每个用户仍然需要通过应用程序进行身份验证。我们可以在应用程序中使用密码生成帐户,并在投票前安全地分发此信息。应用程序可能在首次访问该应用程序时要求用户选择密码。

不知道具体细节,很难给出更具体的答案。

回答

我们知道电子投票是一个尚未解决的研究问题吗?大规模欺诈应花费大量精力。