我正在修改现有的安全代码.规范很清楚,有示例代码,但我不是加密专家.实际上,示例代码中有一个免责声明,实际上是"不要逐字使用此代码".
在审核我要修改的代码(这应该是完整的功能)时,我遇到了这个用于生成挑战的小宝石:
static uint16 randomSeed; ... uint16 GetRandomValue(void) { return randomSeed++;/* This is not a good example of very random generation :o) */ }
当然,我立即做的第一件事就是将它传递到办公室,这样我们都可以大笑.
生成此代码的程序员知道它不是一个好的算法(如评论所示),但我不认为他们理解安全隐患.他们甚至懒得在主循环中调用它,所以它至少会变成一个自由运行的计数器 - 仍然不理想,但超出此范围的世界.
但是,我知道我生产的代码同样会导致一个真正的安全大师轻笑或震惊.
我需要了解哪些最常见的加密安全问题?
有什么好的资源可以让我适当了解除了常见错误之外我应该知道什么?
-亚当
不要尝试自己动手 - 尽可能使用标准库.对安全代码的细微更改可能会产生巨大的影响,不容易发现,但可能会打开安全漏洞.例如,两个修改过的行到一个库就打开了一个在很长一段时间内都不容易看到的漏洞.
Applied Cryptography是一本很好的书,可以帮助您理解加密和代码.它涉及很多基础知识,比如分组密码如何工作,以及为什么选择差的密码模式会使你的代码无用,即使你使用的是完美实现的AES版本.
有些事需要注意:
差的来源随机性
试图设计自己的算法或协议 - 不要这样做.
没有得到代码审查.最好通过在线发布.
没有使用完善的库并尝试自己编写.
加密作为灵丹妙药 - 加密数据并不神奇地使其安全
密钥管理.如今,通过侧通道攻击窃取密钥通常比攻击加密更容易.
你的问题显示了一个比较常见的问题:可靠性差的来源.如果你使用256位密钥,如果它们的位不够随机,则无关紧要.
2号可能假设您可以比专家更好地设计系统.在这个领域,标准的质量实施几乎肯定会比创新更好.请记住,在SSL真正安全之前,它需要3个主要版本.我们认为.