04|选择哈希算法应该考虑哪些因素?
有哪些可用的算法?
- 深入了解
- 翻译
- 解释
- 总结
选择哈希算法时需要考虑多个因素,包括算法的安全性、性能和实际应用中可能遇到的问题。了解退役的、遗留的和现行的算法分类,以及单向散列函数的处理能力限制和来源是至关重要的。在选择算法时,应尽量选用现行的、流行的算法,如SHA-256、SHA-384和SHA-512,以确保安全性和获得较好的计算性能。同时,需要小心谨慎,避免已知的安全漏洞陷阱。在实际应用中,还需要注意长度延展攻击等常见问题。对于现有项目,应当及时更新和替换退役的和遗留的算法,以确保系统的安全性和性能。
《实用密码学》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- 彩色的沙漠一直没有看明白单向哈希函数关于输入数据能力的限制,找了一篇博客回头在看我们的专栏恍然大悟。 以SHA256举例:输入数据长度不是512的整数倍的话,需要预处理填充 1.在报文末尾进行填充,使报文长度在对512取模以后的余数是448 填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。 2.附加长度值 SHA256用一个64位的数据来表示原始消息的长度 附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面 因此,通过SHA256计算的消息长度必须要小于$ 2^64 $,当然绝大多数情况这足够大了 最后经过上面两步448+64=512 刚好是512的整数倍 参考地址:https://blog.csdn.net/u011583927/article/details/80905740/
作者回复: 赞!
2020-12-0123 - 于途老师,请问数据补齐方案示意图中的俩数字,423 和 871 具体含义是什么呢?
作者回复: 很多同学关心这个细节,这很棒。看来这个专栏可以讲的再深入一些,聊聊算法的设计细节。 SHA-1不是使用64位的来表示输入数据长度吗?一个数据块是512位,除掉64位,还剩448位。数据是三个字节,24位。除掉24位,还剩424位。去掉补齐数据开始的标识位(也就是423前面的1),还剩423位。 这423位要用零填充。这就是423的来源。你自己试着拆解一下SHA-512?
2020-12-0133 - 于途如果输入数据长度超过了数据补齐方案的限制,数据就没有办法分组了 老师,这句话应该怎么理解呢?
作者回复: 比如说,填充方案里需要指明原始数据长度,指明这个数据长度的使用64位来表示。64位能表示的数最大就是2^64。如果需要进行散列值计算的数据超出2^64,这个填充方案就没有办法使用了,因为长度超出了它能够表达范围,溢出了。
2020-12-0122 - 陈学彬老师,看了其他人留言,明白了补齐数据那张图中423 和 871的由来,但不太明白说的“数据是三个字节,24位”,这个数据是什么数据,为什么要用占用三个字节。
作者回复: 看图前面的ABC,就是这三个字节。 例子而已,例子使用了三个字节,所以就是三个字节。
2021-03-291 - 彩色的沙漠SHA256,输入长度不是512位 在报文末尾进行填充,使报文长度在对512取模以后的余数是448 填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。
作者回复: 对的。448的来源,是要剪掉表达数据长度的位数,这个位数对于SHA-256来说,是64位。 512 - 64 = 448.
2020-12-011 - 于途老师,针对退役的算法、遗留的算法、现行的算法,能否整理一个概览图或者表格呢?
作者回复: 每一个类别的算法,都会有整理。另外,专栏结课的时候会有一个总的表格。
2020-12-011 - 奕在下图 SHA-1 和 SHA-2 的数据补齐方案里,输入数据长度是补充数据的一部分 ————————- 这里没有理解,输入数据长度是64位或者是128怎么进行补齐的?
作者回复: 我特别喜欢这样的问题,这就是我在开篇词里说的发现新问题。你在学习群里找一下我的微信号,如果有需要,我可以送你一门极客时间的其他课程,或者我自己的《代码精进之路》。 SHA-1和SHA-2的算法设计,如果输入数据长度是数据块的整数倍,就用补齐数据再补一个数据块。
2020-11-3091 - 向东是大海MD5,SHA-1 是退役的算法吧?另外,循环冗余校验CRC16,CRC32是哈希算法吗,还可以在新项目中使用吗?
作者回复: MD5是退役的算法了。SHA-1也很危险了,但是由于SHA-1算法应用太广泛,还有很多遗留系统在使用。现在主流的浏览器,还有密码算法类库(包括Java),已经把SHA-1禁止掉了(特别是数字签名)。 CRC16,CRC32不是单向散列函数,不属于密码学的算法,一般也不会当中密码学算法来使用。
2020-11-301 - 天天有吃的补齐数据那张图不是很明白,423、871、24这三个数字是什么意思;还有64、128是指二进制有64、128位吗
作者回复: 好问题! 前面的abc使用的是位,64和128指的也是位。24表示输入数据长度,423位表示除了表示数据长度的位数,以及数据补齐开始的标识位外,还需要的补齐数据。 我在另外一个回复里,拆解了423位是怎么来的。你找找看?
2020-12-012 - 孜孜我唯一能想到的是,我们前几个月,disable了http server的tls1.0和1.1。但是遗憾的是tls1.2有些密码套件的签名还是sha1。
作者回复: TLS的签名套件里的SHA-1指的是HMAC算法。基于SHA-1的HMAC算法,虽然目前已经不推荐使用了,但是它的安全性目前看还是足够的。我们后面还会讲HMAC。我个人建议HTTP server禁止掉使用SHA-1的密码套件。如果禁止掉TLS 1.0/1.1没有兼容性问题,禁止掉使用SHA-1的密码套件,一般的应该也没什么问题。
2020-11-30