网络安全实验七 Hash算法MD5分析

简介: 网络安全实验七 Hash算法MD5分析

一、实验目的

通过实际编程了解MD5算法, 加深对MD5的性质、原理的理解。

二、实验环境

操作系统:运行Windows ,VS2010编译环境。

三、实验内容与实验要求

MD5算法的原理

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

总体流程如下图所示, 表示第i个分组,每次的运算都由前一轮的128位结果值和第i块512bit值进行运算。初始的128位值为初试链接变量,这些参数用于第一轮的运算,以大端字节序来表示,他们分别为:A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。

每一分组的算法流程如下:

第一分组需要将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。从第二分组开始的变量为上一分组的运算结果。

主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。

以一下是每次操作中用到的四个非线性函数(每轮一个)。

F(X,Y,Z) =(X&Y)|((~X)&Z)

G(X,Y,Z) =(X&Z)|(Y&(~Z))

H(X,Y,Z) =X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

(&;是与,|是或,~是非,^是异或)

这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。

F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。

假设Mj表示消息的第j个子分组(从0到15),常数ti是4294967296*abs(sin(i))的整数部分,i取值从1到64,单位是弧度。(4294967296等于2的32次方)

FF(a,b,c,d,Mj,s,ti)表示 a = b + ((a + F(b,c,d) + Mj + ti) << s)

GG(a,b,c,d,Mj,s,ti)表示 a = b + ((a + G(b,c,d) + Mj + ti) << s)

HH(a,b,c,d,Mj,s,ti)表示 a = b + ((a + H(b,c,d) + Mj + ti) << s)

(a,b,c,d,Mj,s,ti)表示 a = b + ((a + I(b,c,d) + Mj + ti) << s)

这四轮(64步)是:

第一轮

1. FF(a,b,c,d,M0,7,0xd76aa478)
2. 
3. FF(d,a,b,c,M1,12,0xe8c7b756)
4. 
5. FF(c,d,a,b,M2,17,0x242070db)
6. 
7. FF(b,c,d,a,M3,22,0xc1bdceee)
8. 
9. FF(a,b,c,d,M4,7,0xf57c0faf)
10. 
11. FF(d,a,b,c,M5,12,0x4787c62a)
12. 
13. FF(c,d,a,b,M6,17,0xa8304613)
14. 
15. FF(b,c,d,a,M7,22,0xfd469501)
16. 
17. FF(a,b,c,d,M8,7,0x698098d8)
18. 
19. FF(d,a,b,c,M9,12,0x8b44f7af)
20. 
21. FF(c,d,a,b,M10,17,0xffff5bb1)
22. 
23. FF(b,c,d,a,M11,22,0x895cd7be)
24. 
25. FF(a,b,c,d,M12,7,0x6b901122)
26. 
27. FF(d,a,b,c,M13,12,0xfd987193)
28. 
29. FF(c,d,a,b,M14,17,0xa679438e)
30. 
31. FF(b,c,d,a,M15,22,0x49b40821)

第二轮

1. GG(a,b,c,d,M1,5,0xf61e2562)
2. 
3. GG(d,a,b,c,M6,9,0xc040b340)
4. 
5. GG(c,d,a,b,M11,14,0x265e5a51)
6. 
7. GG(b,c,d,a,M0,20,0xe9b6c7aa)
8. 
9. GG(a,b,c,d,M5,5,0xd62f105d)
10. 
11. GG(d,a,b,c,M10,9,0x02441453)
12. 
13. GG(c,d,a,b,M15,14,0xd8a1e681)
14. 
15. GG(b,c,d,a,M4,20,0xe7d3fbc8)
16. 
17. GG(a,b,c,d,M9,5,0x21e1cde6)
18. 
19. GG(d,a,b,c,M14,9,0xc33707d6)
20. 
21. GG(c,d,a,b,M3,14,0xf4d50d87)
22. 
23. GG(b,c,d,a,M8,20,0x455a14ed)
24. 
25. GG(a,b,c,d,M13,5,0xa9e3e905)
26. 
27. GG(d,a,b,c,M2,9,0xfcefa3f8)
28. 
29. GG(c,d,a,b,M7,14,0x676f02d9)
30. 
31. GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三轮

