1625-5 王子昂 总结《2018年2月28日》 【连续第515天总结】
A. 防范算法求逆(2)
B.
堡垒战术
事实上,在通信领域,人们早就开始对身份校验的研究,发展出了散列加密
和非对称加密
等优秀的密码学算法,其中的MD5算法和RSA算法很适合在软件注册算法中运用
MD5
Message Digest Algorithm MD5(消息摘要算法第五版),是一种广为运用的散列函数。
它不存在逆算法,是对数据的摘要。
因此可以通过MD5(a)=b
这个过程来校验
将b硬编码在程序中,与MD5后的a进行比较,一致则成功,不一致则失败
不过这样的缺陷就是无法区分用户,泄露a后将通用
解决方法是加入U、R对来区分用户,校验过程修正为:
R=f(U)
b = MD5(a)
F = MD5(f逆(R)-U+a)
显然,当R正确时F应等于b,因此可以将b硬编码在程序中
另一方面由于f逆(R)和a混杂在一起(同拥有常数项时),无法解出a的值(强度足够的情况下)
然而这样仍然是不安全的,会受已知明文攻击
当知道一对UR的情况下,可以通过f逆和常数项的和作差来获得a,从而得到注册机f()
RSA
RSA作为非对称加密算法的典型,其安全性是很可靠的
公钥和私钥的不同使得程序中硬编码的密钥只能用来解密而无法加密,因此注册机无法由解密程序得出
在这一点上,RSA是无解的
长度足够的情况下,穷举法也只能浪费数十年的时间
但是,成也萧何败萧何,RSA由于其算法的复杂度而拥有了极高的安全性,但是过于复杂使得大部分开发者对其中间过程并不了解,直接获取第三方库,在这个过程中就可能带来一些危险
- 共模攻击、小公钥指数等等RSA的攻击方法,使得RSA的参数选取不当时会产生不安全的密钥
- 有的第三方库在解密程序中为了加速会使用中国剩余定理,而中国剩余定理中就包含了对原始数据p, q的引用,使得密钥完全暴露
- 有的函数库在生成随机数时,由于众所周知的伪随机数生成机制,使得种子相同时会生成一致的随机数,进而暴露原始数据
- *RSA算法中存在若干由某些特殊素数构造而成的弱密钥,某些函数库没有排除它们,使得可能被攻破。(本条没有查找到相关信息,真实性待考)
C. 明日计划
防范算法求逆(3)