【哈希函数基本概念】
在实际的通信保密中,除了要求实现数据的保密性之外,还要求保证数据的完整性。密码学中的hash函数可为数据完整性提供保障。Hash函数用来构造数据的短“指纹”(函数值);一旦数据改变,指纹就不再正确。即使数据被存储在不安全的地方,通过重新计算数据的指纹并验证是否改变,就可以检测数据的完整性。
Hash函数h用于将任意长的消息(或数据)x映射为较短的、固定长度的一个值h(x)。我们称h(x)为数据摘要或者哈希值或者散列值等。通常,要求密码学hash函数(安全hash函数)h满足以下三点安全属性:
(1)抗原像攻击(Preimage Resistant):已知y ∈ Y(数据摘要集合),要找出x ∈ X(数据报文集合),使得h(x)=y是困难的(在计算上是不可行的),也称单向性(One-way)。
(2)抗第二原像攻击(Second Preimage Resistant):对于给定的x ∈ X, 找出另一个x' ∈ X,使得h(x')=h(x)是困难的(计算不可行),也称弱抗碰撞性(Weak Collision-Resistant)。
(3)抗碰撞性(Collision-Resistant):找出任意两个不同的x,x' ∈ X,使得h(x)=h(x')是困难的(计算不可行),也称强抗碰撞性(Strong Collision-Resistant )。
我们假设x,x'是两个不同的消息,如果h(x)=h(x'),则称x,x'是hash函数的一个碰撞。如果这种情况很容易发生,这也表明该hash函数是不安全的。
举一个很棒的hash函数例子:如果把一段消息x比作一个人,这段消息的哈希值就是这个人的指纹,是这个人的独一无二的特征。
【著名的hash算法】
(1)SHA256:在比特币协议中,使用的哈希函数是SHA256。2008年,中本聪发明比特币时采用的这个SHA-256被公认为最安全最先进的算法之一。除了生成地址中有一个环节使用了REPID160算法,比特币系统中但凡有需要做Hash运算的地方都是用SHA256。
SHA256是安全散列算法SHA(Secure Hash Algorithm)系列算法之一,其摘要长度为256bits,即32个字节,故称SHA256。SHA系列算法是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。
(2)MD5:对输入以512位(bit)分组,其输出是4个32位的级联。从密码分析的角度来看,MD5被认为是易受攻击的。2004年山东大学王小云采用“比特追踪法”可以很快的找到一个碰撞,破译MD5。
网友评论