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