Google发布了Project Wycheproof,这是一组安全测试,用于检查加密软件库是否存在已知漏洞。开发了80多个测试用例后,已发现40多个安全漏洞。
为了具有良好的密码学,需要具备两个要素。首先是密码基元本身的强度。这是将其分类为合适的属性或不适合在其上构建应用程序的属性。例如,在“ SSL和TLS部署最佳实践-使用安全密码套件”中记录的TLS协议中,建议不要使用所有密码。例如,在该列表中,我们发现了一些不安全且必须避免的过时密码原语:
匿名Diffie-Hellman(ADH)套件不提供身份验证NULL密码套件不提供加密密码较弱的套件(通常为40位和56位)使用容易破解的加密RC4是不安全的3DES缓慢而脆弱第二个因素是实现密码的库。您确定它没有错误吗?一个这样的反例是libmcrypt库中的mcrypt函数,该函数在PHP应用程序中很流行,尽管存在许多弱点,如在“将单词MCRYPT键入您的PHP代码中,您做错了”中所述。
寻找此类错误时,通常会使用代码审核,现在,Google工程师与Wycheproof项目一起努力,试图解决由于加密组件内部代码审核而直接导致的软件库安全性方面的问题谷歌在其产品中使用的产品,最终也找到了向公众展示的方式。
因此,项目Wycheproof项目是一组单元测试的集合,该项目检查密码软件库中RSA,椭圆曲线加密和经过身份验证的加密中的已知弱点。在项目存在的短时间内,通过完成80个漏洞已经发现了40多个错误单元测试.GitHub上提供的测试涵盖了一些最广泛使用的算法,例如:
RSADSAECDHD菲菲·赫尔曼反对它们在Java密码体系结构提供程序中的实现,例如Bouncy Castle,Spongy Castle和OpenJDK中的默认提供程序。
为了运行这些测试,例如对于Bouncy Castle或OpenJDK,您需要安装Bazel,然后按以下方式运行测试:
bazel测试BouncyCastleAllTests
要么
bazel测试OpenJDKAllTests
已发现的最令人担忧的错误之一是Bouncy Castle的ECDHC实施泄露了私钥,因为在即将推出的TLS 1.3版本中,ECDCH将完全取代RSA进行密钥传输,因为此类库中托管了一个弱实施最重要的。
在实现算法时,很多事情都会出错,事实上,在TLS 1.3草案中,有一整节专门讨论实现陷阱,这在设计库或应用程序时可能会遇到:
您使用什么对策来防止定时攻击?验证RSA签名时,您是否接受NULL和缺少的参数?您是否验证RSA填充在散列值之后没有其他数据?使用Diffie-Hellman密钥交换时,您是否在协商的密钥中正确保留了前导零字节?TLS客户端是否检查发送的Diffie-Hellman参数服务器生成的Diffie-Hellman私有值,ECDSA“ k”参数和其他对安全性至关重要的值时,是否使用了强大的(最重要的是正确地种子了)随机数生成器?建议实现实现[RFC6979]中指定的“确定性ECDSA”。是否将Diffie-Hellman公钥值零填充到组大小?在对签名进行签名以防止RSA-CRT密钥泄漏后,您是否会验证签名?由于此类Wycheproof项目已成为追求正确应用密码术的宝贵补充,因为正确处理太困难了,因此需要进行严格的测试或使用经过验证的安全产品,例如CMS领域,Paragonie的开源软件AirShip CMS与Drupal,Joomla或Wordpress等已知的易受攻击的漏洞相反。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。