HASH函数,安全
初识HASH函数(1)在计算机程序中,我们通常会使用一个数组变量。 这个数组变量有一个索引号(数字),并用这个数字搜索变量数据的值。如数组a可以根据索引3,搜索到内容a[3]=桃子。(2)在perl和Java等语言中,您可以使用HASH表。 哈希表不一定必须用数字来做索引。 例如,第二个表中,将搜索数据“桃子”与索引“山东”相对应,HASH表内部将单词“山东”转换为某个数字32,并使用它作为索引编号来搜索“桃子”。(3) 如果类似的数组很大,存储的内容数量会变多,占用空间也会变大,在查找某个元素过程,都需要挨个循环比较,而通过HASH计算,可以大大减少比较次数。
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 比特总数大致相等, 输入变化一个比特,输出有一半以上的结果会变化。
哈希函数的构成哈希函数=压缩函数+域扩展(1)压缩函数:输入长度>输出长度,输出为固定长度。(2)域扩展:可以保证输入为任意长度。 (3)迭代型HASH函数:多个压缩函数迭代,得到更好压缩效果。
压缩函数(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值。
HASH函数用途 HASH本来是一种提高处理能力和实现方便访问的数据结构的技术,但它也被用于认证和电子签名。 主要有•公钥密码学的明文预处理(例如,OAEP)•消息认证•哈希树(用于数字签名和时间戳)•通用密钥加密
消息认证码(Message authentication 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也采用任意长度的输入并产生固定长度的输出。
构造哈希函数时,需要考虑耗时时间、关键字的长度、哈希表的大小等要点。