【发布时间】:2012-06-14 06:22:02
【问题描述】:
我们有一个典型的基于 Web 的登录系统。我们希望客户能够生成永不过期并包含密码的“登录链接”。 因此,我们希望创建一个链接,其中包含加密形式的密码。 注意:我知道最好的方法是查找表,其中每个链接都有一个唯一的键......我不会详细说明为什么这对我们不起作用;不会的。
我不熟悉公钥加密。也许这就是我需要的?
这就是我的想法。这可能还不够,所以请告诉我:
定义:user-password 是指我们想要在链接中加密的用户密码。
我们不能为所有用户密码使用一个加密密钥,因为可以通过生成大量链接来派生加密密钥,所以...
使用标准形式的对称加密。
服务器有一个包含 1000 个复杂加密密钥的文本文件。
生成链接时(使用具有该列表的 PHP 脚本),选择 1000 个加密密钥之一来加密其明文密码(按顺序选择,而不是随机选择以防止选择相同几乎同时)。
在加密用户密码之前,在其开头添加类似“s345lm34l5k342342343534432324sdfs”的内容,以“加盐”。 (例如:password1 变为 s345lm34l5k342342343534432324sdfspassword1)。 “加盐”使得解密字典攻击变得更加困难。这种盐是保密的。但是,当然,它存在被泄露的风险,它是所有密码的一种盐,所以......
此外,密码中还添加了第二个随机生成的盐。此盐使用单个强密码进行加密。因为盐和加密它的密码都是随机的字节模式,所以很难确定盐。
链接制作工具每10分钟只能生成15个链接,然后锁定IP。
- 除非提供给它的用户/密码实际上是有效的用户/密码组合,否则链接制作工具不会生成链接。这样,如果有人只是尝试生成链接来确定加密信息,它将无法正常工作。不过,理论上,他们可以获取有效的用户/密码并尝试暴力破解。
这样安全吗?
【问题讨论】:
-
为了清楚起见,第二个盐是链接的公开部分。 (虽然它是加密的。)
-
在分析 url 提交的密码时,如何识别 1000 个密码中的哪一个?
-
@bkr 我忘了提到后端会跟踪使用的密钥。
标签: encryption encryption-symmetric