实验课程

THIS NAME

实验课程

当前位置: 首页 >> 实验课程 >> 正文

应用密码学-SHA编码实验

发布日期:2024-08-05    作者:周胜亮     来源:     点击:

SHA编码实验

一、实验目的

了解 SHA 算法并掌握 SHA1 算法加密的应用。

二、实验目标

查看 SHA-1 加密源代码,执行程序,进行 SHA-1 加密,分析安全性

三、实验环境

l 操作系统:Centos 7

l 其它:python 3

undefined

四、实验原理

1、SHA 算法:

安全散列算法(英语:SecureHash Algorithm)是一种能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,对应到不同字符串的机率很高;而 SHA 是 FIPS 所认证的五种安全散列算法。这些算法之所以称作“安全”是基于以下两点(根据官方标准的描述):

由消息摘要反推原输入消息,从计算理论上来说是很困难的。想要找到两组不同的消息对应到相同的消息摘要,从计算理论上来说也是很困难的。任何对输入消息的变动,都有很高的机率导致其产生的消息摘要迥异。

SHA 家族的五个算法,分别是 SHA-1、SHA-224、SHA-256、SHA-384,和 SHA-512由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为 SHA-2。SHA-1在许多安全协议中广为使用,包括 TLS和 SSL、PGP、SSH、S/MIME 和 IPsec,曾被视为是 MD5(更早之前被广为使用的散列函数)的后继者。但 SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对 SHA-2有效的攻击,它的算法跟 SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。

SHA-1 算法流程:

1)常量:

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

Kt0x6ED9EBA1(20<=t<=39)

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

Kt=0xCA62C1D6(60<t< 79)

2)函数表达式:

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

f(B,C,D)=BXOR CXORD (20<=t<= 39)

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

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

3)算法流程

补位

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

补位是这样进行的:先补一个 1,然后再补 0,直到长度满足对 512 取模后余数是 448。

总而言之,补位是至少补一位,最多补 512 位(区块大小)。

补长度

补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个 64 位(长度大小)的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是 0。在进行了补长度的操作以后,整个消息就变成下面这样了(16 进制格式)。

计算消息摘要

必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32 位(字符尺寸:32位,内部大小:160位)的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第一个5个字的缓冲区被标识为 HO,H1,H2,H3,H4。80 个字的缓冲区被标识为 W0,W1.…., W79。

经过一系列的计算后,最终得到的消息摘要为:

H[0]H[1]H[2]H[3]H[4]长度为 160 位(输出长度)。

五、实验过程

首先举一个例子了解 SHA-1 加密流程

undefined

分别查看目录"/root/cryptography/"下的"sha-1.py"、"sha-1-2.py"、"sha-1-3.py"。这三个文件列举了三种不同的使用 python 对一段明文进行 sha-1 加密的格式。

输入命令 vim /root/cryptography/sha-1.py 査看 sha-1.py 代码内容。

undefined

该代码先是导入了 hashlib 模块,然后需要加密的明文为“'This is a test message”,再使用 hashlib 提供的 sha1 算法对明文进行加密。最后输出加密的结果输入命令 vim /rootcryptography/sha-1-2.py 查看 sha-1-2.py 内容。

undefined

该代码与 sha1.py 相同,只是采用了不同的方式进行散列。输入命令 vimm /root/cryptography/sha-1-3.py 查看 sha-1-3.py 文件内容

undefined

本例将明文写在了 update0)中,其中下半部分的代码将明文拆成了两部分,并分块多次调用 update0,以达到与上半部分代码相同的效果。这里需要注意:空格也是算字符的,需要注意明文是否输入正确。

输入命令 vim /root/cryptography/sha-1-4.py 查看 sha1-4 代码,该代码的作用是使用 sha1 加密方法验证文件(sha-1.py)的有效性。

undefined

该段代码先是导入了 hashlib 模块,然后使用了其中的 sha1 算法,之后以二进制形式打开文件,并读取文件块直到读完文件,最后生成 40 位 sha1 的十六进制字符串并将其打印到屏幕

分别执行 sha-1.py、sha-1-2.py、sha-1-3.py,对明文"This is a test message"进行 shal加密。查看使用不同的代码格式得到的结果是否相同,输入命令 python2 /root/cryptography/sha-1.py 执行脚本。

undefined

输入命令 python2 /root/cryptography/sha-1-2.py 执行脚本

undefined

输入命令 python2 /root/cryptography/sha-1-3.py 执行脚本

undefined

执行 sha-1-4.py,査看 sha-1.py 文件的 sha1 值。

undefined

undefined

六、安全性分析

安全散列算法(Secure Hash Algorithm)能计算出一个数位讯息所对应到的,长度固定的字串(又称讯息摘要)。且若输入的讯息不同,对应到不同字串的机率很高;而 SHA 是FIPS 所认证的五种安全杂凑算法。这些算法之所以称作“安全”是基于以下两点(根据官方标准的描述):

1)由讯息摘要反推原输入讯息,从计算理论上来说是很困难的。

2)想要找到两组不同的讯息对应到相同的讯息摘要,从计算理论上来说也是很困难的。任何对输入讯息的变动,都有很高的机率导致其产生的讯息摘要迥异。

实际上,SHA-1 算法有漏洞,但也不意味着这一密码体系彻底被破解,因为破解一个密码就需要超级计算机的海量运算,而通常的安全机制中都包含多因素的防护,比如一段时间内限制密码尝试的次数等。

SHA-2 比 SHA-1 具有更高的安全性,目前还没有 SHA-2 破解的报告,但是 SHA-2 应用并不广泛,原因是在某些操作系统上缺乏支持,比如WindowsXP SP2 以前的版本。

上一条:应用密码学-基于PGP的加密编码实验 下一条:应用密码学-AES编码实验

关闭