2

I have a project to build a voting desktop application for a class in Java. While security isn't the focus of the project, I would like to be as realistic as I can. What are some of the primary tools to integrate security into a Java application.

Edit: I'm not primarily worried about physical security, we are simply building an application not a whole system. I want to ensure votes are recorded correctly and not able to be changed or read by someone else.

4

8 回答 8

3

It really depends on what kind of security you are looking to integrate. Do you want security to ensure that the user isn't running any debuggers or such to flip bits in your application to change the votes? Do you want to ensure that the user doesn't install logging software to keep track of who voted for who? Do you want to ensure that the person who is supposed to be voting is actually voting? Security is a very broad subject, and it's hard to give an answer without knowing what exactly you are looking for.

于 2008-08-27T02:14:03.050 回答
2

我的公司最近做了一个非常安全的应用程序。也许它有帮助。

我们的应用

它是 Java EE 应用程序。

架构如下:

  1. 客户端计算机有一个加密包。
  2. 存储加密用户输入和输出的脏服务器
  3. 无法从外部访问的清洁服务器,用于存储密钥和解密数据。

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

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

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

你的应用

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

  1. 你知道谁投了票
  2. 没有人能够知道投票是什么。

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

于 2008-11-01T21:44:40.280 回答
1

If you're looking for a "higher-level" explanation of this stuff (as in, not code), Applied Cryptography has quite a few relevant examples (and I believe a section on "secure elections" that covers some voting strategies).

于 2008-08-27T02:19:45.610 回答
0

I believe that physical security is more important for voting booth system rather than you know, code security.
These machine by their very nature shouldn't be connected to any kind of public networks, especially not the the internet. But having a good physical security to prevent any sort of physical tampering is very important.

于 2008-08-27T02:46:59.647 回答
0

I'm not primarily worried about physical security, we are simply building an application not a whole system. I want to ensure votes are recorded correctly and not able to be changed or read by someone else.

于 2008-08-27T03:31:27.747 回答
0

您的问题是您需要可靠地识别用户,以便您可以防止他们重新投票和访问彼此的投票。

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

如果选民没有网络用户帐户,这就是有趣的地方。每个用户仍需要通过应用程序进行身份验证。您可以在应用程序中生成带有密码的帐户,并在投票前安全地分发此信息。您的应用程序可能会在用户首次访问应用程序时要求用户选择密码。

不知道具体情况,很难给出更具体的答案。

于 2009-03-14T01:45:43.600 回答
0

您知道电子投票是一个未解决的研究问题吗?大规模欺诈需要付出很大的努力。

于 2009-07-07T08:48:39.290 回答
0

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

我认为首要考虑是如何确保给定选民只投票一次。在纸质投票中,每个登记的选民都被限制在一个特定的展位/位置,并通过姓名+SSN 和签名进行验证。

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

另一种方法是让选民“登记处”在选举前向每个选民颁发数字密钥——一个(相对)短(加密强度)随机字母/数字密钥,与选民的姓名和/或 SSN 一起输入到应用。在该特定选举中,该特定选民需要该密钥的知识。这些密钥将在防篡改信封中邮寄,就像银行用于邮政确认电汇和交付 PIN 码的信封一样。密钥必须包含校验和数据,以便用户可以立即验证其输入,并且它应该以 4 个为一组,例如 XXXX-XXXX-XXXX-CCCC。

任何其他“秘密”知识,例如 SSN,对于大部分人口来说都可能太容易被发现(尽管我们似乎无法让信用授予组织理解这一点),因此不适合进行身份验证。

投票计数可以通过生成一个公钥加密的数据文件来完成,该文件被传输(通过运动鞋网?)到中央系统。这必须包括“投票亭”身份信息和每个选民的记录,包括他们的 SSN 和数字密钥(或签名,或生物特征数据)。使用无效密钥的投票将被淘汰。具有相同密钥和相同票数的多票被视为对该候选人的单票。具有相同密钥和不同票数的多票被标记为进行欺诈调查(通过电话联系选民,发布新密钥,并指示进行投票)。

于 2008-11-01T06:50:20.927 回答