我需要使用当前时间,因为稍后,另一个程序将需要知道我何时生成引脚并输入用户名和密码.
摘要:
用户名+密码+当前时间= pin [6位]
反向,生成引脚,我需要知道哪个特定,并检查它是否已经通过1分钟.
我不是要求直接代码,但我需要知道最好的,而不是最好的方法/算法.谢谢(顺便说一句,我是cpp初学者)
编辑:
我很抱歉没有说清楚.实际上,我需要OTP,在生成引脚后,其他程序需要像这样运行:validate {username} {password} {pin}
999999分钟,给出~694天,~1.9岁.因此,如果您使用所有可用的熵来记录当前时间,那么您将在不到2年的时间内循环该值.
如果你想要包含用户名和密码,并且避免容易猜测,事情会更糟.
使用6位十进制数字,您可以存储大约19位数据.因此,您必须确保在服务器端具有强大的反暴力保护,否则尝试所有可能的组合将是微不足道的.
一次性密码没有内部可解码结构,除了普通密码之外,它们通常用作身份验证的第二个因素.然后可以根据您的建议时间,但不是可逆的 - 另一端也有密钥,并且可以自己生成可能的列表.
因此,例如,以及输入用户名和(正常)密码,用户输入从一个令牌,其作为生成的值AES(secretkey, currentminute),和所述服务器计算AES(secretkey, currentminute)和AES(secretkey, currentminute-1)等,来比较该值.它还可以记录哪个令牌匹配,以便记录令牌时钟精度的估计值,这样可以使令牌的时钟有一些漂移,只要它经常使用得足够频繁.要想知道如何最好地使用6位数字中的19位,你需要一个真正的密码学家 - 正如我猜想的那样,简单的截断可能是安全的.
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |