VPN:MD5认证算法原理

VSole2021-09-20 10:51:23

MD5(Message-Digest Algorithm 5,信息摘要算法第5版)是计算机广泛使用的散列算法(也称“哈希算法”或“杂凑算法”)之一,采用带密钥的运算时,可同时用于消息完整性检测和消息源身份认证。它是由MD2、MD3和MD4版本一路发展而来,是Ronald Rivest 于1991年设计发布的,用于取代MD4。

1. MD5算法基本认证原理

尽管不同版本的MD算法的具体原理肯定有所区别,但它们的基本工作机制却是一样的:都是先在发送端将一个随机长度的消息(在带密钥运算的情况下,除包括原始消息外,还要同时包括双方共知的密钥)最终“压缩”(当然,这里并不是简单的压缩,需要经过一系列的各种逻辑运算,以打乱原始消息的次序,生成的是一段看不懂的密文)成一个128位的消息摘要(也称哈希值),并随着原始消息一起发送。

原始消息,连同摘要消息一起到了接收端后,再采用相同的方法对所接收到的原始消息(在带密钥运算的情况下,还要包括双方共知的密钥)进行“压缩”,看生成的消息摘要是否与随着原始消息一起发送过来的消息摘要一致,一致则认为所接收的消息是完整的,在传输途中没有被非法篡改。

因为在带密钥的MD5消息摘要的运算中,不是直接基于原始消息进行计算的,还要与机密的预共享密钥(采用预共享密钥认证方法时),或者本端的公钥(采用数字证书认证方法时)结合起来计算的,而预共享密钥和本端公钥只有发送者和接收者才知道的,所以能保证摘要计算的机密性,产生独一无二的“数字指纹”,起到了消息源身份认证的目的。

MD5摘要运算是不可逆的(即具有单向性,也称之为“单向密钥”),不可通过摘要消息还原出原始的消息。当然,其实所有身份认证算法都是这样的,仅用于认证,不需要在接收端进行数据还原。也正因为如此,MD5算法通常不认为是一种加密算法,不具有解密能力。

MD5算法的消息完整性验证和消息源身份认证的基本过程可用图1来描述。图中的“MAC”就是指摘要消息。MD5算法的总体消息摘要运算过程如下:

图1 MAC类算法基本工作原理示意

(1)把包括密钥和初始消息在内的二进制比特串(假设称之为“原始消息”),以及位于最后位置、新增的用于记录要原始消息(包括密钥和初始消息)的二进制64位长度一起被划分成一个个的512位(16个32位字长)的块。

虽然理论来说MD5算法可以计算的消息长度是任意的,即不受限制的,但是由于用于表示消息长度的二进制位只有64位,所以实际上它也最多只能计算264位的消息。如果消息长度超过这个值,则只会对低264位的消息进行计算。

(2)这些512位的块再经过多轮“与”(And)、“或”(OR)、“非”(NOT)、“异或”(AOR)逻辑算法(具体算法我们可以不做了解)处理,最终会输出四个32位分组,将这四个32位分组级联后将生成一个128位散列值(消息摘要)。

2. MD5算法消息填充原理

因为大多原始数消息,加上用于表示原始消息长度的64位后可能仍不能恰好被512整除,也就是原始消息的二进制位数除以512后的余数不是488(512−64=448)。这时就表明需要对原始消息进行填充处理了。这里又有两种情况:一是余数小于448,另一种就是余数大于448。

如果原始消息二进制位数除以512后的余数小于448,则先在原始消息的最后一个512位块的最后填充一个1,然后再填充若干位0,使得该块的原始消息总长度等于448位,然后加上用于标识原始消息长度的64位,正好形成一个512位的块。

如一个有600位的消息,则可划分成两个512位的块:第一个块是512位全部为原始消息;第二个块中有88位原始消息,然后进行填充:先在最后填充1位“1”,再填充359位“0”,使得88位原始信息+1位1+359位0=448位,最后再附上64位用于标识原始信息长度(600)的值。

