V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quxinna
V2EX  ›  程序员

md5 如何实现雪崩效应的

  •  
  •   quxinna ·
    quxinna · 2021-04-05 20:31:13 +08:00 via Android · 8606 次点击
    这是一个创建于 1334 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在密码学中,雪崩效应( Avalanche effect )指加密算法(尤其是块密码和加密散列函数)的一种理想属性。雪崩效应是指当输入发生最微小的改变(例如,反转一个二进制位)时,也会导致输出的剧变(如,输出中一半的二进制位发生反转)。在高品质的块密码中,无论密钥或明文的任何细微变化都应当引起密文的剧烈改变。该术语最早由 Horst Feistel 使用,尽管其概念最早可以追溯到克劳德・香农提出的扩散( diffusion )。
    44 条回复    2021-09-23 14:11:27 +08:00
    ShuA1
        1
    ShuA1  
       2021-04-05 22:44:05 +08:00   ❤️ 10
    md5 是 hash 算法,不是加密算法
    godpeo
        2
    godpeo  
       2021-04-05 22:51:48 +08:00   ❤️ 1
    类似 乘以很大的数 很多次, 细微变化也引起大变。
    loading
        3
    loading  
       2021-04-05 22:53:25 +08:00 via Android   ❤️ 3
    楼主的好几个发帖都有 md5,然后居然还是说是加密算法,难道你找到逆向解密方式了吗?如果是的话,人类压缩算法可能要突破了。
    yolee599
        4
    yolee599  
       2021-04-05 23:21:02 +08:00 via Android
    md5 算法和密码学有关系?
    v2sir
        5
    v2sir  
       2021-04-05 23:35:33 +08:00   ❤️ 1
    关键是你想表达什么?
    Vegetable
        6
    Vegetable  
       2021-04-06 00:46:58 +08:00
    @yolee599
    @ShuA1
    md5 不是加密散列函数?
    jeanz
        7
    jeanz  
       2021-04-06 00:52:37 +08:00 via Android
    @Vegetable MD5 只是计算散列值,不是加密的
    nvkou
        8
    nvkou  
       2021-04-06 01:10:09 +08:00 via Android
    哇!我几百 g 的文件可以“加密”成一串字符串。屌爆了!
    硬盘和网盘甚至冯诺依曼体系都是骗局!不信楼主现场帮我解密还原。
    jhdxr
        9
    jhdxr  
       2021-04-06 02:51:24 +08:00   ❤️ 2
    @yolee599 摘要算法的确也是密码学范畴的
    singerll
        10
    singerll  
       2021-04-06 06:31:00 +08:00 via Android   ❤️ 7
    楼上几位都在高潮什么,摘要确实属于加密算法,只不过不可逆。。
    love
        11
    love  
       2021-04-06 07:39:01 +08:00 via Android   ❤️ 2
    @singerll 说同属加密学还差不多,有加密必有解密,否则能叫加密吗
    mritd
        12
    mritd  
       2021-04-06 08:50:49 +08:00 via iPhone
    @singerll 你跟他们能讲明白算我输
    LudwigWS
        13
    LudwigWS  
       2021-04-06 08:57:30 +08:00 via iPhone
    网上搜索了一下,似乎称 MD5 为密码学哈希算法更准确,不符合狭义加密算法的定义
    Rheinmetal
        14
    Rheinmetal  
       2021-04-06 09:29:31 +08:00
    找个密码学 mooc 看看吧 还能答疑多好
    AoEiuV020
        15
    AoEiuV020  
       2021-04-06 09:36:27 +08:00   ❤️ 1
    不知道为什么讨论会变成 md5 是不是加密算法,
    我一直了解的都是加密算法分单向加密算法和双向加密算法,什么时候加密算法必须可以解密还原了,
    pkoukk
        16
    pkoukk  
       2021-04-06 09:40:44 +08:00
    只能说 crypto 翻译成加密不太好,才导致了各种误解。
    加这个字会在潜意识里对应解,暗示了有加就有解。翻译成密码学就挺好
    pkoukk
        17
    pkoukk  
       2021-04-06 09:44:24 +08:00
    看看隔壁数字货币就学的很聪明了,crypto currency 为啥不叫加密货币?
    叫加密货币大家就觉得这东西是隐秘化的东西了,但实际上却完全相反,所以他们并没有采用加密货币这种说法。
    Vegetable
        18
    Vegetable  
       2021-04-06 09:53:28 +08:00
    最搞笑的是,楼主这段话是从维基百科复制来的,被各路大哥一顿嘲讽,先去把 wiki 修改了好吗?
    原文是 In cryptography, the avalanche effect is the desirable property of cryptographic algorithms, typically block ciphers[1] and cryptographic hash functions, wherein if an input is changed slightly (for example, flipping a single bit), the output changes significantly (e.g., half the output bits flip). In the case of high-quality block ciphers, such a small change in either the key or the plaintext should cause a drastic change in the ciphertext. The actual term was first used by Horst Feistel,[1] although the concept dates back to at least Shannon's diffusion.

    只不过是 cryptographic algorithms 翻译成了加密算法而已
    exiledkingcc
        19
    exiledkingcc  
       2021-04-06 10:54:55 +08:00   ❤️ 10
    MD5 属于密码学( Cryptography )的内容,是密码学 hash 算法( Cryptographic hash function )。
    不能说是加密( Encryption )算法。
    加密( Encryption )指把明文( plaintext )编码( encoding )成为密文( ciphertext )的过程。
    相反,解密( Decryption )是指把密文解码为明文的过程。
    marcong95
        20
    marcong95  
       2021-04-06 11:02:12 +08:00   ❤️ 1
    v 站日常之 md5/base64 不是加密算法

    考虑到 18#的引用,再查了下 cryptographic algorithms 确实有翻译为加密算法的习惯,虽然可能不太贴切?以后是不是在 v 站这类话题还是别说中文了?

    @pkoukk #17 crypto currency 不是也挺多翻译成加密货币的么?毕竟要跟 Q 币这种“数字货币”区分开 ,那似乎要说“密码学货币”?
    gaoryrt
        21
    gaoryrt  
       2021-04-06 11:04:59 +08:00
    @love 某种程度上来说 hash 也有解密的,不过加密过程中损失的信息需要在理想彩虹表的筛选过程中补偿回来罢了
    Flymachine
        22
    Flymachine  
       2021-04-06 11:44:58 +08:00   ❤️ 4
    计算 MD5 时,实际上算的是是“数据+填充字节+数据长度取模”。这样长度的变化必然会导致 MD5 计算结果的变化。至于每一位的变化如何引发 MD5 的变化,你可以理解一下核心的这四个变换函数:

    #define F(x,y,z) ((x & y) | (~x & z))
    #define G(x,y,z) ((x & z) | (y & ~z))
    #define H(x,y,z) (x^y^z)
    #define I(x,y,z) (y ^ (x | ~z))

    计算 MD5 时会把每一 512 字节的数据会分成 16 个小组,然后去做这 4 个变换运算,结果参与下一个小组运算。
    毫无疑问,只要数据中有一位发生了变化,变换函数的结果必然也会发生变化。在之后的运算中差异便会被累积起来,从而使结果出现较大的变化。

    我没学过密码学,所以没法说这四个函数是基于怎样的原理设计出来的。只能根据 MD5 的实现代码给你一些参考。
    doublleft
        23
    doublleft  
       2021-04-06 12:04:51 +08:00
    @marcong95 #20 给这个大哥逼( force )成啥样了
    QBugHunter
        24
    QBugHunter  
       2021-04-06 12:58:50 +08:00
    问个问题,楼主这个帖子是陈述句还是疑问句?
    Flymachine
        25
    Flymachine  
       2021-04-06 13:03:36 +08:00
    话说目前 MD5 算法已经不安全了,王小云的研究,且现在已经有搞病毒搞流氓软件的在利用这项技术了。
    现在比较简单的散列算法里也就 SHA-1 还能用(虽然也不安全了),之后还是要换成 SHA-256 之类的高强度算法
    nnnToTnnn
        26
    nnnToTnnn  
       2021-04-06 13:26:16 +08:00
    cryptographic algorithms

    1. Hash functions
    2. Symmetric-key algorithms
    3. Asymmetric-key algorithms
    agdhole
        27
    agdhole  
       2021-04-06 13:43:41 +08:00
    别在代码里面把 md5 当加密用就行
    sakura1
        28
    sakura1  
       2021-04-06 13:47:04 +08:00
    借楼问一下,为什么我不能新建主题了
    iyaozhen
        29
    iyaozhen  
       2021-04-06 13:48:07 +08:00
    其实 MD5 就是要雪崩效应,稍微不一样 hash 出来的要不一样 不然就有规律了
    BeautifulSoap
        30
    BeautifulSoap  
       2021-04-06 13:50:51 +08:00
    论计算机领域里不靠谱翻译导致的各种没有意义的问题和争吵
    hxndg
        31
    hxndg  
       2021-04-06 14:11:10 +08:00
    @singerll

    @AoEiuV020

    @Vegetable
    @marcong95

    上学那会写密码学相关的论文的时候,我们一般都不说 hash 是加密,最多说个单向。
    因为 hash 就是 hash,hash 这几个字就明白的说明了 hash 的功能,而不是上来就说加密。
    名词选择的不准确会干扰听的人的理解。

    再说 lz 的题目说的是 md5 如何实现雪崩效应
    但是内容和题目完全不沾边,只是解释了雪崩是啥

    从本质来说上就是混淆和扩散,
    yunyuyuan
        32
    yunyuyuan  
       2021-04-06 16:18:07 +08:00
    这都能吵起来
    IvanLi127
        33
    IvanLi127  
       2021-04-06 16:31:04 +08:00
    前面几楼怎么这么容易高潮。。。这算严谨过度了吧
    felixcode
        34
    felixcode  
       2021-04-06 16:35:30 +08:00
    楼主只想自问自答,自答完了就结帖了,把这当成了记事本,却没想到有这么多回复。
    jhdxr
        35
    jhdxr  
       2021-04-07 00:20:30 +08:00
    @Flymachine sha-1 安全????
    Flymachine
        36
    Flymachine  
       2021-04-07 09:28:02 +08:00
    @jhdxr “也就 SHA-1 还能用(虽然也不安全了)”,能用和安全是两个概念...
    毕竟不是每个领域都需要像金融业那么注重安全。虽然 SHA-1 已经不被推荐使用,但至少碰撞难度还是比较高的,说一句“能用”没啥差错吧?
    jhdxr
        37
    jhdxr  
       2021-04-07 11:38:55 +08:00
    @Flymachine 目前,或者说从去年开始,就已经有针对 sha1 的选择性前缀的碰撞攻击( a chosen-prefix collision )了。我不认为在这样的情况下,这依然能够被认为是尽管不安全但还在能用的边缘。

    ref: https://eprint.iacr.org/2020/014.pdf
    Flymachine
        38
    Flymachine  
       2021-04-07 12:43:32 +08:00
    @jhdxr 好吧,我没有关注这件事,4.5 万美金的破解成本确实不算太高了。看来只能上 SHA-256 或者 SHA-3 了...
    unco020511
        39
    unco020511  
       2021-04-07 14:08:40 +08:00
    @singerll hash 什么时候属于加密算法了?你自己去维基百科上看看加密的定义,md5 这样的摘要算法绝对不属于加密算法
    singerll
        40
    singerll  
       2021-04-07 15:24:52 +08:00 via Android
    @unco020511 你看下国家密码局颁发的国密算法文件。。。
    runliuv
        41
    runliuv  
       2021-04-07 15:38:58 +08:00
    unco020511
        42
    unco020511  
       2021-04-07 17:27:50 +08:00
    @singerll 贴出来看看
    quxinna
        43
    quxinna  
    OP
       2021-07-12 19:31:12 +08:00
    我发现 md5 是通过 5 进行雪崩的
    quxinna
        44
    quxinna  
    OP
       2021-09-23 14:11:27 +08:00
    md5 雪崩问题我有一些进展,https://github.com/221294583/crc32 说是 crc32 通过多项式和原始值同时进行的递归异或实现雪崩,我想 md5 也是如此,但我看不懂 md5 的代码,有谁帮我一下解释这段代码。https://github.com/blueimp/JavaScript-MD5
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.