banner
NEWS LETTER

密码学基础-哈希函数与数字签名

Scroll down

哈希函数

哈希是什么

哈希函数: 将任意数据(二进制字符串)映射为固定长度"数字指纹"的单向散列函数,可用于验证数据完整性和保护敏感信息。

使用过程: 输入(任意长度数据) =>【黑盒函数(H: ${0,1}^{*} => {0,1}^{n}$)】 => 固定长度摘要(不可逆推)

哈希核心特性

  1. 单向性: 只有哈希过程,不存在可逆的解密过程,无法反向计算。
  2. 确定性: 相同输入即会得到相同输出,根据这点可进行重复验证。
  3. 高效性: 能够快速计算大文件或者长文本的哈希值。
  4. 固定长度输出: 不管文件与文本的大小,输出的固定字符长度都是相同的。
  5. 雪崩效应: 当输入改变1 bit(轻微改变),输出平均改变约 50% 的位,且改变不可预测的。

哈希安全机制

  1. 抗原像攻击(PreImage Resistance): 给定哈希值h,找到任意输入 x 使得 H(x) = h 是困难的

    • 攻击场景: 已知 hash = "a3b5c7d8....." ,找到一个任意 input 使得 H(input) = hash
    • 攻击难度: 需通过暴力尝试 $2^n$ 个可能性输入。例如,在SHA-256的情况下,n=256理论上可能,实际上无法实现。
  2. 第二原像攻击(Second PreImage Resistance): 给定输入 x1H(x1),找到另一个 x2 使得 H(x2)=H(x1) 是困难的

    • 攻击场景: 已知 xx.pdf 经计算后的 hash = "x1y2z3...",需伪造 evil-xx.pdf 使得 H(evil-xx.pdf) = "x1y2z3..."
    • 攻击难度: 需通过暴力尝试 $2^n$ 个可能性输入。
  3. 抗碰撞攻击(Collision Resistance): 找到任意两个不同的输入x1 ≠ x2,使得H(x1) = H(x2)是困难的

    • 生日悖论: 在一个有23个人的房间里,有两人生日相同的概率>50%,365天只需要√365≈23人就有50%碰撞概率。
    • 攻击场景: 在较少的尝试次数下,两组数据产生相同哈希值的概率可能比直觉预期要高。(生日攻击[Birthday Attack]:只影响抗碰撞性。)
    • 攻击难度: 为了抵御生日攻击,现代哈希函数的输出长度通常至少为 256 比特(如 SHA-256),这样需要 $2^{128}$ 次尝试,这远超目前计算机的算力极限。即便使用量子计算机也需要$2^{\frac{256}{3}}$次尝试。

哈希的应用

核心问题:在不可信的环境中,如何高效验证大量数据的完整性和真实性?

应用场景 解决的问题 价值体现 使用算法
文件传输校验 网络传输中的数据损坏/篡改 用64个字符验证10GB等大文件 SHA-256
密码存储 数据库泄漏导致密码暴露 不存储明文,无法反推 bcrypt/Argon2
数字签名 文件来源和完整性证明 防止伪造和抵赖 SHA-256
区块链 分布式账本防篡改 任何修改导致链断裂 SHA-256
版本控制 代码变更追踪 每次提交唯一标识 SHA -> SHA-256
数字去重 云存储空间浪费 快速识别重复文件 MD5/SHA-256

哈希算法的价值 = 效率提升 × 安全保障

常用哈希算法(区块链)

SHA-256(比特币使用)

算法原理

安全性分析

Keccak256(以太坊使用)

与SHA-3的关系

为什么以太坊选择Keccak256

与SHA-256的对比

MD5 (不安全,了解)

SHA-1 (已被破解)

安全威胁

碰撞攻击(Collision Attack)

长度扩展攻击(Length Extension Attack)

  • 原理(简述)

  • Keccak256的优势

生日攻击(Birthday Attack)

  • 概率分析(简单提及)

数字签名

数字签名是什么

数字签名解决了哪三个问题?

为什么区块链必须用数字签名?

如果没有数字签名,区块链会有什么问题?

数字签名和密码有什么区别?

常见签名算法

ECDSA签名算法

理解ECDSA的基本原理和流程(不需要掌握数学推导)

  1. 什么是私钥、公钥、签名?
  2. 私钥和公钥有什么关系?能互相推导吗?
  3. 签名的过程是什么?(用自己的话描述)
  4. 验证签名的过程是什么?
  5. 为什么签名无法伪造?

签名的应用(概念)

理解以太坊如何使用签名(概念层面,不涉及Solidity)

以太坊交易是如何用签名保证安全的?

以太坊地址和私钥有什么关系?

除了转账交易,签名还能用来做什么?

EIP-191和EIP-712是用来解决什么问题的?

为什么说"私钥 = 银行密码"?

安全威胁

了解签名相关的主要安全风险,学会如何保护私钥

私钥泄露有哪些常见方式?如何防护?

什么是弱随机数攻击?为什么危险?

什么是签名重放攻击?以太坊如何防御?

什么是盲签名?如何避免被钓鱼?

如果你的私钥泄露了,应该怎么办?

附录

参考文章

哈希函数-生日悖论

Other Articles
Article table of contents TOP
  1. 1. 哈希函数
    1. 1.1. 哈希是什么
      1. 1.1.1. 哈希核心特性
      2. 1.1.2. 哈希安全机制
    2. 1.2. 哈希的应用
    3. 1.3. 常用哈希算法(区块链)
      1. 1.3.1. SHA-256(比特币使用)
      2. 1.3.2. Keccak256(以太坊使用)
      3. 1.3.3. MD5 (不安全,了解)
      4. 1.3.4. SHA-1 (已被破解)
    4. 1.4. 安全威胁
  2. 2. 数字签名
    1. 2.1. 数字签名是什么
    2. 2.2. 常见签名算法
      1. 2.2.1. ECDSA签名算法
    3. 2.3. 签名的应用(概念)
    4. 2.4. 安全威胁
  • 附录
    1. 0.1. 参考文章