网络加密中HASH函数及应用
1、初识HASH函数
(1)在计算机程序中,我们通常会使用一个数组变量。 这个数组变量有一个索引号(数字),并用这个数字搜索变量数据的值。如数组a可以根据索引3,搜索到内容a[3]=桃子。
(2)在perl和Java等语言中,您可以使用HASH表。 哈希表不一定必须用数字来做索引。 例如,第二个表中,将搜索数据“桃子”与索引“山东”相对应,HASH表内部将单词“山东”转换为某个数字32,并使用它作为索引编号来搜索“桃子”。
(3) 如果类似的数组很大,存储的内容数量会变多,占用空间也会变大,在查找某个元素过程,都需要挨个循环比较,而通过HASH计算,可以大大减少比较次数。
2、HASH函数特点
(1)HASH函数的输入(message)可以是任何数字化的东西,包括图像和音乐,输入(digest)是一系列固定的数值。
(2)单向性:给定d,很难找到M使得H(M)= d。虽然可以将书中的所有字符转换为160位长度的数字,但从HASH值不能恢复原始数据。
(3)碰撞抵抗:给定M,无法找到M',满足H(M)=H(M');
(4)不可预测性(认证):当R是秘密时,MH(R,M)不可预知;
(5)提取(密钥推导):如果M具有高熵,则H(M)是均匀的
(6)映射分布均匀性:HASH的输出结果中, 0和1 的 bit 比特总数大致相等, 输入变化一个比特,输出有一半以上的结果会变化。
3、哈希函数的构成
哈希函数=压缩函数+域扩展
(1)压缩函数:输入长度>输出长度,输出为固定长度。
(2)域扩展:可以保证输入为任意长度。
(3)迭代型HASH函数:多个压缩函数迭代,得到更好压缩效果。
4、压缩函数
(1)压缩函数有
1)MDx族:MD4, MD5; RIPEMD-160;
2)Secure Hash Standard (SHS)标准:SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
(2)MD5和SHA-1是Internet上常用的HASH函数。 它输出128位MD5和160位SHA-1。 这个输出值被称为哈希值。
(3)在Linux上,使用openssl命令可以体验哈希函数。 我们分别用MD5和SHA-1输出字符串“nikkeiBP”的HASH值。
5、HASH函数用途
HASH本来是一种提高处理能力和实现方便访问的数据结构的技术,但它也被用于认证和电子签名。 主要有
•公钥密码学的明文预处理(例如,OAEP)
•消息认证
•哈希树(用于数字签名和时间戳)
•通用密钥加密
6、消息认证码(Messageauthentication codes,MAC)
(1)HASH函数分类
1)无键哈希函数
使用操纵检测代码(MDC,Manipulation Detection Code)
2)键控哈希函数
使用消息认证码(MAC,MAC: Message Authentication Code)
(2)MAC的作用:
假设小红发信息M给小黄,小黄想知道收到的信息是否是小红发的(认证),并且想知道M是否被修改(完整性)。此时,解决办法是:小红在发送M时,加上一个MAC,小黄根据这个MAC来判断完整性。
MAC是基于对称密钥的,代替HASH函数保证信息的完整性,如同HASH函数一样,MAC也采用任意长度的输入并产生固定长度的输出。