learning_notes

学习笔记

View project on GitHub

单向加密(散列算法)

简介

单向加密​(又称哈希算法/Hash)是一种将任意长度输入数据转换为固定长度唯一哈希值的加密方法。其核心特点是:

  • 不可逆性:无法从哈希值反推原始数据
  • 确定性:相同输入始终产生相同哈希值
  • 抗碰撞性:极难找到两个不同输入产生相同哈希值
  • 雪崩效应:输入微小变化会导致哈希值巨大差异

常见散列算法对比

算法 输出长度 安全性 特点 适用场景
MD5 128 bits ❌ 已不安全(易碰撞攻击) - 计算速度快
- 广泛用于文件校验(已不推荐用于安全场景)
文件完整性校验(非敏感场景)
SHA-1 160 bits ❌ 已不安全(2017年被攻破) - 曾用于SSL/TLS证书
- 已被弃用
历史遗留系统(应尽快迁移)
SHA-256 256 bits ✅ 安全(SHA-2家族成员) - 比特币和区块链的默认算法
- 抗量子计算攻击能力较弱
数字签名、区块链、SSL/TLS
SHA-3 224/256/384/512 bits ✅ 安全(新一代标准) - 基于Keccak算法
- 设计上抵抗所有已知攻击(包括量子计算)
高安全性需求场景(如政府数据加密)
bcrypt 可变长度 ✅ 安全(密码哈希专用) - 自适应哈希(可调计算成本)
- 内置盐值(salt)防彩虹表攻击
密码存储(如用户登录系统)
scrypt 可变长度 ✅ 安全(抗GPU/ASIC攻击) - 内存密集型设计
- 增加硬件暴力破解成本
加密货币(如莱特币)、密码存储
Argon2 可变长度 ✅ 安全(2015年密码哈希竞赛胜者) - 抗侧信道攻击
- 可调节时间、内存和并行度
现代密码存储(推荐首选)

算法选择建议

  1. 文件校验/数据摘要
    • 非敏感场景:MD5(仅用于快速校验,如软件下载)
    • 安全场景:SHA-256 或 SHA-3
  2. 密码存储
    • 优先选择:Argon2、bcrypt 或 scrypt
    • 禁止使用:MD5、SHA-1(易被彩虹表破解)
  3. 区块链/数字签名
    • 主流选择:SHA-256(比特币)、RIPEMD-160(比特币地址生成)

MurmurHash

MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作

优缺点

  • 速度快,比安全散列算法快几十倍
  • 变化足够激烈,相似的字符串如“abc”和“abd”能够均匀散落在哈希环上
  • 不保证安全性(缺点)

BLAKE2

BLAKE2 提供了与 SHA-3 相媲美的安全性。它具有以下特性:

  • 抗碰撞攻击:很难找到两个不同的输入使得它们的哈希值相同。
  • 抗预映射攻击:很难找到一个给定哈希值对应的原始输入。
  • 抗第二预映射攻击:很难找到与给定输入具有相同哈希值的另一个输入。

Poseidon 算法

Poseidon 是一种现代加密哈希函数,设计用于零知识证明(Zero-Knowledge Proofs, ZKPs)等高级密码学应用。它由研究人员 Benedikt Bunz, Dario Fiore, Iddo Bentov, and Pavel Vasin 等人设计。Poseidon 的设计目标是提供一种高效且安全的哈希算法,特别适合用于 zk-SNARKs 和 zk-STARKs 等 ZKP 系统中。

  • 针对零知识证明优化: Poseidon 设计时考虑了在零知识证明系统中的应用,优化了哈希计算的效率,特别是减少了算术电路中的门数量(gate count)。
  • 基于加密结构: Poseidon 采用 Sponge 结构,这种结构在密码学中广泛应用于构建哈希函数和伪随机数生成器。Sponge 结构由两个主要阶段组成:吸收(absorb)和挤出(squeeze)。
  • 高效性: Poseidon 的设计特别注重计算效率,适合在资源受限的环境中运行,比如区块链中的智能合约或零知识证明的证明生成过程。
  • 灵活性: Poseidon 可以根据不同的应用需求进行配置,支持不同的安全参数和性能优化。
  • 安全性: Poseidon 提供了较高的安全性,抗碰撞攻击、预映射攻击和第二预映射攻击,满足现代密码学的安全需求。