[信息安全] 加密算法:md5摘要算法 / sha256算法

发布时间 2023-08-14 20:19:29作者: 千千寰宇

1 MD5

1.1 算法定义

  • MD5的全称为 Message-Digest Algorithm,是一种被广泛使用的单向散列函数、属于Hash算法中一种比较重要算法——具有单项加密加密结果唯一安全性能好等优点。
  • MD5算法可以产生出一个128位(16字节)的散列值(哈希值),用于确保信息传输完整一致;以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

  • 2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

  • 对于任意长度的消息,这个摘要相当于是个长度为16个字节的数组,通常用一个长度为32的十六进制字符串来表示。

  • MD5是一种算法,通常用于在数据库中存储密码

在在Internet初期,网站主要将密码以明文形式保存在数据库中,然而这并不安全,因此人们使用MD5来混淆数据库中的密码。
MD5信息摘要算法可以从任何密码,短语或文本中生成32个字符的十六进制字符串,比如:如果用户的密码是654321,那在数据中就会生成 c33367701511b4f6020ec61ded352059 这样的字符串。因此,IT人员就看不到用户的密码,如果有人偷了数据库,就不会直接获得所有密码。

  • MD5在线解密的原理与步骤

MD5本身不可逆,但仍然有一些网站声称支持在线解密MD5码。

MD5解密主要是用于攻防演练或网络安全测试,在对网站入侵过程中,获得了管理员或者其他用户账号和密码值。
现在网上有很多流行的MD5在线解密平台和解密工具,其作用也是针对用户密码,或比较简单的密文进行解密,方法是将常用字符串的MD5密码保存到数据库,然后再与待解密的字符串做对比,最终找到匹配的源码。下图是MD5在线加密解密平台流程图:

1.2 MD5算法不安全的原因

1.2.1 字典表很大