如果如果原始消息二进制位数除以512后的余数大于448,这时要新增一个512位的块了。首先是在原始消息的最后一个512位块的最后填充一个1,然后再填充若干位0,使得该块的原始消息总长度等于512位;接着再新增一个块,前面448位均填充0,再加上用于标识原始消息长度的64位,形成新的一个512位块。

如有一个1000位的消息,则最终会划分成三个512位的块:第一个块是512位全部为原始消息;第二个块中有488位原始消息,然后进行填充:先在最后填充1位“1”,再填充23位“0”,使得488位原始信息+1位1+23位0=512位;最后是一个新增的块,也要进行填充:先在前面填充448位0,最后再附上64位用于标识原始信息长度(1000)的值。

3. MD5算法的主要应用

MD5除了应用于各种三层VPN通信的数据完整性验证和消息源身份认证外,在我们在日常IT应用中也常见到它的身影,也经常用于数字签名。

如我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就是用于在我们下载该软件后对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

另外,MD5还广泛用于操作系统的登陆验证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其他类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。避免用户的密码被具有系统管理员权限的用户知道。

二进制摘要算法
本作品采用《CC 协议》,转载必须注明作者和本文链接
VPN:MD5认证算法原理
2021-09-20 10:51:23
MD5(Message-Digest Algorithm 5,信息摘要算法第5版)是计算机广泛使用的散列算法(也称“哈希算法”或“杂凑算法”)之一,采用带密钥的运算时,可同时用于消息完整性检测和消息源身份认证。它是由MD2、MD3和MD4版本一路发展而来,是Ronald Rivest 于1991年设计发布的,用于取代MD4。
SHA算法基本认证原理
2021-09-22 07:46:12
SHA(Secure Hash Algorithm,安全哈希算法主要适用于数字签名,也是一种不可逆的MAC算法,但比MD5算法更加安全。目前它有三种主要的版本,即SHA-0、SHA-1、SHA-2和SHA-3。其中SHA-2和SHA-3版本中又有多种不同子分类,如在SHA-2中又根据它们最终所生成的摘要消息长度的不同又包括SHA-224、SHA-256、SHA-384和SHA-512等几种。
浅谈程序的数字签名
2022-08-17 08:31:54
发送方通过私钥加密后发送给接收方,接收方使用公钥解密,通过对比解密后的Hash函数值确定数据电文是否被篡改。android中的数字签名有2个主要作用:1、能定位消息确实是由发送方签名并发出来的,其他假冒不了发送方的签名。它是一个全文件的签名方案,它能够发现对 APP的受保护部分进行的所有更改,从而有助于加快验证速度并增强完整性保证。
经过 16 轮迭代的 DES 算法已被证明具有充分的对抗统计分析和线性分析的能力。DES 算法的改进方案对 DES 算法的改进原则是使用 RSA 保护DES 密钥,同时在加密前,对明文增加乱序和干扰处理。为了增加暴力破解的难度,密文包头部字段中必须包含一些有助于提高暴力破解难度的信息,并且不能显著影响密文包头的 RSA 解密效率。乱序加密算法为,表明第i 组的密文由明文各组的第比特排列而成。
WeChatAppEx.exe 版本:2.0.6609.4以融智云考学生端为例。网上已经有关于微信小程序解密的非常优秀的文章,本着学习的目的便不参考相关内容。笔者水平实在有限,如发现纰漏,还请读者不吝赐教。拓展的,我们分别观察RSI与RDI指向的内存区域。事实上,这一部分解密过程与微信图片解密相同。目的是用int8类型的值a3填满rbp至8个字节,进行8个字节分组异或。至此,尾部部分解密告一段落。
恶意软件是指由网络犯罪分子设计的恶意程序,可通过创建后门入口来获得对计算设备的访问权,从而窃取个人信息、机密数据,实施对计算机系统的破坏。为了更好地防护恶意软件,避免由恶意软件造成的危害,必须对恶意软件进行分析,以了解恶意软件的类型、性质和攻击方法。
AI安全论文第19篇介绍恶意代码分析经典论文DeepReflect,希望您喜欢
VSole
网络安全专家