三. 散列算法概述与部分详解
2.2 散列算法介绍
2.2.1 散列算法(函数)
概念
散列函数没有密钥,散列函数就是把可变输入长度串(叫做预映射, Pre-image)转换成固定长度输出串(叫做散列值)的一种函数。
散列函数又可称为压缩函数、杂凑函数、消息摘要、指纹、密码校验和、信息完整性检验(DIC)、操作认证码(Message Authentication Code, MAC)。 哈希消息验证码(HMAC)
用法:
可以利用散列函数进行数据文件的完整性校验。
数字签名(见PKI)
常用的消息摘要算法有:
MD5算法
SHA算法
RIPEMD算法
MAC:
消息认证码(带密钥的Hash函数)。密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。
安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要【hash】所获得的一个值,可用于数据源发认证和完整性校验。
1. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
2. 收信者用同样的MAC算法计算收到的消息的MAC值,并对比两者。
HMAC:
Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
a specific construction for calculating a message authentication code (MAC) involving a cryptographic hash function in combination with a secret cryptographic key. As with any MAC, it may be used to simultaneously verify both the data integrity and the authenticity of a message.【主要是为了能让人对对方身份正确性和消息有效性进行验证,与消息摘要的最大不同,就是有签名密钥!】
方法:
HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))
https://www.cnblogs.com/songhan/archive/2012/07/29/2613898.html中有MAC和HMAC的具体区别。
HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的,MD5,SHA1不需要。
2.2.2 数字签名(见PKI)
数字签名协同条件:
散列函数:散列函数是数字签名的一个重要辅助工具, 应用散列函数可以生成一个文件的,具有固定长度的文件摘要,从而使数字签名可以迅速有效地签名一个任意长度的文件。一般地,对文件的任意小改动,都会改变文件的散列值,从而,秘密的散列函数可以用来检测病毒等对文件的破坏。
对签名的攻击:对数字签名有各种各样的欺骗存在,重复使用是一个典型欺骗,如电子支票,重复的使用具有可怕后果,阻止这种欺骗的有效方法是签名中包含时间日期标志。
数字签名方案:
-直接数字签名
-需仲裁的数字签名
--使用单钥技术的仲裁数字签名
--使用双钥技术的仲裁数字签名