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

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

#1楼 票数:3

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

#2楼 票数:2

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

我们的应用

这是Java EE应用程序。

架构如下:

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

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

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

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

您的应用程式

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

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

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

#3楼 票数:1

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

#4楼 票数:0

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

#5楼 票数:0

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

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

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

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

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

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

#6楼 票数:0

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

#7楼 票数:0

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

#8楼 票数:0

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

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

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

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

  ask by Justin Yost translate from so

未解决问题?本站智能推荐:

2回复

在applet中运行桌面应用程序更安全吗?

首先,当我说“在applet中运行桌面应用程序”时,我的意思是做一个离线运行的Applet应用程序,而不是在JFrame中运行的桌面应用程序。 关于applets的小知识(也许我说的是错的,请纠正我)是applet在默认情况下没有授予所有的权限。 此外,小程序在沙盒中运行,不允许信息进出
2回复

具有桌面应用程序安全性的 OAuth2

我有一个 Electron 应用程序,它基本上是一个 Google Drive 客户端。 我打算使用 OAuth 2。 但是,Google API 要求我在生成 client_secret 的地方注册我的应用程序。 由于这是一个桌面应用程序,我将 client_secret 存储在服务器中。 身份
1回复

GoogleAppEngine Java WebService安全性

我正在使用Java(使用JApplet)开发小型游戏,我想实现高分和成就。 我没有专用的服务器,因此我决定使用GoogleAppEngine来存储玩家数据以及获得高分和成就。 我已经找到了如何在GoogleAppEngine上创建WebServices,但是我对安全性有疑问...
4回复

Java AJAX Webapp安全性

我正在尝试创建一个简单的AJAX Java Webapp。 我想使用Servlet容器提供的容器管理的安全性,但是在研究了它之后,感觉到它无法按我希望的那样工作。 基本上,我希望能够在主页上显示一个登录提示,而无需用户导航到登录表单。 举例来说,假设有一个简单的留言板应用程序,想要
1回复

Android上的安全性

您好,我是一个学生,正在尝试为我的Android应用程序构建服务器。 我正在制作类似Facebook的应用程序。 我服务器的框架是Netty,我正在使用HTTP。 所以我的问题是 在Android中,为什么安全性很重要? 我知道这可能是一个琐碎的问题,但是ID
1回复

PHP Rest API安全性

我们目前正在使用Java开发游戏。 对于用户身份验证,我们使用我在PHP中制作的rest api。 我正在使用会话存储UID,并且游戏将会话存储在CookieStore中 。 我们得出的结论是,这还不够安全。 我们曾考虑过使用临时令牌,但“攻击者”将以某种方式自己获得令牌。 我们还
1回复

Java安全性错误

当我运行我的jnlp文件WelcomeApplet.jnlp时,屏幕上会显示以下安全消息: Java安全性阻止的应用程序。 我在互联网上检查了三个安全级别: 非常高,高和中 。 我曾经jdk 1.8.0_25在没有medium的选择,只是very high和high可供选择。
1回复

插件的安全性限制?

这个问题或多或少与“ 限制插件中的某些Java代码 ”相同,但是,可以接受的答案只是继续用Google进行搜索,而我在没有回答此问题的情况下已经做了什么。 实际上,我只对通过插件加载的代码有特殊的安全约束。 加载并启动插件后,它所获得的只是我的应用程序中可以与之交互的特殊对象。 不