我正在尝试实施双因素身份验证(您持有的令牌,您知道的密码)。
http://en.wikipedia.org/wiki/Security_token列出了许多昂贵的解决方案。我需要:
我不需要:
我打算做以下事情:
我需要让普通程序员/黑客很难从令牌中读取私钥。我有什么选择?如果你认为我设置的标准太低,你有什么建议?
答案 0 :(得分:0)
“服务器使用令牌的公钥解密密码”
这没有意义。公钥的重点在于可以公开而不会损害系统的安全性。也许您的意思是令牌包含公钥,服务器存储与该令牌对应的私钥?
安全令牌通常不会以您描述的方式使用。它们通常用作单点登录(SSO)设备。令牌生成与时间相关的伪随机数。在大多数情况下,生成的数量每30秒左右就会发生变化。服务器配置了令牌的随机种子,因此它可以生成相同的数字进行验证。
编辑:根据您的评论,这是我的新建议:
令牌或客户端应用程序上的公钥
服务器上的相应私钥
如果读取公钥并不重要,因为公钥的知识无助于猜测私钥
如有必要,请按计划的时间间隔更改密钥
答案 1 :(得分:0)
如果观众是消费者,那么他们使用的电脑很可能会以某种方式被感染 - 病毒/键盘记录器......
如果有可能,那么整个方案因使用PC键盘而变得有风险......
抛开这些顾虑:
您可以运行自己的“CA”并生成客户端证书 - 这些可以放在任何地方(USB棒......),应用程序可以使用它们来验证用户 - 只需使用密码作为密码等 - 美丽的这是:例如,您可以撤销证书等。
另一点:
根据应用程序与服务器通信的方式,您可以使用此方案进行SSL连接... SSL标准不仅包含通过客户端证书验证服务器而且还包含客户端的选项......
修改强>:
任何便宜的东西都可以阅读 - 智能卡会更好但是它们不是很便宜而且PC需要额外的硬件来处理它们......
安全但不便宜的选择:
如果你想要一些安全的东西,那么你需要一个带键盘的外置智能卡读卡器,以便通过PC键盘输入任何敏感信息 - 但这并不便宜......
另一种选择(更便宜但仍然安全):
使用移动设备作为第二个频道,他们登录到您的应用程序 - 该应用程序与服务器联系,服务器生成一些独特且有时间限制的代码,并通过短信发送到他们的移动设备,他们需要输入该代码才能完成登录过程。 。