在网上有很多md5解密网站(如:https://md5.cn/),就如同一个字典表。通过在数据库存储很多常用的密码,可以在很短的时间内查找任何哈希值的答案。这种数据库占用大量的磁盘空间,具有一定的成功率。在计算机安全领域,一些朋友需要用到MD5解密网站,通过这类型的网站,可以提高工作效率,大家可以去试试。

1.2.2 碰撞

安全的算法具有良好的抗冲突性。
也就是说:对于不同的数据输入,获得相同哈希值的可能性比较低,但是MD5的抗冲突性较低。

1.2.3 暴力攻击速度很快

蛮力攻击是通过尝试多种可能性来查找密码的一种方法,即可以猜测用户可能使用的东西(出生日期,孩子的名字,宠物的名字等),也可以尝试一切(从a,b, c到10个字符的特殊字符密码)。抵御暴力攻击的唯一方法可能是密码长度,如果您拥有40个字符长的随机密码(带有特殊字符),那么目前你的密码可能是安全的。

1.3 MD5不安全,可采取什么方法来提高安全性?

使用长密码

强制用户使用更长的密码(可能是15个字符或更多),此外还可以增加密码的复杂度,以确保他们使用的是大写,小写和特殊字符。但是,人们经常会使用弱密码。因此,很容易被猜到,更糟糕的是,有的人甚至在便签纸上记录密码。

用盐

尝试做的第一件事就是在加密密码时使用salt,基本上,盐是您在每个密码之前和/或之后添加的单词。如果盐是“ randomsaltformypassword”,并且用户选择“ 654321”作为密码,则将“ randomsaltformypassword654321”用作MD5功能参数。

这样,你就可以在数据库中加密更长的密码,并且黑客很难找到相应的密码,请确保选择长字样以充分提高安全性。

使用其他哈希函数

最好的解决方案可能是使用其他加密算法(如:SHA256、...)。

虽然这可能不是最简单的方法,因为这可能涉及更改数据库结构,但这可能是最安全的方法。

2 SHA1

SHA1是一种密码散列函数,可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。
输入是按512 位的分组进行处理的。
SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。

3 SHA256

3.1 算法定义

SHA256 算法 (Secure Hash Algorithm 256)

  • 一种具有确定性的单向哈希函数/单向散列函数(deterministic , one-way , hash , function)

  • 256代表最终的哈希值摘要是固定长度256位

    • 哈希值通常用一个长度为64的十六进制字符串(由随机字母和数字组成的)来表示,相当于是个长度为32个字节的数组,其中1个字节=8位。即无论明文大小如何,哈希值始终为256 位。
    • 例如:"爱我中华2023" (UTF-8编码) 通过 SHA256运算后,可得其输出的摘要
2959c3680fb764ba020aacfd06818f7aaffa7a9133c4864ba98a1ab3239b71ba

简言之,SHA 256通过将消息和文件等数据转换为固定长度为256位的、且难以区分的字符串来保护数据不被截取或篡改。几乎各行各业都会使用SHA256算法,包括政府机构和区块链等创新技术。

  • 数据指纹:输入的数据长度是任意的,输出的数据长度是固定的。可将其输出理解为原数据的数据指纹
    • 它具有确定性特征。同一输入值,总能得到相同的输出值。
    • SHA256是指输出长度为256位的安全、哈希算法。

3.2 算法特点

3.2.1 (输入)消息长度

输出具有固定大小,但输入没有大小限制。

3.2.2 (输出)摘要长度

  • 摘要长度消息摘要(即将加密哈希函数应用于数据的哈希值)长度应为 256 位。

在您的服务器上安装 SSL 证书时,您可以选择SHA-512或更大的摘要。
虽然SHA-512更安全,但不建议将其用于大多数系统,因为它需要更强大计算能力和计算机性能。

3.2.3 单向性(不可逆性)

所有哈希函数(例如 SHA 256)在设计上都是不可逆的。
对于每个输入,您只有一个输出,但反之则不然。多个不同的输入可能产生相同的输出。

  • 单向性(不可逆性)
    • 单向代表了函数很难逆推。
      • 有些函数很容易逆推,如:function y = x + 30(只需-30,就可以逆推回输入数据x)
      • 但如果你要逆推两个大素数的乘法公式,则很难

3.2.4 运算性能高

  • 基于本函数进行运算,以现有计算机算力,支持每秒运算6千亿亿次以上。
    • 其他函数,如 傅里叶变换函数等是无法达到这种运算量级的。

3.3 算法应用

SHA 256 是用于数字签名验证、SSL 握手、密码保护和许多其他安全相关操作的标准哈希算法。

3.3.1 简单Demo

现在请看哈希函数是如何工作的真实示例。假设您写了“便宜SSL证书”的消息并对其应用 SHA-256 哈希函数,将会得到:

3868401EDD8E4AE2F804AC3A6215C5EC522AE032F59C13296C1A25CAE4F26C52

现在,我们在消息末尾添加一个感叹号:“便宜SSL证书!”,并生成输出。结果则是这样:

EE39F1A692558947B80109483AF80ACC1E3722D533B7A9E7713E823F6E2D2A57

如您所见,仅添加一个字符,哈希值长度保持不变,但是得到的结果完全不同,这也就是为什么sha256比较安全的原因。
如果您要将此消息发送给朋友,则需提供哈希值并指定算法。
您的朋友会在他们的那端验证哈希值,如果匹配,他们就会知道该消息是真实的。

3.3.2 数字签名验证

数字签名是一种电子签名,用于验证消息(例如电子邮件、信用卡交易或电子文档)的真实性和完整性。它是通过散列文件,并使用 PKI(公钥基础设施)对其进行加密而创建的。

SHA 256算法在整个过程中的作用是保证数字签名的完整性。接收方的客户端检查自己端的哈希算法,并使用公钥对消息进行解密。如果匹配,则数据是真实有效、未被篡改。

3.3.3 SSL握手 & SSL证书(HTTPS)

  • SSL 握手Web浏览会话的关键元素,它依赖于SHA算法功能。通过SSL/TLS的通信总是从SSL握手开始,这是一种非对称加密技术,允许浏览器验证web服务器,获得公钥,并在数据传输开始之前建立一个安全连接。

  • 无论数字证书品牌、价格和类型如何,所有SSL证书的通用规范是采用SHA 256算法,您可以在证书详细信息或产品信息中列出的功能中看到。

  • 根据用于监控 SSL/TLS 支持质量的全球仪表板SSL Pulse称,Alexa全世界最受欢迎的网站列表中,有97.2%的网站使用 SHA-256 算法的SSL证书。

3.3.4 密码保护 / 数据脱敏

  • 网站以散列格式存储用户密码。如前所述,哈希使用加密算法将密码转换为一串短的字母和数字。如果网站被黑客入侵,网络攻击者将无法获得哈希密码。

3.3.5 区块链交易 & 比特币

  • SHA-256 算法是创建比特币时用于加密货币的第一个算法。

  • 区块头是区块链的基本元素,因为它们有助于以特定顺序将一个交易区块连接到下一个交易区块。正如之前提到的,当输入的信息有微不足道的差别,SHA算法也能产生大相径庭的结果。

  • 任意区块发生变化时,都会影响后续的所有区块。所以如果想要修改某个区块的内容,就必须修改后许所有区块的内容,而这几乎是不可能的,从而保证了区块数据的安全。

  • 比特币挖矿的过程,就是反向找到输入值的过程。

这个输入值通过SHA256算法产生了一串开头带有约70个0的输出值
但是因为没有已知的公式,每个人能做的也只是通过蛮力一个数一个数去试,直到找到正确的输入值。

不过比特币只需要找到一个接近输入值的哈希值就好,不需要完全匹配。

实际上,挖矿难度可以调整,保证大概每10分钟能够有旷工找到匹配的输入值,然后赚取12.5比特币的出块奖励。

没有人能找到比特币挖矿的捷径,虽然找到捷径存在巨大的经济动力。

这就是为什么 SHA256 是地球上最流行的算法。

3.4 算法历史:SHA-0/1993 => SHA-1/1995 => SHA-2/2001 => SHA-3/2015

安全散列算法是美国国家安全局 (NSA) 创建的。美国政府为这项技术申请了专利,然后以免版税许可的形式发布,供所有人使用。

第一个SHA-0算法可以追溯到 1993 年。紧接着SHA-1于1995年问世,尽管已被破解,但现在还是有在一些老版本的服务器和客户端上使用。2001年,NSA发布了 SHA -2系列算法,其中包括 SHA 256 和其他五个不同算法标准:

  • SHA 224
  • SHA 384
  • SHA 512
  • SHA 512/224
  • SHA 512/256

2015 年 8 月 5 日,NIST(美国国家标准与技术研究院)发布了 SHA -3,这是最新的安全哈希算法,内部算法设计与以往不同。虽然 NIST 目前还没有计划吊销 SHA-2 算法,但如果有必要,SHA-3可以在当前应用中替代掉SHA-2。

3.5 SHA256 与 MD5 算法的区别?

相同点

1、都是密码散列函数,加密不可逆。
2、都可实现对任意长度对象加密,都不能防止碰撞。

不同点

  • 安全性方面:
    1、SHA256(称SHA2)的安全性最高;(相对md5和SHA1而言,SHA256很安全)
    2、md5相对来说比较容易碰撞,安全性没这么高。

  • 性能方面:
    以个60M的件为测试样本,经过1000次的测试平均值,这两种算法的表现如下:
    MD5算法运1000次的平均时间为:226ms
    SHA256算法运1000次的平均时间为:473ms

总而言之,md5和sha256都是密码散列函数,加密不可逆。虽然都不能防止碰撞,但是相对而言,md5比较容易碰撞,安全性没有sha256高。

X 参考与推荐文献