tag 标签: sha1

相关博文
  • 热度 15
    2012-9-5 17:35
    1152 次阅读|
    1 个评论
      1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。 2 术语和概念 2.1位(Bit),字节(Byte)和字(Word) SHA1始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011。它也可以被表示成16进制字符串: 0x616263. 2.2 运算符和符号 下面的逻辑运算符都被运用于“字”(Word) X^Y    = X, Y逻辑与 X \/ Y   = X, Y逻辑或 X XOR Y= X, Y逻辑异或 ~X     =   X逻辑取反 X+Y定义如下: 字 X 和 Y 代表两个整数 x 和y, 其中 0 = x 2^32 且 0 = y 2^32. 令整数z = (x + y) mod 2^32. 这时候 0 = z 2^32. 将z转换成字Z, 那么就是 Z = X + Y. 循环左移位操作符Sn(X)。X是一个字,n是一个整数,0=n=32。Sn(X) = (X32-n))or(x Xn是抛弃右边的n位,将各个位依次向右移动n位,然后在左边的n位填0。因此可以叫Sn(X)位循环移位运算定义如下:抛弃最左边的n位数字,将各个位依次向左移动n位,然后用0填补右边的n位(最后结果还是32位)。x 3 SHA1算法描述 在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。假设我们对字符串“abc”产生消息摘要。首先,我们将它转换成位字符串如下: 01100001 01100010 01100011 ――――――――――――― ‘a’=97   ‘b’=98   ‘c’=99 这个位字符串的长度为24。下面我们需要5个步骤来计算MD5。 3.1 补位        消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。        补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。还是以前面的“abc”为例显示补位的过程。 原始信息: 01100001 01100010 01100011 补位第一步:01100001 01100010 01100011 1                                                                 首先补一个“1” 补位第二步:01100001 01100010 01100011 10…..0                                                                 然后补423个“0” 我们可以把最后补位完成后的数据用16进制写成下面的样子 61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 现在,数据的长度是448了,我们可以进行下一步操作。 3.2 补长度        所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式) 61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000018 如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。 3.3 使用的常量 一系列的常量字K(0), K(1), ... , K(79),如果以16进制给出。它们如下: K t  = 0x5A827999  (0 = t = 19) K t  = 0x6ED9EBA1 (20 = t = 39) K t  = 0x8F1BBCDC (40 = t = 59) K t  = 0xCA62C1D6 (60 = t = 79). 3.4 需要使用的函数 在SHA1中我们需要一系列的函数。每个函数f t  (0 = t = 79)都操作32位字B,C,D并且产生32位字作为输出。f t (B,C,D)可以如下定义 f t (B,C,D) = (B AND C) or ((NOT B) AND D) ( 0 = t = 19) f t (B,C,D) = B XOR C XOR D              (20 = t = 39) f t (B,C,D) = (B AND C) or (B AND D) or (C AND D) (40 = t = 59) f t (B,C,D) = B XOR C XOR D                     (60 = t = 79). 3.5 计算消息摘要 必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第一个5个字的缓冲区被标识为H 0,  H 1 , H 2 , H 3 , H 4 。80个字的缓冲区被标识为W 0 , W 1 ,..., W 79 另外还需要一个一个字的TEMP缓冲区。 为了产生消息摘要,在第4部分中定义的16个字的数据块M 1 , M 2 ,..., M n 会依次进行处理,处理每个数据块M i  包含80个步骤。 在处理每个数据块之前,缓冲区{H i } 被初始化为下面的值(16进制) H 0  = 0x67452301 H 1  = 0xEFCDAB89 H 2  = 0x98BADCFE H 3  = 0x10325476 H 4  = 0xC3D2E1F0. 现在开始处理M 1 , M 2 , ... , M n 。 为了处理 M i ,需要进行下面的步骤 (1). 将 M i  分成 16 个字 W 0 , W 1 , ... , W 15 ,  W 0  是最左边的字 (2). 对于 t = 16 到 79 令 W t  = S 1 (W t-3  XOR W t-8  XOR W t- 14  XOR W t-16 ). (3). 令 A = H 0 , B = H 1 , C = H 2 , D = H 3 , E = H 4 . (4) 对于 t = 0 到 79,执行下面的循环 TEMP = S 5 (A) + f t (B,C,D) + E + W t  + K t ; E = D; D = C; C = S 30 (B); B = A; A = TEMP; (5). 令 H 0  = H 0  + A, H 1  = H 1  + B, H 2  = H 2  + C, H 3  = H 3  + D, H 4  = H 4  + E. 在处理完所有的 M n , 后,消息摘要是一个160位的字符串,以下面的顺序标识 H 0  H 1  H 2  H 3  H 4 . 对于SHA256,SHA384,SHA512。你也可以用相似的办法来计算消息摘要。对消息进行补位的算法完全是一样的。 4 参考文献 1: FIPS 180-1 Secure Hash Standard:  http://www.itl.nist.gov/fipspubs/fip180-1.htm 2: Secure Hash Standard:  http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf 
