安全算法—SHA-1算法

1什么是SHA-1?

SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

SHA-1的特性有以下两点特性,同时也是SHA算法所拥有的共同特性:

1)不能使用消息摘要复原信息

2)不同的消息产生不同的消息摘要

2SHA-1算法实现步骤

2.1 把消息转换为位字符串

SHA-1算法是按照位作为输入,所以进行计算前必须把原始消息(比如字符串、文件等)转换成位字符串。

  比如,对字符串abc”产生消息摘要,‘a=97 b=98 c=99,先转换成24位的字符串:01100001 01100010 01100011

2.2 对转换得到的位字符串进行补位操作

  消息必须进行补位,使其长度在对512取模以后的余数是448,即(补位后的消息长度)%512 = 448

  对消息进行补位时,先在后面补一个1,如果不满足要求,再补0直到满足对512取模余数为448。这就意味着,补位至少补一位(原消息位数为512n+447),最多补512位(原消息位数为512n+448)。

  还是以前面的abc”为例显示补位的过程:

  原始信息: 01100001 01100010 01100011

  补位第一步,首先补一个101100001 01100010 01100011 1

  可以确定的是,如果用一个字节来表示一个字符,补1之后肯定不满足条件,仍需继续补位。

  补位第二步,后面补0直到总长度对512取模余数为448,这里补4230,使总长度达到为448

01100001 01100010 01100011 1000..00

  补位完成后的数据转换为16进制:

  61626380 00000000 00000000 00000000

       00000000 00000000 00000000 00000000

       00000000 00000000 00000000 00000000

        00000000 00000000

  从16进制数据里可以看到,我们也可以直接采用16进制的方式进行补位,我们先补80,看是否满足长度对64取余的结果为56,不满足则继续补0

2.3 附加长度信息

  这一步中,要将原始消息(没有进行补位操作之前)的长度(二进制位数)附加到已经补位的消息之后。

  通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0

  补长度的操作以后,整个消息(16进制)如下:

        61626380 00000000 00000000 00000000

        00000000 00000000 00000000 00000000

        00000000 00000000 00000000 00000000

        00000000 00000000 00000000 00000018

  然后,将整个消息拆分为一个一个的512位的数据块M1M2,…,Mn,然后分别对每一个数据块Mi (1in)做处理,得到消息摘要。

  注意,这里是64位,上一步补位后的长度是512k+448,k0,这样,512k+448+64=512(k+1),恰好可以被512整除。

  在我们举得例子里,一共只有512位,因此做为一个数据块进行处理。

2.4 使用的常量和函数

  一系列的常量字K(0), K(1), ... , K(79),如果以16进制给出,它们如下:

        Kt = 0x5A827999  (0 <= t <= 19)

        Kt = 0x6ED9EBA1 (20 <= t <= 39)

        Kt = 0x8F1BBCDC (40 <= t <= 59)

        Kt = 0xCA62C1D6 (60 <= t <= 79)

  在SHA1中我们需要一系列的函数。每个函数ft (0 <= t <= 79)都操作32位字BCD并且产生32位字作为输出。ft(B,C,D)可以如下定义

    ft(B,C,D) = (B AND C) OR ((NOT B) AND D)                     ( 0 <= t <= 19)

    ft(B,C,D) = B XOR C XOR D                                              (20 <= t <= 39)

    ft(B,C,D) = (B AND C) OR (B AND D) OR (C AND D)        (40 <= t <= 59)

    ft(B,C,D) = B XOR C XOR D                                              (60 <= t <= 79)

2.5计算消息摘要

  使用进行了补位和补长度后的消息来计算消息摘要。

A. 计算需要的缓冲区:

1).两个都由532位的字组成缓冲区BUF1BUF2BUF1532位缓冲区被标识为A,B,C,D,EBUF2532位缓冲区被标识为H0,H1,H2,H3,H4

2).一个8032位字的缓冲区BUF3,按照32位划分,依次被标识为W0, W1,..., W79

3).一个1个字的TEMP缓冲区。

B. 计算消息摘要:

我们把补位之后的数据附加了长度信息,然后划分为一个一个的512位(16个字)的数据块M1,M2,,Mn,这里会依次对每个数据块Mi (1in)做处理。

  在处理每个数据块Mi (1in)之前,先将缓冲区H0,H1,H2,H3,H4 初始化为下面的值(16进制):

H0 = 0x67452301

H1 = 0xEFCDAB89

H2 = 0x98BADCFE

H3 = 0x10325476

H4 = 0xC3D2E1F0.

C. 接下来处理 Mi(1in),步骤如下:

1). 将每个Mi 分成 16 个字(每个字32位) W0, W1, ... , W15,  W0 是最左边的字;

nMi就划分之后,就变成W0,W1,,W15,W16,,W31,W32,W79

2). 对于 t = 16 79 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16)

3). A = H0, B = H1, C = H2, D = H3, E = H4

4) 对于 t = 0 79,执行下面的循环

TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;

E = D;

D = C;

C = S30(B);

B = A;

A = TEMP;

5). H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.

在处理完所有的  Mi(1in) 后,会得到一个160位(532位字)的字符串消息摘要H0 H1 H2 H3 H4

注:上面为一轮计算过程,对于多个分组,则需要将前面所得到的结果作为下一轮的初始值进行下一轮计算。

3、SHA-1安全性分析

SHA-1已经不再视为可抵御有充足资金、充足计算资源的攻击者。2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全,不能继续使用,自2010年以来,许多组织建议用SHA-2SHA-3来替换SHA-1MicrosoftGoogle以及Mozilla都宣布,它们旗下的浏览器将在2017年前停止接受使用SHA-1算法签名的SSL证书。

2017223日,CWI AmsterdamGoogle宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为概念证明。

4、致谢

本文是个人近期对于SHA-1学习总结,本文应该说个人查找资料,以及参考许多大神的博客的结晶,再次表示感谢,同时也希望有更多的人能够一块学习,共同进步。

 

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值