-
-
[讨论]密码认证的实现
-
发表于:
2005-11-22 11:15
3757
-
小弟现在在致力于写一个加密软件,底层预包括了常见的AES,IDEA
TEA一类的加密算法
但在写系统设计分析时遇到一个问题:密码如何认证
就是如何才能在用户输入错误密码的时候能够有效的通知用户(一个错误提示对话框)
而又能有效的防止穷举攻击?
我给出了如下设计草案:
1. 在被加密文件的某个位置处,保留一个密码50万次的Sha256的值(以实现密码认证)(借鉴QQ本地密码的防护措施)
for(int i = 0; i < 500000; i++)
{
pw = Sha252(pw);
}
2. 认证通过后,采用密码1次的Sha256值的某些位作为对称密码算法的密钥进行解密数据(加密模式可以选择)
我知道我这样设计存在着一个比较严重的漏洞:
Hash次数是个固定的值,这会给攻击者一个以空间换时间攻击的机会,加入攻击者有密码字典的50万次Sha256值,
这样穷举密码的速度PIII的机子可达到10亿次/秒(或许更快,决定于计算机的时钟周期了),这样以来系统不堪一击。QQ本地密码能够有效阻止
这样的攻击是因为它的Hash次数不是一个定值,
在这在密码认证中是不可能使用的。
这方面是不是早以有了比较成熟的方案,只是我还不知道?
以前我曾就真对此种情况假设了对PGP的攻击,但好像那个主题也没有讨论出一些实质性的东西。
本来想借鉴PGP的密码认证机制,但也找不到相关的资料。
那位了解这方面的东西,能否指点小弟一下?也欢迎大家就此主题讨论一下了
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)