相关资源
  • 所需E币: 0
    时间: 2021-3-23 23:11
    大小: 3MB
    上传者: stanleylo2001
    如何进行AESRSASHA1的加解密详细设计资料说明
  • 所需E币: 0
    时间: 2020-12-16 15:33
    大小: 2.98MB
    上传者: LGWU1995
    如何进行AESRSASHA1的加解密详细设计资料说明
  • 所需E币: 5
    时间: 2020-11-16 14:49
    大小: 3.08MB
    上传者: wxlai1998
    密码学基础-课程设计_AESRSASHA1的加解密算法实现[摘要]AES算法的主要数学基础是抽象代数,其中算法中的许多运算是按单字节(8bits)和4字节(32bits)定义的,单字节可看成有限域GF(2)中的一个元素,而4字节则可以看成系数在GF(2)中并且次数小于4的多项式(亦可以理解为:GF(256)),单字节上的运算有两种:有限域GF(2)上一个8次
  • 所需E币: 5
    时间: 2019-12-24 22:55
    大小: 153.86KB
    上传者: 16245458_qq.com
    摘要:2005年,几名中国学者对安全散列算法(SHA-1)的强大安全性做出了攻击。本白皮书将讨论这种攻击方式,其结果表明:尽管比起最初的想法,SHA-1算法在抗碰撞上略有不足,但Maxim的SHA-1存储器件的安全性并未受到影响。因此,该公司的SHA-1存储器件(DS1963S、DS1961S、DS28CN01、DS28E01-100和DS2432)仍可以为附件/外设鉴别及防窜改、存储器认证应用提供低成本、有效的解决方案。SHA-1器件的安全性是否依然足够安全?Sep16,2005摘要:2005年,几名中国学者对安全散列算法(SHA-1)的强大安全性做出了攻击。本白皮书将讨论这种攻击方式,其结果表明:尽管比起最初的想法,SHA-1算法在抗碰撞上略有不足,但Maxim的SHA-1存储器件的安全性并未受到影响。因此,该公司的SHA-1存储器件(DS1963S、DS1961S、DS28CN01、DS28E01-100和DS2432)仍可以为附件/外设鉴别及防窜改、存储器认证应用提供低成本、有效的解决方案。引言Maxim的SHA-1存储器件将为附件/外设鉴别及防窜改、存储器认证应用提供低成本、高效的解决方案。这些SHA-1存储器件具有可鉴别特性,特别适合那些要求防范造假的应用,如大批量消耗品、高附加值硬件、硬件许可管理、楼宇进出控制或自动售货机。从根本上讲,这些设备的实用性取决于安全散列算法的坚固性和安全性,这一算法是由美国国家标准技术研究所(NIST)在联邦信息处理标准180-1(FIPSPUB180-1)及ISO/IEC10118-3中定义的。2005年,几位中国学者发表了一篇论文,介绍了对这种算法安全性的攻击(见注释1)。本文指出,尽管某些采用SHA-1算法的应用其安全性有待重新评估,但Maxim的SHA-1存储器件的安全性不会受这一研究声明的影响。针对SHA-1摘要码的攻击FIPSPUB180-1标准中规定:SHA-1能够以安全的方式将数据计算压缩成一段特定的信息。如文档资料中所定义,SHA-1算法的安全性有两层含义:(1)由一个给定的信息摘要不可能通过计算导出信息源;(2)要找到两条不同的信息使之产生相同的摘要在计算上是不可行的。第一条推论表明,由SHA-1算法所得出的结果并不包含……