IPv6详解:SHA1算法实现及详解

来源:互联网 发布:搜狗输入法mac版本 编辑:程序博客网 时间:2024/05/22 12:05

SHA-1的算法属于密码学的知识,但是这个地方主要是由于在IPv6生成stable address的时候用到,所以在IPv6的模块进行介绍。


安全哈希算法(Secure Hash Algorithm)

SHA1是一种数据加密的算法,其思想就是将一段明文加密成一个不可逆的密文。 因为是不可逆的,所以是无法通过密文推测出明文的内容,所以这个算法不会被用来进行传输,一般主要是用来进行数据完整性校验。在数字签名之中应用比较广泛,  数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。如下图展示下载软件的时候提供的SHA1用于验证下载数据包是否被破坏。


SHA1算法描述[FIPS 180-4]

网络中有很多这样的加密工具,可以先通过在线工具尝试一下效果,如下图所示:输入一段明文,然后选择SHA1(支持好多加密算法)输出一段密文ae5b5072d6bf792cb9398e28f01b656594b08046,可以看到输出是一个160位的消息摘要


SHA1把消息当成一个位(bit)字符串来处理。本文中,一个字(Word)是32位,而一个字节(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串

01100001 01100010 01100011。它也可以被表示成16进制字符串: 0x616263.

简单来讲:SHA-1算法是把输入二进制串分成512位的块,把二进制串的位数存储在最后64位,二者之间填充为0,依次对每个块进行一些列高深的数学运算,最后得到一个160位的二进制串

下面说明下整个算法的过程

1. 补位 

先进行填充,保证数据是512或者其倍数,SHA-1要求是512,。消息必须进行补位,以使其长度在对512取模以后的余数是448
补位是这样进行的:先补一个1,然后再补0,直到长度满足448。 如下图所示
比如abc 原始的比特字符串为:01100001 01100010 01100011 (长度为24bit)
在后面加一个1, 后面填0,到448bit,然后后面的64保持数据的真正bit长度,为24
这样就组成了一个512bit的填充消息

2.初始化Hash Value

在使用Hash进行计算之前,需要初始化Hash Value, H(0),一共160bit,每个32bit

3)SHA-1算法

计算W0~W79,这一部将每一个输入分组,计算80个32位值(W0~W79),首先将输入的512bit字串分成16个32位的组,命名为W0~W15

从上述公式中可以看出:在t属于(0~15)的时候,W(t)为 512bit分成的16个分组, 当t为(16~79)的时候:
W(t) = W(T-3) xor W(T-8) xor W(T-14) xor W(T-16)  循环左移一位  [ROTL的解释可以参考下图]

经过上述计算能够得到 W0~W79的值(根据要认证的数据块计算而得出)

4) SHA-1分组处理

通过上一步计算出W0~W79,这步主要是对这80个双字进行处理,首先要有一些计算使用的常量K(t)

在T不同的范围下,使用不同的分段函数

有了常量和函数,可以对t(0~79)内进行运算
先初始化A,B,C,D,E

在循环使用0~79 执行如下步骤

计算结果得到 a,b,c,d,e与原始的初始化的值相加

组成一个160bit摘要,上面就描述的是对一个512 块的SHA-1算法,如果是多个512块,进行循环即可。组成的160位摘要信息:H0H1H2H3H4
算法的C语言实现可以参考:http://blog.csdn.net/c_duoduo/article/details/43889743

SHA-1算法结论

1. SHA-1使用big- endian
2. 没有发现两个不同的512块在相同的算法下产生相同的消息摘要
3. 速度慢于MD5
4.安全性高于MD5

参考资料

1.http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
2.http://www.cnblogs.com/dacainiao/p/5554756.html
3.http://blog.csdn.net/c_duoduo/article/details/43889743
4.百度百科SHA-1

0 0
原创粉丝点击