不可能完成的任务:在图片上打上它的 md5 哈希值 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
manami
V2EX    分享发现

不可能完成的任务:在图片上打上它的 md5 哈希值

  •  1
     
  •   manami 2020-01-01 18:10:47 +08:00 12584 次点击
    这是一个创建于 2179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就在刚才,我看到微信有个好友的头像比较好看,就点开来看。发现他给图片加了 2 行信息:

    For xxx use only md5: xxx 

    可以猜测他应该是为了防止别人盗图而加的额外信息。看到这里会发现,这其中有一个他不可能完成的任务:在图片上打上它的 md5 哈希值。于是我就问了我这个朋友,他说他知道的啊,只是打算加个类似水印的东西。给图片打上正确的 md5 哈希值是不可能完成的:因为你一加 md5 哈希值这个图片文件本身就被修改了,md5 哈希值也随之发生了改变。这是多么有意思的事情啊!

    我相信我这个朋友他应该是故意的,因为他是非常聪明的人,很有意思的不可能完成的"水印"把我给惊艳到了。

    于是我打开 ps 软件,把我的微信头像图片也加了这两行信息……

    第 1 条附言    2020-01-02 13:24:11 +08:00
    找到一个国外 2011 年讨论的问题:Can a file contain its md5sum inside it?
    https://security.stackexchange.com/questions/3851/can-a-file-contain-its-md5sum-inside-it
    第 2 条附言    2020-01-02 13:26:43 +08:00

    But it's probably (just about) small enough to fit in a file on a ZFS filesystem, although you'd need a hard disk with a surface area around the size of land area on the planet.

    According to my calculations, assuming you could fit data onto a platter with a density of 10 TB per square inch (around the highest prototypical density around today), and assuming there was an ideal method to save MD5 sums onto a disk (without compression), such a disk would be approximately 47 million square kilometers in surface area, approximately 1/3 of the land area of the Earth. (assuming there was a flat land mass large enough)

    第 3 条附言    2020-01-02 13:31:29 +08:00
    @hst001 个人觉得这位老哥的比喻很贴切
    69 条回复    2020-01-03 16:46:43 +08:00
    also24
        1
    also24  
       2020-01-01 18:16:54 +08:00   3
    楼主你下载一下这张图片,然后 md5 一下试试看?

    https://shells.aachen.ccc.de/~spq/md5.gif
    also24
        2
    also24  
       2020-01-01 18:19:54 +08:00
    unifier
        3
    unifier  
       2020-01-01 18:25:28 +08:00
    哈哈哈,直接被楼上打脸
    我记得 md5 已经有碰撞生成器了
    manami
        4
    manami  
    OP
       2020-01-01 18:25:34 +08:00 via Android
    @also24 我回去试试
    manami
        5
    manami  
    div class="badge op">OP
       2020-01-01 18:26:25 +08:00 via Android
    sha256 等其他加密类似的呢
    manami
        6
    manami  
    OP
       2020-01-01 18:32:22 +08:00 via Android   1
    @zacharyjia 老哥你怕是理解错了,我知道 md5 已经有碰撞器,但这跟用它来校验文件完整性无关
    Osk
        7
    Osk  
       2020-01-01 18:35:37 +08:00 via Android
    图片格式中应该有不少区域和看到的图像无关,说不定以后随着技术的发展真的能做到 /doge/
    secondwtq
        8
    secondwtq  
       2020-01-01 18:39:24 +08:00   1
    碰撞这个理论上倒是可行,问题是发到网络上(尤其是国内网络)基本都会有一道压图,格式也可能会转。我觉得不行
    delectate
        9
    delectate  
       2020-01-01 18:41:23 +08:00   2
    Here is the explanation:

    1. Generate a gif for each possible digit in the first column
    2. Append collision blocks to each gif to make a 16 way collision
    3. Repeat for each digit
    4. Hash the final product
    5. Replace each digit with the correct digit
    https://news.ycombinator.com/item?id=13823704

    也就是说,只有特定的格式文件才能这么操作,而且要精心匹配,否则不太可能搞定的。
    delectate
        10
    delectate  
       2020-01-01 18:43:33 +08:00   2
    还有个办法是用隐写术保证版权,压缩了也很难被破除;
    就像阿里前几年抢月饼被开除的事情,有人把内部论坛的截图发出来,通过隐写术破译出来泄密者是谁了。
    那么怎么解决隐写术呢?不追求画质的前提下,手机拍一下,问题全解决了。如果追求画质,那么很复杂,知道原理的可以逆向操作,不知道就只能类似于重绘一个很相似的图。
    also24
        11
    also24  
       2020-01-01 18:46:27 +08:00
    @zacharyjia #3
    也不算打脸,只是觉得这个图片很应景就发了一下~

    毕竟还是做不到对任意图片的任意修改,就像 @delectate #9 提到的,有很多条件限制。

    @manami #5
    你看你,一整篇都写的 “哈希”,怎么回帖里翻车写个 “加密” 出来。
    table cellpadding="0" cellspacing="0" border="0" width="100%"> Duolingo
        12
    Duolingo  
       2020-01-01 18:46:30 +08:00 via Android
    @delectate 拍出来也是能还原的吧。。。毕竟是在频域上做的标记
    lostpg
        13
    lostpg  
       2020-01-01 18:47:09 +08:00 via Android   1
    这种操作叫次原像攻击(已知 x,求 x'使二者的哈希值相同)。sha2,包括你说的 sha256 都是能抵御次原像攻击哒。
    3dwelcome
        14
    3dwelcome  
       2020-01-01 18:54:29 +08:00 via Android   1
    可以学习比特币原理,用循环随机方法来无限逼近特定 hash 值,是可行的。
    比如只匹配 md5 前八位,就可以。
    KunMinX
        15
    KunMinX  
       2020-01-01 19:00:33 +08:00
    加水印了 md5 就发生改动了,刻舟求剑,是这个理不
    manami
        16
    manami  
    OP
       2020-01-01 19:31:34 +08:00 via Android
    @KunMinX 感觉差不多
    chinvo
        17
    chinvo  
       2020-01-01 19:35:22 +08:00 via iPhone
    重点在于,只要你重新保存一个压缩格式的图像,那么他的 hash 就会发生天翻地覆的变化

    把原图的 hash 放放到图的元数据里面倒是有点用,但是大部分网站和应用会对图做压缩或者丢弃元数据
    crclz
        18
    crclz  
       2020-01-01 19:39:06 +08:00
    理论上(数学)是可以的。设字母表Σ大小为 S,哈希字符串长度为 L,改变图片的其他部分,组成 S^L + 1 种组合,总会遇到相同的。
    lostpg
        19
    lostpg  
       2020-01-01 19:47:40 +08:00 via Android
    @crclz 哈希的值域都是相当大的,良好设计的哈希算法几乎不可能遇到两个相同哈希的原文。。
    300
        20
    300  
       2020-01-01 20:36:02 +08:00   2
    一直有个想法,
    一个压缩包的密码是自己的 HASH 值
    里面放着一个文件名是自己 HASH 值得文件
    文件的内容也是自己的 HASH 值
    Seanfuck
        21
    Seanfuck  
       2020-01-01 20:56:59 +08:00 via iPhone
    见过 php 混淆加密是验证自身文件 md5 的,文件被修改就跑不了,不知道怎么实现的
    EdwardSherlock
        22
    EdwardSherlock  
       2020-01-01 21:11:47 +08:00   3
    人类的本质是套娃?
    est
        23
    est  
       2020-01-01 21:53:49 +08:00   1
    能吧一个 .rar 文件解压出来得到一个 .txt 里面写的是 .rar 的 md5 不?
    hst001
        24
    hst001  
       2020-01-01 22:12:39 +08:00   1
    这就好像让你去预测未来,但是记得把你的预测过程也预测进去,不然就不准了
    heiheidewo
        25
    heiheidewo  
       2020-01-01 22:48:01 +08:00
    楼主是怎么做到的呢
    manami
        26
    manami  
    OP
       2020-01-01 22:53:39 +08:00 via Android
    @heiheidewo 我没做到,给图片打上的应该是错的 md5 哈希值
    mondeo
        27
    mondeo  
       2020-01-01 22:57:39 +08:00 via Android
    md5 早就被攻破了,随便编个 md5,然后在文件里拼凑些数据进去,就能获得同样的 md5
    alphatoad
        28
    alphatoad  
       2020-01-01 22:59:42 +08:00 via iPhone
    Key extension attack
    mxT52CRuqR6o5
        29
    mxT52CRuqR6o5  
       2020-01-01 23:35:23 +08:00 via Android
    @manami 可以碰撞就代表检验完整性的能力被攻破了
    Youen
        30
    Youen  
       2020-01-01 23:53:59 +08:00
    出生的时候嘴巴里含着自己的基因密码
    xifangczy
        31
    xifangczy  
       2020-01-02 00:18:48 +08:00
    那么,有没有一个 md5 字符串就是它自己的 md5 值?
    Tink
        32
    Tink  
    PRO
       2020-01-02 00:47:26 +08:00 via iPhone
    @xifangczy #31 有的,你搜搜,以前看到过
    leishi1313
        33
    leishi1313  
       2020-01-02 02:58:26 +08:00 via Android   8
    其实人家的本意是,图像如果被盗用,原图(不带 md5 )拿出来一 hash 就能证明是自己的,因为只有原图才能 hash 出这一串 md5 (不考虑碰撞的吧,也太难了)。楼主的理解歪了
    explore365
        34
    explore365  
       2020-01-02 03:01:47 +08:00
    msg7086
        35
    msg7086  
       2020-01-02 04:44:57 +08:00   2
    @leishi1313 对。MD5 的用意是证明图片来源而不是保证图片文件完整性。
    就算是被重新压缩重新处理,最后的成品图上依然有原始文件的 MD5。
    只要作者能证明他是第一个发布原图的人,就可以证明这个被修改过的文件源自他之手。
    Mithril
        36
    Mithril  
       2020-01-02 07:31:39 +08:00
    @delectate 隐写进去拍照也是会看到的,唯一的办法就是重新生成一张图。或者你知道算法直接抹掉隐写进去的数据。
    areless
        37
    areless  
       2020-01-02 08:19:55 +08:00 via Android
    areless
        38
    areless  
       2020-01-02 08:26:02 +08:00 via Android
    这个技术很成熟了的,大量影片照片其实都有隐藏版权信息的。做数字水印防伪的公司一方面提供按个数量收费的水印服务(一部片子几块钱),一方面提供盗版片源的全网扫描。
    areless
        39
    areless  
       2020-01-02 08:40:37 +08:00 via Android
    不过楼主那个无法做到。逃。。。
    chendeshen
        40
    chendeshen  
       2020-01-02 08:55:51 +08:00 via Android
    这跟 磁力链接 就是 种子文件 .torrent 的 hash ( md5 )? 一样道理?
    itodouble657
        41
    itodouble657  
       2020-01-02 09:15:26 +08:00 via Android
    图片加其他东西生成指定的 md5 ?
    openbsd
        42
    openbsd  
       2020-01-02 09:28:27 +08:00
    图片的话,难道不是加数字水印 ?
    sinv
        43
    sinv  
       2020-01-02 09:29:12 +08:00
    md5($file)==md5($file+md5($file))

    如此这样么?
    imn1
        44
    imn1  
       2020-01-02 09:42:06 +08:00
    @chendeshen
    不一样,文件改名并不影响 hash 值,内容变化才影响
    nanoha
        45
    nanoha  
       2020-01-02 09:55:45 +08:00
    理论上是可行的吧 但是实际能否实现就不知道了
    一个函数加上一个常量然后求导后还是这个函数本身 就看你能否找到那个 e^x
    Rekkles
        46
    Rekkles  
       2020-01-02 09:59:37 +08:00
    我。。。。操我自己?
    iv2ex
        47
    iv2ex  
       2020-01-02 10:12:32 +08:00
    @Rekkles #46 你要是只看结果,这样做没毛病。
    iv2ex
        48
    iv2ex  
       2020-01-02 10:13:52 +08:00
    这个技术很成熟了的,大量影片照片其实都有隐藏版权信息的。做数字水印防伪的公司一方面提供按个数量收费的水印服务(一部片子几块钱),一方面提供盗版片源的全网扫描。
    --------------------------------
    @areless #38 这个方案不错啊,md5 (水印)是防伪,隐藏版权信息也行,只是不明显,外行看起来不酷
    bl5c
        49
    bl5c  
       2020-01-02 11:04:49 +08:00
    ![2020-01-02_110338.jpg]( https://i.loli.net/2020/01/02/M73ybi9FYXAVgEk.jpg)
    好几年前就有了
    ThirdFlame
        50
    ThirdFlame  
       2020-01-02 11:08:15 +08:00
    @bl5c 这是安装程序运行时 读取安装文件 计算出来的。 不是固化的。
    villivateur
        51
    villivateur  
       2020-01-02 11:23:38 +08:00
    这应该是一个数学问题吧?

    对于任意一个数 A,能否找到一个数 B,使得 A+B 的某种哈希值等于 B ?
    villivateur
        52
    villivateur  
       2020-01-02 11:23:54 +08:00
    @villivateur 求大佬解惑
    JerryZhi
        53
    JerryZhi  
       2020-01-02 11:37:32 +08:00
    他只要先对原图求 md5,再把这个 md5 写到图上,并发布。只要原图不泄露,他就能证明自己才是最初来源。
    但是求相关的数学问题确实很有意思哈哈。
    ksvany
        54
    ksvany  
       2020-01-02 12:12:40 +08:00
    禁止套娃
    tetora
        55
    tetora  
       2020-01-02 12:35:00 +08:00 via Android
    绕不过来,感觉不行,我还是可以把水印搞掉再重复一边你的动作
    BlueSky335
        56
    BlueSky335  
       2020-01-02 13:01:41 +08:00
    频域数字水印了解一下,像截图,有损压缩这种方式都无法去除干净。https://www.zhihu.com/question/50735753/answer/122593277
    mxT52CRuqR6o5
        57
    mxT52CRuqR6o5  
       2020-01-02 13:06:15 +08:00
    @manami 最简单的,jpg 文件在文件末尾 append 任意数据也不会影响 jpg 本身,可以靠这个特性去进行碰撞
    lneoi
        58
    lneoi  
       2020-01-02 13:44:41 +08:00
    我几点很久以前加壳软件有这类似的方式,加壳后能校验加壳后的文件 CRC32 是否一致,防止被修改,也是不明白怎么弄的。
    yolee
        59
    yolee  
       2020-01-02 14:09:36 +08:00
    禁止套娃
    mxT52CRuqR6o5
        60
    mxT52CRuqR6o5  
       2020-01-02 14:19:32 +08:00 via Android
    @lneoi 算的不是整个文件的 crc32,而是某一部分
    Pogbag
        61
    Pogbag  
       2020-01-02 14:41:08 +08:00
    winrarsetup.exe.rar
    ahaxzh
        62
    ahaxzh  
       2020-01-02 15:20:46 +08:00
    我吃了一顿饭体重没变
    manami
        63
    manami  
    OP
       2020-01-02 15:26:51 +08:00
    ahaxzh
        64
    ahaxzh  
       2020-01-02 15:32:36 +08:00
    @mondeo 那到底谁是真的 谁是假的呢 哈哈哈哈哈哈哈哈哈哈
    mxT52CRuqR6o5
        65
    mxT52CRuqR6o5  
       2020-01-02 15:32:38 +08:00
    看了些文章,md5 的碰撞攻击是生成两个相同 md5 值的文件,而这个 md5 值是不可控的,碰撞攻击很容易
    生成指定 md5 的攻击叫做 Preimage attack,而进行 Preimage attack 很困难
    我 57 楼的思路应该是行不通的
    qakito
        66
    qakito  
       2020-01-02 16:03:42 +08:00
    针对图片的签名,可以在不改变图片内容(例如 BMP 文件,不改变 RGB 数值; JPG 文件,不改变余弦变换值)的情况下,加入额外的信息;
    如果是一般的 binary 数据,除非该数据在生成时就已经自带了 checksum,否则无法在不改变文件的情况下,加入额外信息
    lneoi
        67
    lneoi  
       2020-01-02 16:27:11 +08:00
    @mxT52CRuqR6o5 我印象中是打开编辑器 六十进制改动头部和末尾 都会被壳拦住说校验不通过,好多年了不太确定就是,壳都不流行了
    shm7
        68
    shm7  
       2020-01-02 17:22:55 +08:00
    可能只是原图片的 hash 值,你们这些程序员就知道搞事情(逃
    ablu
        69
    ablu  
       2020-01-03 16:46:43 +08:00   1
    想到了特德蒋的《你一生的故事》(被改编过《降临》,电影质量嘛……)写到目前人类大部分的认知都是基于因果关系,而费尔马最少时间定律这种不好用因果关系解释的问题……
    没啥想法,感慨一下
    顺便推荐(逃
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2609 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 13:20 PVG 21:20 LAX 05:20 JFK 08:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86