Hash函数
概念
将任意长度的输入变换为固定长度的输出的不可逆的单向密码体制
Hash函数在数字签名和消息完整性检测等方面有着广泛的应用
Hash函数同时是一种具有压缩特性的单向函数,其像通常称为数字指纹,消息摘要或散列值。
散列值的生成过程可以表示为
h = H(M)
其中h是定长的散列值,H是哈希函数,M是一个变长消息
散列函数主要用于消息认证和数字签名,因此需要具备以下特性
- H可应用于任意长度的消息
- H产生定长的输出
- 对任意给定的消息x,计算H(x)比较容易,用硬件软件均可实现
- 单向性:对任意给定的散列值h,找到满足H(x) = h 的x在计算上是不可行的
- 抗弱碰撞性:对任意给定的消息x,找到x != y并且H(x) = H(y)的消息y在计算上是不可行的
- 抗强碰撞性:找到任何满足H(x) = H(y) 的偶对(x,y)在计算上是不可行的
性质2是哈希函数的基本特性,性质3是哈希函数的可用性,性质4,5,6是哈希函数为满足不同应用而需具备的基本安全性质
应用
数字签名
由于消息散列值通常比消息本身短的多,因此对消息散列值进行数字签名在处理上比对消息本身进行签名要高效的多。
生成程序或文档的数字指纹
hash函数可以用来保证消息的完整性。首先,通过哈希函数变换得到程序或文档的散列值,然后将散列值存储,对程序或文档进行定时的检测,与已存储的散列值进行比较,以此来实现完整性验证。
用于安全传输和用户口令
用于保存用户登陆口令(密码),通过用户id及口令生成相应的散列值,然后保存,用户在进入系统输入口令时,生成散列值与存储的散列值进行比较,这样可以确保用户口令不被管理员或攻击者获取到
哈希算法
消息认证
消息认证的作用主要有两个:一个是验证信息来源的真实性,一般称之为信息源认证;另一个是验证消息的完整性
消息认证码(MAC)
利用消息和双放共享的密钥通过认证函数来生成一个固定长度的短数据块,并将该数据块附加在消息后
比如发送方A和接收方B共享密钥K,若A向B发送消息M,则MAC = C(K,M) ,其中C是认证函数,MAC是消息认证码
(a)为明文传输,(b)为先计算MAC后,将MAC数据块附加在M信息后进行加密传输,(c)为先将M进行加密,再生成MAC,并附在消息块后进行传输
基于哈希的消息认证码
HMAC是实际应用中使用最多的方案,如SSL就使用HMAC来实现消息认证功能