散列函数(Hash Function),也称为哈希函数,是密码学中⼀个重要的⼯具。它能够将任意⻓度的输⼊ 数据转换为固定⻓度的输出(散列值或哈希值)。这种转换过程具有单向性,即很难从输出推断出输⼊,因此散列函数在数据完整性验证、数字签名、消息认证码、哈希表等⽅⾯有⼴泛的应⽤。
- 特点:
- 固定长度输出
- 单向性
- 确定性 相同输入总是会产生相同输出
- 抗碰撞性:不能找到任意两个不同输入,输出一样
- 雪崩效应:输入微小变化散列值都会显著变化
- 常见散列算法
- MD5 输出⻓度为128位(16字节)。存在碰撞攻击
- SHA-1 为160位(20字节)存在碰撞攻击的⻛险,逐渐被淘汰。
- SHA-2
- SHA-3
- SM3 中国国家密码管理局发布的⼀种安全哈希算法,输出⻓度为256位
- 哈希函数的安全挑战
- 碰撞攻击
- 生日攻击 攻击者通过产⽣⼤量不同的输⼊并寻找在⼀个输出⻓度为 n位的哈希函数中,寻找两个不同输⼊具有相同哈希值(碰撞)的概率问题
函数的输出⻓度为 128 位(如 MD5),攻击者在⼤约 2^64次尝试后就有可能找到碰撞,这显 然⽐预期的2^128 次要少得多。 根据⽣⽇悖论,找到碰撞的尝试次数⼤约是 2^{64} 次,即输出⻓度的⼀半。
数字签名
- 基于非对称加密算法,私钥签名,公钥验证、
- 真实性,完整性,不可否认性
- 生成数字签名
- 哈希处理:对数据进行哈希处理,生成固定长度消息摘要
- 签名生成:私钥加密消息摘要,生成数字签名
- 验证数字签名
- 哈希处理:对发过来的数据哈希处理,生成消息摘要
- 签名验证:公钥解密数字签名,解密后的结果与消息摘要一致,则签名有效,数据未被篡改,且来自合法的发送方
- 常见数字签名算法
- RSA
- DSA
- ECDSA(椭圆曲线数字签名算法)
- SM2签名算法 国密,基于椭圆曲线
- 数字签名与PKI
数字签名通常与公钥基础设施(PKI)结合使⽤,以确保公钥的真实性和完整性。PKI 通过数字证书验证公钥的持有者身份,并为签名验证提供信任基础。