哈希函数表示为:
其中n是一个安全参数,比如128、160、256或512。
让x代表一些信息。h(x)称为message digest。
基本要求
–message digest的长度是固定的,而数据的长度可以是任意的。
–给定x,很容易计算h(x)。
–建议的message diges长度(位):128(MD5)、160(SHA-1)、224/256/384/512(SHA-2)、224/256/384/512(SHA-3)
总结来说,哈希函数就是输入任意长度(*)的input,总会输出固定长度(n)的output.
一共有三大属性:
给定一个哈希函数h: X–>Y, y∈Y,没有有效的机制来发现 x∈X 使得h(x) = y。
这个属性与单向函数(one-way functions)相同。哈希函数是一种特殊的单向函数。
给定一个哈希函数h: X–>Y,x∈X没有有效的机制来发现x’∈X使得X‘≠X且h(x’) = h(X)。
给定一个哈希函数h: X–>Y,x∈X没有有效的机制来发现x,x’∈X使得x‘≠x且h(x’) = h(X)。
第二条和第三条看起来很相似,但是我们要清楚的明白两者的区别。
2是已知一个x很难找另一个得出相同哈希值的x’,
3是很难找到一对不同但是得到相同哈希值的x和x‘。
•用于存储密码
•完整性(如HMAC)。
•在数字签名中,用于身份验证。
•针对高熵数据的关键推导
•proof-of-work
什么是proof-of-work?
一个哈希函数(例如SHA-256)接受一个数据块作为输入,并生成一个“随机”固定大小输出。
-在区块中包含一个可变的盐值。
-目标:找到一个在输出开头有N个0的散列(比特币,区块链相关)。
//区块链技术就是用的哈希函数。在后面会介绍这一部分。
假设哈希函数是一个黑盒随机函数。
只能让oracle访问哈希函数,这意味着他们没有公式或算法来确定自己的哈希值。
随机oracle(黑盒)以随机响应响应每个查询(响应必须一致)。
随机Oracle模型是一种用于安全证明的理想哈希函数模型。
消息完整性和真实性的对称工具
•生成加密校验
•常见结构
–基于哈希函数
–基于Block cipher.
什么是消息完整性?
防止未经授权修改数据
与错误检测的区别
–错误检测是为了无意中修改数据(例如,由于噪声)
•两者都涉及校验和
–完整性检查值基于消息和密钥
–纠错/检测码不使用密钥
MAC
The receiver receives a message (M.t). It uses the key K and M to calculate MAC K (M) and compare it with t. If the two match, the received message is accepted as authentic.
MAC也被称为密码校验和
A MAC is secure if forging (M,MAC K (M)) without knowing K is hard.
如果在不知道key的情况下伪造(M,MAC K (M))很困难,那么我们就认为这个MAC是安全的。
在各种安全标准中应用最广泛的MAC.
使用哈希函数作为构建块例如MAC-MD5、MAC-SHA1等等。
它也可以被认为是一个伪随机函数 (PRF)。
HMAC(K,M) = H( K ⊕ opad || H((K ⊕ ipad) || M) )
A family of functions K x X -->Y
– X: message space
– K: key space
– Y: output space
输出空间有固定的大小.
F k () for a fixed k defines a function/map from X -->Y
We call a function family F: K x X -->Ypseudorandom if the function F k () (for a uniform k chosen from K) is indistinguishable from a random function RF: X -->Y
就是说,如果我们认为这个PRF安全,那么他将与真正的随机函数没有任何区别(不可分辨)。
定义:
如果 F: K x X -->Y is a secure PRF family, then F k () with a uniform k chosen from K is a secure MAC.