散列函数和MAC函数1
第11章 消息认证和散列函数 11章
(2) 初始化: A: 01 B: 89 C: fe D: 76 23 ab dc 54 45 cd ba 32 67 ef 98 10
(3) 主循环:经过4轮,每轮16次的处理。 (4) 输出: 消息摘要=
90015098 3cd24fb0 d6963f7d 28e17f72
第11章 消息认证和散列函数 11章
MD5算法 MD5对输入的任意长度消息产生128位散列值:
填填填 消消消消(K mod64) 2
L×512 bit=N×32 bit K bit
消消
100…0
MD5算法五个步骤: 算法五个步骤: 算法五个步骤
512 bit Y0 512 IV 128 HMD5 CV 1 128
MD5 算 法
MD表示消息摘要(Message Digest),单向散列函数输入: 给定一任意长度的消息 输出: 长为m的散列值。 压缩函数的输入: 消息分组和前一分组的输出(对第一个函数需初始化向量IV); 输出: 到该点的所有分组的散列,即分组Mi的散列为 hi=f (Mi, hi−1) 循环: 该散列值和下一轮的消息分组一起作为压缩函数下一轮的输入,最 后一分组的散列就是整个消息的散列。
M[0]=61626380 M[1]=00000000 M[2]=00000000 M[3]=00000000 M[4]=00000000 M[5]=00000000 M[6]=00000000 M[7]=00000000 M[8]=00000000 M[9]=00000000 M[10]=00000000 M[11]=00000000 M[12]=00000000 M[13]=00000000 M[14]=00000000 M[15]=00000018
为什么?
对称加密既可提供认证,又可以提供保密性, 但是这不是绝对的。 从认证的角度看,如果消息M可以是任意的 位模式,那么接收方无法确定接收到的消息 是合法的明文。 对接收到的密文解密所得明文得可读性进行 自动判别,是一件困难的事情。
第11章 消息认证和散列函数 11章
11.2.2 消息认证码 消息认证码(MAC)
四轮操作的不同之处在于每轮使用的非线性函数不同,分别 为(其输入/输出均为32位字): 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)) 其中,^表示按位与; ˇ表示按位或; ~表示按位反; +表示按位异或。
100…0
512 bit Y 0 512 IV 160 H SHA CV 1 160
512 bit Y 1 512 HSHA … CV -1 L 160 …
512 bit Y -1 L 512 H SHA 160填消消位位
图3-5 SHA–1算法
第11章 消息认证和散列函数 11章
1) 填充消息
将消息填充为512位的整数倍,填充方法和MD5完全相同。
第11章 消息认证和散列函数 11章
还要求:
能用于任何大小的消息; 能产生定长输出; 寻找任意 任意的M和M’,会满足H(M)=H(M’)很难。 任意
实现:
单向散列函数是建立在压缩函数之上的:
消消消消1
消消消消2
…
消消消消n
填填填
IV
压压 非非
压压 非非
…
压压 非非
非非函
第11章 消息认证和散列函数 11章
还用到常数字序列K0、K1、…、K79: Kt = 0x5A827999 Kt = 0x6ED9EBA1 Kt = 0x8F1BBCDC Kt = 0xCA62C1D6 (0≤t≤19) (20≤t≤39) (40≤t≤59) (60≤t≤79)
第11章 消息认证和散列函数 11章
SHA算法按如下步骤处理每个字块Mi:
– – – 用3轮每轮16步,用了三个非线性函数, 没有T[i]常量加 每轮没有叠加上轮的结果;
RSA 实验室将 MD5 描述为“系有安全带的 MD4”,虽然比 MD4 慢, 但却被认为是安全的,对大数在前的系统性能较好。 SHA也是以MD4以基础设计的。
第11章 消息认证和散列函数 11章
安全散列函数(SHA) 安全散列函数
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 章
第11章 消息认证和散列函数 11章
在网络环境中,存在下述的攻击: 1. 泄密 2. 传输分析 3. 伪装 4. 内容修改 5. 顺序修改 6. 计时修改 7. 发送方否认 8. 接收方否认 消息认证 数字签名
第11章 消息认证和散列函数 11章
A B C D CV q+1
第11章 消息认证和散列函数 11章
四轮的操作类似,每轮16次:
用 到 一 个 有 64 个 元 素 的 表 T[1..64] , T[i]=232×abs(sin(i)),i的单位为弧度。
16次
a b c d
a M j T[i] b
非非非非非
+
+
+
<<<s
+
c d
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
源源A M K Ⅱ
目目源B M C 比比 K CK(M)
C
图11.4 MAC应用于消息认证
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
单向散列函数
单向散列函数: Hash Function,哈希函数、杂凑函数 将任意长度的消息M映射成一个固定长度散列值h的函数: h=H(M) 其中,h的长度为m。 用途: 消息认证、数字签名。 MESSAGE πασσωορδ 哈希算法
2) 初始化缓冲区
SHA要用到两个缓冲区,均有五个32位的寄存器。 第一个缓冲区:A、B、C、D、E; 第二个缓冲区:H0、H1、H2、H3、H4。 运算过程中还用到一个标记为W0、W1、…、W79的80个32位字序 列和一个单字的缓冲区TEMP。 在运算之前,初始化{Hj}: H0 = 0x67452301 H1 = 0xEFCDAB89 H2 = 0x98BADCFE H3 = 0x10325476 H4 = 0xC3D2E1F0
与密钥相关的单向散列函数通常称为MAC(消息认证码): MAC=CK(M) 其中:
M为可变长的消息;K为通信双方共享的密钥;C为单向函数。
用途: 为拥有共享密钥的双方在通信中验证消息的完整性; 被单个用户用来验证他的文件是否被改动。
第11章 消息认证和散列函数 11章
MAC函数与加密类似,其区别之一是: MAC算法不要求可逆性而加密算法必 须是可逆的。
512 bit Y1 512 HMD5 … CV -1 L 128 …
512 bit YL-1 512 HMD5
1) 附加填充位 2) 附加长度 3) 初始化MD缓冲区 4) 按512位的分组处理 5) 输出
128填消消位位
第11章 消息认证和散列函数 11章 1) 附加填充位 填充消息,使其长度为一个比512的倍数小64位的数。 填充方法:在消息后面填充一位1,然后填充所需数量的0。填 充位的位数从1~512。
第11章 消息认证和散列函数 11章
Ron Rivest的贡献 的贡献
MD2、MD4 和 MD5 都是由 Ron Rivest开发的: MD2 是为 8 位计算机系统设计的; MD4 开始是为 32 位计算机系统开发的,适合小数在前的系统(80x86 和pentium),1990 开发,简单易于编程,现在被认为是不安全的:
(1) 把Mi分为16个字W0、W1、…、W15,其中,W0为最左边的字。 (2) for t =16 to 79 do let Wt =(Wt−3 Wt−8 Wt−14 ⊕ Wt−16)<<<1 ⊕ ⊕ (3) Let A =H0,B =H1,C =H2,D =H3,E =H4 (4) for t =0 to 79 do TEMP = (A<<<5)+ft (B, C, D)+E +Wt +Kt ; E =D; D =C; C =(B<<<30); B = A; A = TEMP; (5) Let H0 =H0 +A, H1 =H1 +B, H2 =H2 +C, H3 =H3 +D, H4 =H4 +E
第11章 消息认证和散列函数 11章
单向散列函数Hash 单向散列函数
(1)单向散列函数是消息认证的一种变形。 (2)与MAC不同的是,散列码并不使用密钥, 它仅是输入消息的函数。 (3)散列码是所有消息位的函数,它具有错 误检测能力,即改变消息的任何一位或者多位, 都会导致散列码的改变。
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
一个简单的散列函数
每个分组按比特异或(简单奇偶校验):
Ci = bi1 ⊕ bi2 ⊕ ... ⊕ bim
改进: 针对可预测数据,每次循环左移一位将数据和散列值 再异或。 结果: 随机化、去格式化
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章 3) 按512位的分组处理输入消息 SHA运算主循环包括四轮,每轮20次操作。 逻辑函数序列f0 、f1 、…、f79 ,每个逻辑函数的输入为三个 32位字,输出为一个32位字:
ft (B,C,D) = (B^C) ˇ(~B^D) ft (B,C,D) = B+C+D ft (B,C,D) = (B^C) ˇ(B^D) ˇ(C^D) ft (B,C,D) = B+C+D (0≤t≤19) (20≤t≤39) (40≤t≤59) (60≤t≤79)
ssh server的算法 -回复
ssh server的算法-回复SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地进行远程登录和文件传输。
SSH使用加密算法来保护敏感信息的传输和处理。
本文将深入探讨SSH服务器的算法,包括密钥交换算法、加密算法和消息验证代码算法。
密钥交换算法:SSH使用密钥交换算法来建立安全连接并协商到后续的加密算法。
在密钥交换算法中,有几种常见的选择,包括Diffie-Hellman密钥交换、RSA密钥交换等。
1. Diffie-Hellman密钥交换:Diffie-Hellman密钥交换算法是一种非对称加密算法,利用数论中的离散对数问题来确保通信的机密性。
在SSH中,客户端和服务器都生成一个公钥和一个私钥。
然后它们通过不安全的网络交换公钥,并使用各自的私钥和对方的公钥计算出一个共享密钥,从而建立一个安全的通信信道。
2. RSA密钥交换:RSA密钥交换算法也是一种非对称加密算法,基于大质数分解问题。
SSH中,服务器使用RSA密钥对来生成公钥和私钥。
客户端通过获取服务器公钥并对其进行验证,然后使用服务器公钥加密一个随机生成的会话密钥,并将其发送给服务器。
服务器使用其私钥解密会话密钥,然后使用该密钥建立安全连接。
加密算法:一旦建立了安全连接,SSH使用加密算法来对通信数据进行加密。
以下是几种常用的加密算法:1. AES(Advanced Encryption Standard):AES是一种对称加密算法,广泛用于保护机密信息的安全性。
它使用128、192或256位密钥,并将数据分成固定长度的块进行加密。
2. 3DES(Triple Data Encryption Standard):3DES是一种对称加密算法,它对数据进行三次加密,每次使用不同的密钥。
它在SSH中仍然被广泛使用,但由于其计算复杂性较高,性能较低。
3. Blowfish:Blowfish是一种对称加密算法,使用32位至448位的密钥。
散列函数和MAC函数1
第11章 消息认证和散列函数 11章
单向散列函数Hash 单向散列函数
(1)单向散列函数是消息认证的一种变形。 (2)与MAC不同的是,散列码并不使用密钥, 它仅是输入消息的函数。 (3)散列码是所有消息位的函数,它具有错 误检测能力,即改变消息的任何一位或者多位, 都会导致散列码的改变。
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
(2) 初始化: A: 01 B: 89 C: fe D: 76 23 ab dc 54 45 cd ba 32 67 ef 98 10
(3) 主循环:经过4轮,每轮16次的处理。 (4) 输出: 消息摘要=
90015098 3cd24fb0 d6963f7d 28e17f72
MD5 算 法
MD表示消息摘要(Message Digest),单向散列函数输入: 给定一任意长度的消息 输出: 长为m的散列值。 压缩函数的输入: 消息分组和前一分组的输出(对第一个函数需初始化向量IV); 输出: 到该点的所有分组的散列,即分组Mi的散列为 hi=f (Mi, hi−1) 循环: 该散列值和下一轮的消息分组一起作为压缩函数下一轮的输入,最 后一分组的散列就是整个消息的散列。
第11章 消息认证和散列函数 11章
源源A M K Ⅱ
目目源B M C 比比 K CK(M)
C
图11.4 MAC应用于消息认证
第11章 消息认证和散列函数 11章
第11章 消息认证和散列函数 11章
单向散列函数
单向散列函数: Hash Function,哈希函数、杂凑函数 将任意长度的消息M映射成一个固定长度散列值h的函数: h=H(M) 其中,h的长度为m。 用途: 消息认证、数字签名。 MESSAGE πασσωορδ 哈希算法
散列函数实验原理
散列函数实验原理散列函数是计算机科学中的重要概念,用于将任意长度的输入数据映射为固定长度的输出数据,通常用于数据存储、数据检索和安全领域。
1.散列函数的定义散列函数是一种确定性函数,它接收任意长度数据作为输入,并输出固定长度的散列值。
其定义如下:H(x)=y,其中x为输入数据,y为输出的散列值。
2.散列函数的特性-确定性:相同的输入将产生相同的输出,可以保证数据的一致性。
-输入不同性:不同的输入应产生不同的输出,避免冲突和碰撞。
-输出一致性:无论输入数据的大小,输出的散列值长度应保持固定。
3.散列函数的应用-数据存储:散列函数常用于哈希表的实现。
数据通过散列函数计算出索引值,从而快速访问和检索数据。
-数据校验:散列函数可以用于验证数据的完整性和一致性。
比如,在文件传输过程中,发送方可以计算数据的散列值,并发送给接收方,接收方在接收到数据后再次计算散列值并与传输过来的散列值进行比对,以确认数据是否被篡改。
-密码学安全:散列函数广泛应用于密码学算法中,如消息认证码(HMAC)、数字签名(RSA)等。
散列函数用来保证数据的不可逆性和消息的完整性。
4.散列函数的实现原理散列函数的实现可以使用不同的方法和算法,下面介绍几种常见的散列函数实现原理。
-哈希函数表:通过查找表的方式,将每个输入的数据值映射到一个唯一的输出值,如使用一个长度固定的数组作为存储空间,将数据对应的索引存储在数组中。
-数字分析方法:通过对输入数据进行分析,提取关键信息,再进行一系列的逻辑运算,最终得到散列值。
比如,CRC校验中就使用了数字分析方法。
-数学方法:利用数学运算的特性,如乘法、除法、模运算等,将输入数据转化为散列值。
MD5和SHA-1就是基于数学方法实现的散列函数。
-加法混合法:通过将输入数据划分为不同的组,并对每个组进行加法运算,再将结果相加,最终得到散列值。
这种方法常用于简单的散列函数实现。
5.散列函数的安全性问题-弱碰撞:找到两个不同的输入数据,使得它们经过散列函数计算后产生相同的散列值。
哈希算法 分类
哈希算法分类“哈希算法分类”哈希算法是计算机科学中常用的一种算法,用于将任意长度的数据映射为固定长度的哈希值。
根据不同的特性和应用场景,哈希算法可以分为以下几类:1.散列函数(Hash Function):这是哈希算法最基本的分类。
散列函数接受输入,并将其映射为固定长度的哈希值。
常见的散列函数有MD5、SHA-1、SHA-256等。
散列函数具有快速计算、哈希值分布均匀等特点,常用于数据校验、密码存储等场景。
2.消息认证码(Message Authentication Code,MAC):MAC是一种基于密钥的哈希算法。
它使用一个密钥将输入数据和哈希值绑定在一起,以实现数据完整性和认证。
常见的MAC算法有HMAC、CMAC 等。
MAC算法广泛应用于数据完整性验证、数字签名等领域。
3.消息摘要(Message Digest):消息摘要是一种单向哈希函数,它将输入数据映射为固定长度的哈希值,但无法从哈希值恢复原始数据。
常见的消息摘要算法有SHA-1、SHA-256等。
消息摘要广泛应用于密码学、数据完整性验证等场景。
4.布隆过滤器(Bloom Filter):布隆过滤器是一种概率型数据结构,用于判断一个元素是否属于一个集合。
它使用多个散列函数将输入数据映射到位图中,并根据位图的结果进行判断。
布隆过滤器具有高效的查询速度和节省内存的特点,常用于缓存、数据去重等场景。
5.跳跃一致性哈希(Jump Consistent Hash):跳跃一致性哈希是一种特殊的哈希算法,用于实现分布式哈希表中的数据分布。
它通过将输入数据映射到一个范围内的整数值,并基于这个整数值选择相应的服务器节点。
跳跃一致性哈希算法具有高效的负载均衡和节点扩缩容特性,被广泛应用于分布式缓存、分布式数据库等场景。
在使用哈希算法时,需要根据具体的应用场景选择适合的算法类型。
同时,为了保障数据的安全性和完整性,还需要注意选择安全性较高的算法,并合理使用密钥和盐值等技术手段。
消息鉴别码(MAC)相关国际标准介绍
消息鉴别码(MAC)相关国际标准介绍作者:谢宗晓董坤祥甄杰来源:《中国质量与标准导报》2021年第05期1 消息鉴别码消息鉴别码(Message Authentication Code,MAC)是一种确认完整性的技术。
MAC的输入,包括任意长度的消息和一个发行者和接收者的共享密钥。
MAC的输出,则是固定长度的字符串,这个数据串称为MAC值。
显然,输入和输出的方式,与杂凑函数很类似,但是,杂凑函数不需要密钥。
换句话说,MAC可以认为是与密钥相关的杂凑函数。
杂凑函数的最典型应用,例如存储用户口令,利用MD5 算法实现的口令的比对过程见图1。
类似于口令比对的方式,也可以检测消息传输过程中是否被篡改过,也就是说可以保证消息的“完整性”。
但是有时候我们需要确认消息是谁发送的,或者说需要对消息进行鉴别(authentication),不仅仅是判断完整性,这时候就需要MAC。
此时,共享密钥的作用就显现出来了。
例如,在银行转账业务中,收到的汇款请求指令,不仅要确保消息在传输过程中未被篡改,还要确保消息不是伪造的。
这正是MAC能够解决的问题,固定长度的字符串(类似于杂凑值)可以保证消息的完整性,共享的密钥可以实现一定程度的用户鉴别,即消息确实来自正确的发送者。
其工作原理见图2。
但是,从上述机制中也可以看到MAC本身是无法抗抵赖的,因为密钥是发送方和接收方共享的,实际上,抗抵赖性的实现一般要用数字签名技术[1]。
MAC还存在一个问题,就是密钥如何共享,这与对称密码算法的密钥分发问题是一致的。
2 MAC的实现MAC是一种机制,而不是某个单独的函数。
事实上,实现MAC的途径有很多,一般在实际应用中,主要是通过杂凑函数和分组密码,也可以通过序列密码和公钥密码等。
通过杂凑函数或分组密码实现MAC,是最常见的方式,对应的就是ISO/IEC 9797的3个部分,ISO/IEC 9797 总标题为:消息鉴别码(Message Authentication Codes,MACs),基本情况见表1。
五个加密技术用于保护敏感数据
五个加密技术用于保护敏感数据在今天的数字化时代,随着信息技术的不断发展和普及,数据的安全性变得越来越重要。
特别是对于一些敏感数据,如个人隐私信息、商业机密等,保护数据的安全性变得尤为重要。
为了应对数据泄露和黑客攻击等安全威胁,人们开始使用各种加密技术来保护敏感数据。
本文将介绍五种常见的加密技术,它们被广泛应用于保护敏感数据。
首先,对称加密技术是最常见和广泛应用的一种加密技术。
该技术使用同一个密钥对数据进行加密和解密。
发送方使用该密钥将敏感数据加密,然后将加密后的数据传输给接收方,接收方再使用同样的密钥对数据进行解密。
对称加密技术具有加解密速度快的优点,并且安全性较高。
其中最著名的对称加密算法是AES (Advanced Encryption Standard),它被广泛应用于银行、电子商务等领域。
其次,非对称加密技术也是一种常见的加密技术。
与对称加密技术不同,非对称加密技术使用一对密钥,即公钥和私钥。
发送方使用接收方的公钥对数据进行加密,接收方使用私钥对数据进行解密。
公钥是公开的,任何人都可以使用该公钥对数据进行加密,但只有接收方拥有私钥才能解密。
这种技术的一个重要应用是数字签名,它可以验证数据的完整性和真实性。
第三,散列函数是一种不可逆的加密技术,它将输入数据映射成一串固定长度的字符串,称为散列值。
散列函数的一个重要特点是,即使输入数据有微小的改动,生成的散列值也会完全不同。
散列函数被广泛应用于电子商务系统的密码存储、数字证书等方面,以保护用户的密码和证书的安全性。
第四,消息认证码(MAC)是一种用于验证消息完整性和真实性的技术。
它使用一个密钥和一个消息作为输入,生成一个固定长度的字符串作为输出。
接收方可以使用相同的密钥和消息来验证生成的字符串是否与接收到的字符串相匹配。
MAC在保护通信中的数据完整性和真实性方面发挥着重要作用。
最后,公钥证书是一种基于非对称加密技术的安全技术,用于验证网站和服务的真实性和身份。
现代密码学第7章:散列函数
散列函数的使用方式
由于加密运算的速度较慢,代价较高, 而且很多加密算法还受到专利保护,因此在 不要求保密性的情况下,方式②和③将比其 他方式更具优势。
32
2.2 散列函数应满足的条件
散列函数的目的是为需认证的数据产生 一个“指纹”。为了能够实现对数据的认证, 散列函数应满足以下条件: ① 函数的输入可以是任意长。 ② 函数的输出是固定长。 ③ 已知x,求H(据认证算法
数据认证算法是最为广泛使用的消息认 证码中的一个,已作为FIPS Publication (FIPS PUB 113)并被ANSI作为X9.17标准。 算法基于CBC模式的DES算法,其初始向量 取为零向量。需被认证的数据(消息、记录、 文件或程序)被分为64比特长的分组D1, D2,…,DN,其中最后一个分组不够64比特 的话,可在其右边填充一些0,然后按以下 过程计算数据认证码(见图2):
16
1.2 产生MAC的函数应满足的要求 假定k>n,且敌手已得到M1和MAC1,其 中MAC1=CK1(M1),敌手对所有可能的密 钥值Ki求MACi=CKi(M1),直到找到某个Ki使得 MACi=MAC1。由于不同的密钥个数为2k,因 此将产生2k个MAC,但其中仅有2n个不同, 由于2k>2n,所以有很多密钥(平均有 2k/2n=2k-n个)都可产生出正确的MAC1,而 敌手无法知道进行通信的两个用户用的是哪 一个密钥,还必须按以下方式重复上述攻击:
21
1.2 产生MAC的函数应满足的要求
考虑到MAC所存在的以上攻击类型,可知它应 满足以下要求,其中假定敌手知道函数C,但不知 道密钥K: ① 如果敌手得到M和CK(M),则构造一满足 CK(M′)=CK(M)的新消息M′在计算上是不可行的。 ② CK(M)在以下意义下是均匀分布的: 随机选取两 个消息M、M′,Pr[CK(M)=CK(M′)]=2-n,其中n为 MAC的长。 ③ 若M′是M的某个变换,即M′=f(M),例如f为插入 一个或多个比特,那么Pr[CK(M)=CK(M′)] = 2-n。
常用加密算法介绍
常用加密算法介绍加密算法是现代信息安全的基础,它们用于保护数据的机密性、完整性和可用性。
在本文中,我将介绍一些常用的加密算法及其特点。
1.对称加密算法:对称加密算法采用相同的密钥对数据进行加密和解密。
常见的对称加密算法有DES(Data Encryption Standard)、3DES(Triple DES)、AES(Advanced Encryption Standard)等。
这些算法在加密和解密的过程中速度快且效率高,但密钥的管理和分发比较困难。
2.非对称加密算法:非对称加密算法使用一对密钥,即公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
公钥可以公开给任何人使用,而私钥必须保密。
常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)、ElGamal等。
非对称加密算法能够解决对称加密算法中密钥安全分发的问题,但加密和解密的速度较慢。
3.散列函数:散列函数(Hash Function)将输入映射为固定长度的输出,通常是一个固定长度的字符串。
散列函数具有以下特点:输入的微小变化会导致输出的巨大变化;同样的输入会产生同样的输出;给定输出,很难从中推断出输入。
常见的散列函数有MD5、SHA-1、SHA-256等。
散列函数常用于验证数据的完整性和生成密码的摘要。
4.消息认证码(MAC):MAC是一种带有密钥的散列函数,用于验证消息的完整性和真实性。
它使用一个密钥来对消息进行加密,并生成一个固定长度的摘要。
常见的MAC算法有HMAC(Hash-based Message Authentication Code)、CMAC (Cipher-based Message Authentication Code)等。
5.数字签名:数字签名是一种在数字通信中验证消息真实性和完整性的技术。
它使用发送者的私钥对消息进行加密生成签名,接收者使用发送者的公钥进行解密和验证签名。
常见的数字签名算法有RSA、DSA(Digital Signature Algorithm)、ECDSA(Elliptic Curve Digital Signature Algorithm)等。
Hash,MAC,HMAC
Hash,MAC,HMACHash-MD5, SHA-1, integrityMAC- keyed hash, integrity & authenticity. HMAC 长度和其所⽤的hash长度⼀样Hash是⼀种从任何⼀种数据中创建⼩的数字“指纹”的⽅法。
散列函数把消息或数据压缩成摘要,使得数据量变⼩,将数据的格式固定下来。
如果两个散列值是不相同的(根据同⼀函数),那么这两个散列值的原始输⼊也是不相同的。
这个特性是散列函数具有的结果,具有这种性质的散列函数称为单向散列函数。
但另⼀⽅⾯,散列函数的输⼊和输出不是唯⼀对应關係的,如果两个散列值相同,两个输⼊值很可能是相同的。
但也可能不同,這種情況稱為「碰撞」,這通常是兩個不同⾧度的散列值,刻意計算出相同的輸出值。
Hash,⼀般翻译做“散列”,也有直接⾳译为"哈希"的,就是把任意长度的输⼊(⼜叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是⼀种压缩映射,也就是,散列值的空间通常远⼩于输⼊的空间,不同的输⼊可能会散列成相同的输出,⽽不可能从散列值来唯⼀的确定输⼊值。
简单的说就是⼀种将任意长度的消息压缩到某⼀固定长度的消息摘要的函数。
HASH主要⽤于信息安全领域中加密算法,他把⼀些不同长度的信息转化成杂乱的128位的编码⾥,叫做HASH值. 也可以说,hash就是找到⼀种数据内容和数据存放地址之间的映射关系了解了hash基本定义,就不能不提到⼀些著名的hash算法,MD5 和 SHA1 可以说是⽬前应⽤最⼴泛的Hash算法。
MD5(RFC1321) 是 Rivest 于 1991 年对 MD4 的改进版本,将任意长的明⽂ hash 成 128 bit 的杂凑值。
MD5是⼀种不可逆的加密算法,⽬前是最牢靠的加密算法之⼀,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成⼀段唯⼀的固定长度的代码。
散列函数基本原理
散列函数基本原理散列函数(Hash Function)是一种将任意长度的输入数据映射为固定长度的输出数据的算法。
它具有以下几个基本原理:1. 固定长度输出:散列函数需要将任意长度的输入数据映射为固定长度的输出数据。
这意味着无论输入数据的大小如何,散列函数的输出结果都具有相同的长度。
通常情况下,散列函数的输出结果被称为散列值(Hash Value)或者摘要(Digest)。
2. 唯一性:散列函数对于不同的输入数据,应该生成不同的输出数据,即不同的输入应该具有不同的散列值。
这种特性被称为唯一性或者抗碰撞性。
实际上,由于输入数据的长度远远大于散列值的长度,所以在理论上存在多个不同的输入数据产生相同的散列值。
这种情况被称为碰撞(Collision)。
好的散列函数需要尽可能地减小碰撞的概率。
3.高效性:散列函数的计算速度应该尽可能地快,即使对于大规模的输入数据,也能在合理的时间内完成计算。
高效性是散列函数的重要性能指标之一,尤其对于需要频繁进行散列计算的场景非常重要。
4.不可逆性:散列函数应该是不可逆的。
也就是说,通过散列值无法恢复出原始的输入数据。
这种特性被称为不可逆性或者抗逆性。
这一特性保证了通过散列值,无法得到原始的输入数据,从而保护了数据的隐私和安全。
在实际应用中,散列函数具有广泛的应用。
以下是几个常见的应用场景:1.数据完整性验证:散列函数可以用于验证数据在传输过程中是否发生了改变。
发送方可以通过对数据进行散列计算,得到散列值,并将其发送给接收方。
接收方在接收到数据后,再次进行散列计算,并将计算得到的散列值与接收到的散列值进行比对。
如果两个散列值相同,说明数据在传输过程中没有发生改变。
否则,说明数据可能被篡改,发送方和接收方都可以得到相应的提醒。
3. 数据映射和索引:散列函数是实现哈希表(Hash Table)的基础。
哈希表是一种用于存储和查找数据的数据结构。
散列函数将输入数据映射为散列值,并将散列值作为索引,将数据存储在对应的位置。