1. HH(a,b,c,d,M5,4,0xfffa3942)
2. 
3. HH(d,a,b,c,M8,11,0x8771f681)
4. 
5. HH(c,d,a,b,M11,16,0x6d9d6122)
6. 
7. HH(b,c,d,a,M14,23,0xfde5380c)
8. 
9. HH(a,b,c,d,M1,4,0xa4beea44)
10. 
11. HH(d,a,b,c,M4,11,0x4bdecfa9)
12. 
13. HH(c,d,a,b,M7,16,0xf6bb4b60)
14. 
15. HH(b,c,d,a,M10,23,0xbebfbc70)
16. 
17. HH(a,b,c,d,M13,4,0x289b7ec6)
18. 
19. HH(d,a,b,c,M0,11,0xeaa127fa)
20. 
21. HH(c,d,a,b,M3,16,0xd4ef3085)
22. 
23. HH(b,c,d,a,M6,23,0x04881d05)
24. 
25. HH(a,b,c,d,M9,4,0xd9d4d039)
26. 
27. HH(d,a,b,c,M12,11,0xe6db99e5)
28. 
29. HH(c,d,a,b,M15,16,0x1fa27cf8)
30. 
31. HH(b,c,d,a,M2,23,0xc4ac5665)

第四轮

1. Ⅱ(a,b,c,d,M0,6,0xf4292244)
2. 
3. Ⅱ(d,a,b,c,M7,10,0x432aff97)
4. 
5. Ⅱ(c,d,a,b,M14,15,0xab9423a7)
6. 
7. Ⅱ(b,c,d,a,M5,21,0xfc93a039)
8. 
9. Ⅱ(a,b,c,d,M12,6,0x655b59c3)
10. 
11. Ⅱ(d,a,b,c,M3,10,0x8f0ccc92)
12. 
13. Ⅱ(c,d,a,b,M10,15,0xffeff47d)
14. 
15. Ⅱ(b,c,d,a,M1,21,0x85845dd1)
16. 
17. Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)
18. 
19. Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0)
20. 
21. Ⅱ(c,d,a,b,M6,15,0xa3014314)
22. 
23. Ⅱ(b,c,d,a,M13,21,0x4e0811a1)
24. 
25. Ⅱ(a,b,c,d,M4,6,0xf7537e82)
26. 
27. Ⅱ(d,a,b,c,M11,10,0xbd3af235)
28. 
29. Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb)
30. 
31. Ⅱ(b,c,d,a,M9,21,0xeb86d391)

所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。

当你按照我上面所说的方法实现MD5算法以后,你可以用以下几个信息对你做出来的程序作一个简单的测试,看看程序有没有错误。

1. MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
2. 
3. MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
4. 
5. MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
6. 
7. MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
8. 
9. MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
10. 
11. MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") =
12. 
13. f29939a25efabaef3b87e2cbfe641315

四、实验过程与分析

五、实验结果总结

通过实验我们学习到Hash一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

MD(Message Digest ),为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

分析与思考:

1.哈希算法的原理是将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。

哈希算法不单单只为了加密,其最核心的用处,就是高速存取。在区块链技术中,它才真正大展身手。以下是它在区块中的具体作用:

(1)快速验证。只需要验证摘要,就能比较两个数据是否相等。

(2) 防止篡改。只需要传递数据的摘要即可传递该数据,并防止在传递过程中被篡改。

(3)用于POW共识算法工作量证明。目前比特币和以太坊,都使用POW共识机制。

2. 目前哈希算法分为两大类:

MD(Message Digest):消息摘要算法

MD算法家族包括:MD2,MD4,MD5,它们生成的消息摘要都是 128位 的,通常用16进制表示为32个字符

MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的

MD5(RFC 1321)是Rivest于 1991 年对MD4的改进版本。它对输入仍以 512位 分组,其输出是 4个32位字 的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

从安全性上说:MD5 > MD4 > MD2

SHA(Secure Hash Algorithm):安全散列算法

