使用MD5验证文件完整性提高数据安全

倾丞(Jochen) · 1年前
2023-1-22 · 折腾日记 · 564 · 3

前言

这两天经常看到一些数据安全问题,比如某塔服务器管理面板推出的某塔数据一键迁移脚本就存在设计缺陷,某位倒霉的站长将国内服务器数据迁移至海外数据中心,结果网站丢失了不少资源文件,看似只是个网络传输与延迟丢包问题,但是我们设想假如插件在打包文件时采用双端验证文件md5的方式进行文件校验,避开这种问题岂不是游刃有余?

概述

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hash value),用于确保信息传输完整一致。

MD5散列样式

一般128位的MD5散列被表示为32位十六进制数字。以下是一个43位长的仅ASCII字母列的MD5散列:

md5("未来不足惧,过往无需泣。");
= 46c7ea8ff38ad948b45289beeea32354

即使在原文中作一个小变化(比如用,取代,)其散列也会发生巨大的变化:

md5("未来不足惧,过往无需泣。");
= a1e641be59f24c6be698015f4f816ea6

空文本的散列为:

md5("");
= d41d8cd98f00b204e9800998ecf8427e

应用

使用windows cmd终端进行文件MD5校验

1.使用快捷键Win+R,调用运行界面,输入cmd后回车
2.输入certutil -hashfile <文件名称> MD5,回车后,即可校验文件的MD5了(注意写绝对路径)

C:\>certutil -hashfile C:\a\b\c\ChaoZiSheZengYuBoChuFengJian.zip md5
MD5 的 C:\a\b\c\ChaoZiSheZengYuBoChuFengJian.zip 哈希:
61b8600d3a2e25fd473303d7b2105ce1
CertUtil: -hashfile 命令成功完成。

使用Linux CLI终端进行文件MD5校验

md5sum [选项可为空] <文件名称>

https://blog.csdn.net/cnds123321/article/details/124946370

root@debian:~# md5sum /root/test.php
e3894b247855de107fce132a7f8bb2c2  /root/test.php

使用JS进行文件MD5校验

使用卡巴斯基在线验证md5并检测潜在风险

思考

MD5真的绝对安全吗(哈希碰撞)

举个很简单例子,两张不同的图片出现了相同的md5值

https://crypto.stackexchange.com/questions/1434/are-there-two-known-strings-which-have-the-same-md5-hash-value

利用MD5碰撞,生成两张显示不同,但是MD5相同的GIF图片

https://www.chenxublog.com/2020/12/09/different-gif-same-md5.html

让我们看看这些可怕的哈希碰撞发生的可能性有多大。由于另一个原则,生日悖论,文档池中的哈希碰撞在可能的哈希值数量的平方根附近变为 50% 的可能性。(这被称为生日悖论,因为概率遵循与一个房间里两个人生日相同的概率相同的规则。)对于 SHA-512,一个 512 位哈希,文档中的字符数量大约是 2^256 个 而2^256真是个天文数字。

2^256 有多大?大约是116万亿万亿万亿万亿万亿。比 1 大一点,后跟 77 个零。给它一个比例,它明显多于我们银河系中的原子数(大约 2^226)。

从静态上讲,这意味着发生碰撞的可能性极小。比您和您的 12 位同事分别被闪电击中的可能性更小。比你的房子被流星击中的可能性更小……要达到 2^256,您必须在 2^221 年内每毫秒编写一份文档。那是 400 万亿万亿万亿万亿年。比你能想象的任何事情都更不可能……但是,我承认,不完全是零(例如“挖矿”也可以说是利用计算机破解一道与记账相关的数学题——“哈希谜题”)

我们应该恐慌吗?当然不是。关注哈希冲突的问题是因为这种可怕的数据损坏可能性忽略了所有其他更有可能导致数据损坏的方式。这就像你因为担心被闪电击中而买了一辆碳纤维自行车,然后不戴头盔骑行穿过波士顿市中心的交通。人类在衡量风险方面真的很糟糕,所以有时我们会担心错误的事情,或者我们根本不应该担心的事情

参考文献

https://segmentfault.com/a/1190000022920399

https://www.zhihu.com/question/22651987/answers/updated?utm_id=0

https://permabit.wordpress.com/2008/07/18/what-do-hash-collisions-really-mean/

January 22,2023 12:15:42
阅读564
撰写评论
Comments
Qicloud
感谢提供思路,公共头像服务参考这个比判断状态码快多了
#1 1年前 (2023-02-07)
回复
倾丞(Jochen)
@Qicloud:自建的吗?
#1-1 1年前 (2023-02-11)
回复
Qicloud
@倾丞(Jochen):自建的,目前在备案
#1-2 1年前 (2023-02-12)
回复
心随我意 路行千里
可爱 艺术家 江苏靓仔 二次元 哲学家
个人档
qc#gov.moe ,#=@
最新评论
7Wate
摄影让一瞬间成为永恒。
1周前
倾丞(Jochen)
@小饿:是的,我...
1周前
小饿
“你要拍好人像就不能只拍人,要拍树是另一...
1周前
倾丞(Jochen)
@AW:好滴 ٩(•̤̀ᵕ•̤́๑)ᵒᵏ...
1周前
55254149
呐~🌹
2个月前
AW
你好—— 想更新一下友链quq 是”E...
2个月前
拷痛
x感谢分享
2个月前
倾丞(Jochen)
@小归客:(^_^)☆
2个月前
小归客
高中没有压抑,大学玩很开心。现在很迷茫,...
3个月前
倾丞(Jochen)
@小归客:好的
3个月前