SECURE BOOT 02 加密学基础:哈希值和数字签名

132 阅读3分钟

哈希算法

哈希算法是单向的、不可逆的,将任意长度的输入数据(如一个文件、一段文字)通过一个数学函数,转换成一个固定长度的、看似随机的字符串(称为哈希值或摘要)。

核心特性:

  • 单向性:从哈希值无法反推出原始数据。
  • 确定性:相同的输入永远得到相同的哈希输出。
  • 抗碰撞性:极难找到两个不同的输入对应同一个哈希输出。
  • 雪崩效应:输入的微小改变(如改一个标点)会导致输出的哈希值发生巨大、不可预测的变化。

主要算法:SHA 家族 SHA-256:属于SHA-2家族,输出256位(32字节)的哈希值。这是目前最常用的哈希算法,比特币挖矿和Merkle树的构建都使用它。 其他:SHA-1(已不安全)、SHA-3(新一代标准)。

主要用途:

  1. 数据完整性校验:下载软件时,官网会提供文件的SHA256校验和。你下载后自己计算一遍文件的哈希值,如果与官网一致,说明文件在传输过程中未被篡改。
  2. 区块链和加密货币:构成区块的核心结构,用于工作量证明(挖矿)。
  3. 存储密码:正规网站不会明文存储你的密码,而是存储密码的哈希值。你登录时,网站将你输入的密码计算哈希,与数据库存储的哈希值对比。这样即使数据库泄露,攻击者也无法直接获得你的明文密码。
  4. 作为数字签名的基础:签名通常是针对数据的哈希值进行,而非数据本身。

数字签名

数字签名是非对称加密和哈希算法的结合体,相当于现实世界中的“手写签名+公章”,用于验证信息的来源和完整性。

目标:接收方能够确认“这条消息确实是由声称的发送方发出的,并且在传输过程中没有被篡改”。

工作流程(结合了哈希和非对称加密):

假设[甲]要给[乙]发送一条带有签名的消息。
签名生成([甲]侧):
[甲]先对要发送的原始消息计算其哈希值(例如用SHA-256)。
[甲]使用自己的私钥对这个哈希值进行加密。这个加密后的结果就是数字签名。
[甲]将原始消息和数字签名一起发送给[乙]。
签名验证([乙]侧):
[乙]收到原始消息和数字签名。
[乙]使用[甲]公开的公钥去解密那个数字签名。如果解密成功,就能得到一个哈希值 H1。这步操作证明了:这个签名一定是用[甲]的私钥生成的,因为只有[甲]的公钥才能解开它。这就验证了身份(不可否认性)。
[乙]自己用同样的哈希算法(SHA-256)计算接收到的原始消息的哈希值,得到 H2[乙]比较 H1H2。如果两者完全一致,说明消息在传输过程中没有被篡改。这就验证了完整性。

就是发送加密消息的同时发送消息的加密哈希值,用【公钥能解密】确认身份,用消息哈希值和解密的得到的【哈希值一致】确认消息完整。