我目前正在开发一项服务,它要求用户选择一个4位数的密码/pin,因为它是一项移动服务。我使用256或2048位加密对这些密码进行加密,它将被散列。账号输入错误4次后会被封号,且只能通过手机输入。破解这些个人识别码会很困难吗?我之所以这样问,是因为敏感信息正在存储。数据库连接到web应用程序,该应用程序使用twilio加载到手机。我最害怕的是数据库被黑客通过网络入侵。保护敏感数据安全的好方法是什么?
发布于 2011-06-13 00:22:00
如果有人控制了数据库,那你就完蛋了:
如果您只加密4位密码,攻击者就可以构建一个包含10000个可能的加密字符串的表,并且可以轻松地解密PIN。
如果你使用salt字符串(不加密PIN码,而是PIN+salt并与salt一起存储加密(PIN+salt)),人们必须为每个密码做出努力,但每个密码仍然只有10000种可能性(这不是很多)。
这意味着,是的,无论如何你都应该让数据库远离网络。(如果web应用程序仅通过twilio访问,则可以拒绝来自任何其他IP范围的连接)。
发布于 2011-06-13 02:37:36
由于您使用的是twilio,因此只需确保twilo仅使用安全协议与您的web服务通信,并拒绝任何您不确定来自可信来源(即twilo)的请求。根本不需要别针。
这是一个关于如何在你的网络服务器和twilo之间设置ssl的巨大网页。它甚至有一个php示例。http://www.twilio.com/docs/security
发布于 2011-07-14 09:53:42
如果您使用RSA1.5或2.0RSA加密(view the standards),您还将加密随机填充。这意味着在传输过程中,PIN是无法比较的,只要填充是保密的,并且是真正随机的(这不是一个应该公开的盐)。
至于数据库,最好将其尽可能地移出常规操作。创建一个简单的服务,在解密后只检查PIN,确保不会出现缓冲区溢出等情况,如果可能,使用与生产服务器不同的机器和访问权限。真正测试好这部分,因为接口很小,应该不难。
如果你和手机都准备好了,你可能想尝试一下ECC,但这不是给温顺的人准备的。RSA encrypt通常使用小的公共指数(强烈建议使用0x010001),因此它比电话的ECC更快。在服务器上(以及在密钥创建期间),ECC的速度要快得多。为此,我不推荐使用对称加密(AES/3DES)。
哦,并且在应用程序中包含公共加密密钥(用于隐式信任),不要从服务器发送它。将私钥保密,除了前面提到的服务之外,任何其他服务都不能访问它。
https://stackoverflow.com/questions/6323002
复制相似问题