实用密码学
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
14948 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 24 讲
开篇词 (1讲)
课前必读 (1讲)
案例分析 (1讲)
实用密码学
15
15
1.0x
00:00/00:00
登录|注册

03|如何设置合适的安全强度?

你好,我是范学雷。
上一讲,我们讨论了单向散列函数,以及它是怎么解决数据完整性问题的。你还记得它解决问题的背后逻辑吗?就是因为单向散列函数有两个重要的特点:逆向运算困难和构造碰撞困难
这两个特点使得我们仅仅修改数据中的一位,所得到的散列值和之前的相比,就会发生很大的变化。所以我们说,这两个困难也决定了一个单向散列函数的破解难度。
逆向运算越困难,破解难度越难;构造碰撞越困难,破解难度也越难。这点你应该懂了,但是,你有没有想过,困难程度要多大,才算困难?有什么指标可以衡量单向散列函数的破解难度?
一下出现这么多问题,是不是有点意外?其实,密码学就是在和千奇百怪的问题纠缠中获得进展的。这一次,我们来讨论困难有多难以及和破解难度相关的问题。

困难要有多难?

我们要探讨的第一个问题就是,一个单向散列函数的逆向运算和构造碰撞要困难到什么程度,它才能算是一个合格的单向散列函数呢?如果凭感觉,在密码学的实践我们心中“完美”的单向散列函数,应该困难到没有人可以逆向运算,也没有人可以构造碰撞。
可是,只要有人发现了有那么一对数据具有相同的散列值,不管这个人什么出身、什么来历,也不管这对数据有多么的千奇百怪,更不管破解方式是多么的不合常理,这个结果就意味着这个单向散列函数被破解了,不再安全了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

密码学中的安全强度是保障数据安全的重要指标。本文通过讨论单向散列函数的困难程度、安全强度的概念以及其变化情况,强调了密码学中安全强度的重要性和变化性。安全强度通常以“位”来表示,代表破解算法所需的运算次数。文章以MD5和SHA-1为例,说明了不同安全强度对破解难度的影响,并指出了安全强度并非固定不变,随着安全分析的进步,密码算法的安全强度会衰减。此外,文章还介绍了美国的NIST、德国的BSI和欧洲的ECRYPT-CSA等机构的安全强度推荐指标,并提出了对量子计算时代的担忧。总的来说,本文通过对安全强度的讨论,强调了密码学中安全强度的重要性和变化性,为读者提供了对密码算法安全强度的印象,并引发了对安全强度直观概念认知的思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《实用密码学》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • Litt1eQ
    按照目前我能找到的最快计算机(Fugaku)的数据来说是415530TFlops, 大约是每秒4.2*10^17次浮点运算,破解64位强度的话大约需要44s。80位的话大约需要2878395s也就是34天左右,如果是128位的话大约需要25691150168585年(注:此数据仅仅是我的一个估算,并不一定准确)

    作者回复: 很好的的估算。不用准确,就是帮助自己建立一个关于安全强度的印象。以后,当碰到安全强度的说法时,自己有个感觉。这些数据很棒!

    2020-11-27
    7
  • 枫中浪子
    老师有个问题,文章中说md5安全强度太低,已经不安全了,那么任意给定一个md5值,能在很短的时间内得到散列前的数据吗?比如4.34分钟(比如 MD5,我们说了,它的安全强度最多 18 位,也就是说,我们运算 2^18=262144 次就可以破解,按现在的计算机一毫秒一次运算的速度计算,需要 262144 毫秒,折合 4.34 分钟。)

    作者回复: 不能得到原数据,但是能构造出另外一个具有相同散列值的数据。

    2021-01-12
    3
    4
  • solidSpoon
    老师安全强度和攻击复杂度是两个不同的指标吗?有什么异同呢?

    作者回复: 是同一个指标的两种不同的说法,一个从正面说,一个从反面说。我应该在文章里交代一下的,没意识到。

    2020-11-27
    4
  • 雲至
    老师能讲一下要是怎么样一个破解的方法吗?

    作者回复: 这个不适合在专栏里讲。有的破解为了保护现有信息系统也不会公开;有公开的,破解大部分都太难了。你要是感兴趣,可以在群里留言,我找找论文发给你。

    2020-11-27
    4
    3
  • Jenniffer27
    安全强度是如何计算出来的?如MD5的安全强度为何是18位?通过什么规则或方式计算的?

    作者回复: 这个很复杂,有一小部分是计算出来的,大部分都是攻击出来的。也就是说,最先进的攻击方案,需要多大的计算量才能得逞。所以,我们说MD5的安全强度是18位的时候,单单看MD5的算法本身是得不出这个结论的;要去看具体的攻击方案。每一个算法的的攻击方案都千奇百怪,这就很难说有一个固定的规则或者方式来计算安全强度。我们说安全强度会变化,也是相同的原因:攻击方案会变得越来越好。

    2021-01-15
    2
  • godliness
    请问,有交流群吗?

    作者回复: 找极客时间的客户要交流群的二维码。

    2023-10-20归属地:湖北
    1
  • Spring
    请问这些算法的安全强度的数据是从哪里获取的?似乎google了MD5 security strength 没找到相关信息

    作者回复: 查找最新的算法推荐指南,通常就是文中提到的三个机构发布的指南: 美国的 NIST(国家标准技术研究所);德国的 BSI(联邦信息安全办公室);欧洲的 ECRYPT-CSA(欧洲卓越密码网络)。

    2023-09-13归属地:广东
  • chuan
    老师,请问:这两个结果怎么算的?我在mac上用md5算了一下 (venv_py3_study) ➜ /tmp md5 -s "4dc968ff 0ee35c20 9572d477 7b721587 d36fa7b2 1bdc56b7 4a3dc078 3e7b9518 afbfa202 a8284bf3 6e8e4b55 b35f4275 93d84967 6da0d1d5 5d8360fb 5f07fea2" MD5 ("4dc968ff 0ee35c20 9572d477 7b721587 d36fa7b2 1bdc56b7 4a3dc078 3e7b9518 afbfa202 a8284bf3 6e8e4b55 b35f4275 93d84967 6da0d1d5 5d8360fb 5f07fea2") = f14fc2d22c621080cdc53f76d5944579 (venv_py3_study) ➜ /tmp md5 -s "4dc968ff 0ee35c20 9572d477 7b721587 d36fa7b2 1bdc56b7 4a3dc078 3e7b9518 afbfa200 a8284bf3 6e8e4b55 b35f4275 93d84967 6da0d155 5d8360fb 5f07fea2" MD5 ("4dc968ff 0ee35c20 9572d477 7b721587 d36fa7b2 1bdc56b7 4a3dc078 3e7b9518 afbfa200 a8284bf3 6e8e4b55 b35f4275 93d84967 6da0d155 5d8360fb 5f07fea2") = 3f5a810ea38e0adca283fda55ef30a5e

    作者回复: 要把base64和空格转换掉。

    2022-01-30
    3
  • Wales
    老师,安全强度的位是不是比特位而不是字节位?因为文中指出,安全强度为N的算法,破解需要计算2^n次计算。

    作者回复: 是的

    2021-06-14
  • Leo
    参考我的实现:https://github.com/leo18945/md5collisiondemo/blob/main/MD5CollisionDemo.java
    2022-02-09
    2
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部