安全散列算法是一个 密码散列函数家族,是FIPS所认证的安全散列算法,它是一个能计算出数字消息所对应到的,长度固定(又称消息摘要)的算法

SHA家族的五个算法,分别是 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512,后面四个有时统称为 SHA-2

SHA-1可将一个最大 2的64次方位 的讯息,转换成一串 160位 的讯息摘要,而后四个算法生成的摘要长度为它们名字 后面的数字,如SHA-256算法,它生成的摘要长度为256位,因此它的抗穷举(brute-force)性比MD更好

3. MD5不是加密算法而是散列算法,数据转换的过程和结果是不可逆的,即可以从原文生成MD5编码但无法由MD5编码逆向生成原文。

目录
相关文章
|
1月前
|
存储 安全 网络安全
网络安全法律框架:全球视角下的合规性分析
网络安全法律框架:全球视角下的合规性分析
45 1
|
2月前
|
存储 安全 网络安全
云端盾牌:云计算时代的网络安全守护在数字化浪潮中,云计算以其高效、灵活的特性成为企业转型的加速器。然而,伴随其迅猛发展,网络安全问题亦如影随形,成为悬在每个组织头顶的达摩克利斯之剑。本文旨在探讨云计算服务中的网络安全挑战,分析信息安全的重要性,并提出相应对策,以期为企业构建一道坚实的云端防护网。
在当今这个数据驱动的时代,云计算已成为推动创新与效率的关键力量。它允许用户随时随地访问强大的计算资源,降低了企业的运营成本,加速了产品上市时间。但随之而来的网络威胁也日益猖獗,尤其是对于依赖云服务的企业而言,数据泄露、身份盗用等安全事件频发,不仅造成经济损失,更严重损害品牌信誉。本文深入剖析云计算环境中的安全风险,强调建立健全的信息安全管理机制的重要性,并分享一系列有效策略,旨在帮助企业和个人用户在享受云服务带来的便利的同时,也能构筑起强有力的网络防线。
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
147 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
网络协议 网络虚拟化 网络架构
【网络实验】/主机/路由器/交换机/网关/路由协议/RIP+OSPF/DHCP(上)
【网络实验】/主机/路由器/交换机/网关/路由协议/RIP+OSPF/DHCP(上)
82 1
|
2月前
|
安全 网络安全 云计算
云计算与网络安全:技术融合与挑战分析
【9月更文挑战第31天】本文将深入探讨云计算和网络安全之间的关系,包括云服务、网络安全、信息安全等技术领域。我们将从云计算的基本概念和特性出发,分析其在网络安全方面的优势和挑战,并探讨如何通过技术和策略来提高云计算的安全性。同时,我们也将讨论网络安全在云计算环境下的重要性,以及如何通过有效的安全措施来保护云服务的安全。最后,我们将通过代码示例来展示如何在云计算环境中实现网络安全。
68 3
|
3月前
|
网络架构
静态路由 网络实验
本文介绍了如何通过配置静态路由实现不同网络设备间的通信,包括网络拓扑图、设备IP配置、查看路由表信息、配置静态路由和测试步骤。通过在路由器上设置静态路由,使得不同子网内的设备能够互相通信。
静态路由 网络实验
|
3月前
|
网络虚拟化
网络实验 VlAN 中 Trunk Access端口的说明及实验
本文介绍了VLAN技术及其在网络实验中的应用,包括Access端口和Trunk端口的工作原理,以及如何通过实验划分不同VLAN实现内部通信和跨交换机实现VLAN间通信的详细步骤和配置。
网络实验 VlAN 中 Trunk Access端口的说明及实验
|
2月前
|
网络协议 数据安全/隐私保护 网络虚拟化
【网络实验】/主机/路由器/交换机/网关/路由协议/RIP+OSPF/DHCP(下)
【网络实验】/主机/路由器/交换机/网关/路由协议/RIP+OSPF/DHCP(下)
69 0
|
2月前
|
移动开发 网络协议 测试技术
Mininet多数据中心网络拓扑流量带宽实验
Mininet多数据中心网络拓扑流量带宽实验
73 0
|
2月前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
18 0
下一篇
DataWorks