散列函数与消息认证码
- 格式:pdf
- 大小:515.32 KB
- 文档页数:42
hmac 堆成算法HMAC(Hash-based Message Authentication Code)是一种用于数据完整性验证和身份认证的加密算法。
它结合了散列函数和密钥,通过在消息上应用散列函数并使用密钥对结果进行加密来生成一个验证码。
HMAC算法在网络通信和数据传输中被广泛应用,用于确保消息的完整性和可信性。
HMAC算法的核心思想是在消息上应用一个散列函数,并使用一个密钥对散列结果进行加密。
这个加密的结果就是HMAC值,它可以用于验证消息的完整性和真实性。
HMAC算法的安全性依赖于散列函数的抗碰撞性和密钥的保密性。
只有拥有正确的密钥,才能生成正确的HMAC值。
HMAC算法的应用非常广泛。
在网络通信中,HMAC可以用于验证消息的完整性,防止消息在传输过程中被篡改。
在电子商务中,HMAC可以用于验证支付请求的合法性,保护用户的资金安全。
在密码学中,HMAC可以用于生成消息认证码(MAC),用于验证消息的发送者身份。
HMAC算法的实现相对简单,可以使用各种编程语言进行实现。
在实际应用中,需要选择合适的散列函数和密钥长度,并进行适当的密钥管理和存储。
常用的散列函数有MD5、SHA-1、SHA-256等。
选择合适的散列函数和密钥长度可以提高HMAC算法的安全性。
HMAC算法的安全性依赖于密钥的保密性。
如果密钥泄露,攻击者可以生成正确的HMAC值,从而破坏消息的完整性和可信性。
因此,密钥的管理和保护至关重要。
在实际应用中,可以使用密钥交换协议和密钥存储技术来保护密钥的安全性。
HMAC算法的优点是简单高效,安全性较高。
它可以在计算资源有限的情况下提供可靠的消息认证和完整性验证。
同时,HMAC算法可以与各种散列函数和加密算法配合使用,提供更高级的安全性保护。
然而,HMAC算法也存在一些限制和弱点。
首先,HMAC算法依赖于密钥的安全性,如果密钥泄露,攻击者可以伪造正确的HMAC值。
其次,HMAC算法对散列函数的选择敏感,不同的散列函数可能导致不同的安全性。
密码技术模型
密码技术模型是一种用于描述密码技术的概念性、理论模型,通常包括密码学的基本要素、假设、算法和安全性分析等方面。
以下是几种常见的密码技术模型:
1. 传统密码模型(Classical Cryptography Model):传统密码
模型主要用于描述古典密码技术,如凯撒密码和仿射密码等。
它通常包括明文空间、密文空间、密钥空间、加密算法和解密算法等。
2. 非对称密码模型(Asymmetric Cryptography Model):非对
称密码模型是一种基于两个互相关联、但具有不同的密钥的密码模型,也称为公钥密码模型。
它通常包括公钥空间、私钥空间、加密算法和解密算法等。
3. 对称密码模型(Symmetric Cryptography Model):对称密
码模型是一种基于相同密钥进行加密和解密的密码模型。
它通常包括密钥空间、加密算法和解密算法等。
4. 散列函数模型(Hash Function Model):散列函数模型用于
描述散列函数的基本特性和安全性要求。
它包括散列函数的输入空间、输出空间、安全性要求和安全性分析等。
5. 消息认证码模型(Message Authentication Code Model):消息认证码模型用于描述消息认证码的基本特性和安全性。
它通常包括消息认证码的输入空间、输出空间、密钥空间、安全性要求和安全性分析等。
需要注意的是,以上只是几种常见的密码技术模型,实际上还有其他的密码技术模型,如基于标签的密码模型、公钥基础设施模型等,每种模型都有其特定的应用领域和技术要求。
安全协议有哪些1. 导言在现代信息化社会中,信息安全问题日益突出,各类网络攻击和数据泄露事件层出不穷。
为了保护信息系统和网络的安全,人们设计了各种安全协议。
安全协议是在通信过程中确保信息传输的安全性的一种方式。
本文将介绍几种常见的安全协议。
2. 对称加密协议对称加密协议是指通信双方使用相同的密钥进行加密和解密的协议。
常见的对称加密算法有DES、AES等。
2.1. DES(Data Encryption Standard)DES是一种对称加密算法,使用56位密钥对64位的数据进行加密和解密。
由于DES的密钥长度较短,容易被暴力破解,因此现在已经不再被广泛使用。
2.2. AES(Advanced Encryption Standard)AES是一种对称加密算法,使用128位、192位或256位密钥对数据进行加密和解密。
AES具有较高的安全性和性能,目前被广泛应用于各种领域。
3. 非对称加密协议非对称加密协议是指通信双方使用不同的密钥进行加密和解密的协议。
常见的非对称加密算法有RSA、Diffie-Hellman等。
3.1. RSARSA是一种非对称加密算法,通过生成一对公钥和私钥来实现加密和解密。
公钥用于加密数据,私钥用于解密数据。
RSA算法具有较高的安全性,广泛应用于数字签名、密钥交换等领域。
3.2. Diffie-HellmanDiffie-Hellman是一种密钥交换协议,用于在不安全的通信渠道上安全地交换密钥。
该协议利用了离散对数问题的困难性,使得通信双方可以协商出一个共享密钥,用于后续的加密通信。
4. 散列函数和消息认证码协议散列函数和消息认证码协议用于保证数据的完整性和真实性。
4.1. 散列函数散列函数是一种将任意长度的数据映射为固定长度摘要的函数。
常见的散列函数有MD5、SHA-1等。
散列函数具有单向性和抗碰撞性,被广泛用于数字签名、消息认证等领域。
4.2. 消息认证码消息认证码是一种用于验证消息真实性的技术。
哈希算法分类“哈希算法分类”哈希算法是计算机科学中常用的一种算法,用于将任意长度的数据映射为固定长度的哈希值。
根据不同的特性和应用场景,哈希算法可以分为以下几类: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):跳跃一致性哈希是一种特殊的哈希算法,用于实现分布式哈希表中的数据分布。
它通过将输入数据映射到一个范围内的整数值,并基于这个整数值选择相应的服务器节点。
跳跃一致性哈希算法具有高效的负载均衡和节点扩缩容特性,被广泛应用于分布式缓存、分布式数据库等场景。
在使用哈希算法时,需要根据具体的应用场景选择适合的算法类型。
同时,为了保障数据的安全性和完整性,还需要注意选择安全性较高的算法,并合理使用密钥和盐值等技术手段。
五个加密技术用于保护敏感数据在今天的数字化时代,随着信息技术的不断发展和普及,数据的安全性变得越来越重要。
特别是对于一些敏感数据,如个人隐私信息、商业机密等,保护数据的安全性变得尤为重要。
为了应对数据泄露和黑客攻击等安全威胁,人们开始使用各种加密技术来保护敏感数据。
本文将介绍五种常见的加密技术,它们被广泛应用于保护敏感数据。
首先,对称加密技术是最常见和广泛应用的一种加密技术。
该技术使用同一个密钥对数据进行加密和解密。
发送方使用该密钥将敏感数据加密,然后将加密后的数据传输给接收方,接收方再使用同样的密钥对数据进行解密。
对称加密技术具有加解密速度快的优点,并且安全性较高。
其中最著名的对称加密算法是AES (Advanced Encryption Standard),它被广泛应用于银行、电子商务等领域。
其次,非对称加密技术也是一种常见的加密技术。
与对称加密技术不同,非对称加密技术使用一对密钥,即公钥和私钥。
发送方使用接收方的公钥对数据进行加密,接收方使用私钥对数据进行解密。
公钥是公开的,任何人都可以使用该公钥对数据进行加密,但只有接收方拥有私钥才能解密。
这种技术的一个重要应用是数字签名,它可以验证数据的完整性和真实性。
第三,散列函数是一种不可逆的加密技术,它将输入数据映射成一串固定长度的字符串,称为散列值。
散列函数的一个重要特点是,即使输入数据有微小的改动,生成的散列值也会完全不同。
散列函数被广泛应用于电子商务系统的密码存储、数字证书等方面,以保护用户的密码和证书的安全性。
第四,消息认证码(MAC)是一种用于验证消息完整性和真实性的技术。
它使用一个密钥和一个消息作为输入,生成一个固定长度的字符串作为输出。
接收方可以使用相同的密钥和消息来验证生成的字符串是否与接收到的字符串相匹配。
MAC在保护通信中的数据完整性和真实性方面发挥着重要作用。
最后,公钥证书是一种基于非对称加密技术的安全技术,用于验证网站和服务的真实性和身份。
加密技术如何应对数据篡改?一、数据完整性保护技术数据完整性是指数据在传输或存储过程中没有被篡改或损坏。
为了保护数据的完整性,加密技术可以采用以下几种方式:1. 数字签名:数字签名是一种广泛应用的非对称加密技术,它利用公钥加密算法对数据进行加密,并生成数字签名。
这个数字签名可以验证数据的完整性,确保数据没有被篡改。
2. 散列函数:散列函数是一种将任意长度的输入数据转化为固定长度输出的函数。
它通过对输入数据进行散列运算,生成唯一的散列值。
数据接收方可以通过比对散列值来验证数据的完整性,一旦散列值不匹配,则说明数据已经被篡改。
3. 消息认证码:消息认证码是一种通过对数据进行加密和散列函数运算来验证数据完整性的技术。
发送方将数据和密钥一起进行运算,生成消息认证码。
接收方根据相同的密钥和算法进行运算,并与发送方的消息认证码进行比对,从而验证数据的完整性。
二、访问控制技术为了预防数据篡改,加密技术还可以采用访问控制技术来保护数据的安全性和完整性。
1. 密码保护:密码是最常见的访问控制技术之一。
通过设置强密码、定期更改密码以及使用多因素认证等措施,可以有效地防止未经授权的人员对数据进行篡改。
2. 角色访问控制:角色访问控制是一种将权限控制与用户角色关联的访问控制技术。
通过将用户分配到不同的角色,然后对每个角色分配相应的权限,可以限制用户对数据的访问和修改,从而保证数据的完整性。
3. 审计日志:审计日志可以记录数据库中所有的访问和修改操作,包括用户的身份、操作时间、对象以及操作结果等信息。
通过分析审计日志,可以发现并追踪任何对数据进行的篡改行为。
三、防篡改存储技术为了对抗数据篡改,加密技术可以采取防篡改存储技术来保护数据的完整性。
1. 区块链技术:区块链是一种分布式账本技术,它可以将数据以区块的形式存储在多个节点上,并使用密码学算法保护数据的安全性和完整性。
由于每个区块都包含前一个区块的哈希值,使得一旦数据被篡改,就会导致整个区块链上的哈希值发生变化,从而轻松发现数据篡改行为。
第一章(1)什么是计算机/信息系统安全?国际标准化组织ISO对“计算机安全”的定义:是指为信息处理系统建立和采取的技术上的和管理上的安全保护措施,保护系统中硬件、软件及数据,不因偶然或恶意的原因而遭受破坏、更改或泄漏。
由于信息系统是以计算机为工具,对信息进行采集、存储、加工、分析和传输的,因此计算机安全又可称为信息系统安全。
(2)信息系统的安全目标是什么?安全目标是指能够满足一个组织或者个人的所有安全需求,通常包括保密性、完整性和可用性。
保密性:防止非授权访问信息。
完整性:防止非法篡改和破坏信息。
可用性:防止系统拒绝服务。
(3)安全攻击有哪两类?主动攻击和被动攻击。
(4)主动攻击和被动攻击的区别是什么?1)被动攻击被动攻击的特征是对传输进行窃听和监测,目的是获得传输的信息,不对信息做任何改动,因此被动攻击主要威胁信息系统的保密性。
常见的被动攻击包括消息内容的泄漏和流量分析等。
(2)主动攻击主动攻击目的在于篡改或者伪造信息、也可以是改变系统的状态和操作。
主动攻击主要威胁信息的完整性、可用性和真实性。
常见的主动攻击包括:伪装、篡改、重放和拒绝服务等。
(5)信息系统常见的攻击有哪些?泄漏:消息的内容被泄露或透露给某个非授权的实体。
例如在通信线路中,通过电磁辐射侦截传输中的保密信息。
流量分析(Traffic Analysis):利用统计分析方法对通信双方的标识、通信频度、消息格式等参数进行研究,从中发现有价值的信息和规律。
篡改:指对合法用户之间的通信消息进行修改或者改变消息的顺序。
伪装:指一个实体冒充另一个实体。
例如非法用户冒充成系统的合法用户,对系统信息进行访问。
重放(Replay Attack):将窃取的信息修改或排序后重放,从而造成信息重复和混乱。
拒绝服务(DOS,Denial of Service):指阻止对信息或其它资源的合法访问。
病毒:是指编制或在计算机系统中插入破坏计算机功能或数据,影响计算机使用,并能自我复制的一组计算机指令或程序代码。
常用加密算法介绍加密算法是现代信息安全的基础,它们用于保护数据的机密性、完整性和可用性。
在本文中,我将介绍一些常用的加密算法及其特点。
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)等。
sftp 消息认证算法SFTP(Secure File Transfer Protocol)是一种通过加密保护数据传输安全的文件传输协议。
而消息认证算法(Message Authentication Algorithm)则是在SFTP中用于对传输的消息进行认证,以确保传输的完整性和真实性。
SFTP中常用的消息认证算法包括HMAC(Hash-based Message Authentication Code)算法和MAC(Message Authentication Code)算法。
这些算法通过在消息中添加认证码来保证消息的完整性,并使用预共享密钥进行消息的验证。
HMAC算法是一种基于散列函数的消息认证算法,并且广泛应用于各种网络通信协议中。
它的安全性来源于散列函数的不可逆性和预共享密钥的机密性。
HMAC算法的基本过程如下:1. 预共享密钥生成:通信双方在建立连接之前,需要协商生成一个相同的预共享密钥。
2. 消息分割:待传输的消息被分割成固定长度的数据块。
3. 数据块散列:将每个数据块与预共享密钥一起送入散列函数中进行散列计算。
4. 认证码生成:将所有散列计算得到的结果进行逻辑运算,并生成最终的认证码。
5. 消息传输:将原始消息和认证码一起传输给接收方。
6. 认证码验证:接收方使用相同的预共享密钥对接收到的消息进行计算,并与接收到的认证码进行比较,以验证消息的完整性和真实性。
MAC算法也是一种消息认证算法,但它使用的是对称密钥加密算法,如DES(Data Encryption Standard)或AES(Advanced Encryption Standard)。
MAC算法的基本过程如下:1. 预共享密钥生成:通信双方在建立连接之前,需要协商生成一个相同的预共享密钥。
2. 消息分割:待传输的消息被分割成固定长度的数据块。
3. 数据块加密:将每个数据块与预共享密钥一起送入加密算法中进行加密计算。
4. 认证码生成:将所有加密计算得到的结果进行逻辑运算,并生成最终的认证码。
IPsec协议的加密与认证机制IPsec(Internet Protocol Security)是一种网络安全协议,旨在提供对IP数据包的加密和认证保护。
它的目标是确保数据在互联网上传输时的机密性、完整性和可信性。
在本文中,我们将深入探讨IPsec协议的加密与认证机制,以及它们在保护网络通信中的应用。
一、IPsec协议的加密机制IPsec协议通过使用加密算法,将数据包的内容进行加密,以保证数据在传输过程中的机密性。
下面介绍两种常用的加密算法:1. 对称加密算法对称加密算法是一种使用相同密钥进行数据加密和解密的算法。
在IPsec中,常用的对称加密算法有DES(Data Encryption Standard)、3DES和AES(Advanced Encryption Standard)等。
这些算法能够有效地保护数据的机密性,但需要确保密钥的安全传输和存储。
2. 非对称加密算法非对称加密算法使用一对密钥,一个用于加密,另一个用于解密。
在IPsec中,常用的非对称加密算法有RSA和DSA等。
通过使用非对称加密算法,可以实现密钥的安全交换,并确保数据在传输过程中的机密性。
二、IPsec协议的认证机制IPsec协议的认证机制确保数据包在传输过程中的完整性和可信性。
下面介绍两种常用的认证机制:1. 散列函数散列函数是一种将任意长度的输入数据转换为固定长度输出的算法。
在IPsec中,常用的散列函数有MD5和SHA(Secure Hash Algorithm)等。
散列函数通常用于计算数据包的摘要,以确保数据包在传输过程中的完整性。
2. 消息认证码(MAC)消息认证码是一种使用共享密钥对数据进行加密和认证的技术。
在IPsec中,常用的消息认证码有HMAC(Hash-based Message Authentication Code)等。
通过计算数据包的MAC值,并将其与传输过程中的接收到的MAC值进行比较,可以确保数据包的完整性和可信性。
消息认证的三种方法
消息认证的三种方法包括:
1. 密码认证:使用预先共享的密码或密钥来验证消息的完整性和真实性。
发送方使用密钥对消息进行加密,并将其与消息一起发送。
接收方使用相同的密钥对消息进行解密,并验证消息是否与发送方发送的密文匹配。
2. 数字签名认证:使用公钥密码学技术创建和验证数字签名来验消息的完整性、真实性和身份。
发送方使用其私钥对消息进行数字签名,然后将消息和签名一起发送。
接收方使用发送方的公钥来验证签名,以确保消息是由发送方提供且未被篡改的。
3. 消息认证码(MAC)认证:使用一个密钥和散列函数来创
建和验证MAC来验证消息的完整性和真实性。
发送方使用密
钥和散列函数对消息进行计算,并将生成的MAC与消息一起
发送。
接收方使用相同的密钥和散列函数对收到的消息进行计算,并验证计算出的MAC是否与发送方发送的MAC匹配。
这种方法还可以防止消息被篡改,因为即使消息的内容被轻微更改,计算出的MAC也会与发送方发送的MAC不匹配。
这些方法可以单独或结合使用,以提供更强的消息认证和安全性。
哈希算法的基本含义与分类哈希算法是一种能够将任意长度的数据转换成固定长度的数据的算法。
它通过将输入的数据映射成一串固定长度的数字串,这个数字串通常被称为哈希值或散列值。
哈希算法在密码学、数据完整性验证、数据去重等领域有着广泛的应用。
1.固定长度输出:哈希算法将任意输入数据映射成固定长度的哈希值,通常以十六进制表示。
比如常用的MD5算法生成的哈希值是128位(32个字符),SHA-1生成的哈希值是160位(40个字符)。
2.高效性:哈希算法的计算速度通常很快,即使对大量数据进行哈希计算,也能够在合理的时间内完成。
3.不可逆性:哈希算法是一个单向函数,即从哈希值无法得到原始数据。
这是哈希算法主要用于数据完整性验证而不是数据加密的原因之一4.雪崩效应:即使输入的原始数据稍微改变一点,其产生的哈希值的差异也会很大。
这个特点可以用来验证数据的完整性,只要改变了原始数据,必然会导致哈希值的变化。
根据哈希算法的不同特点和应用需求,可以将哈希算法分为以下几类。
1.散列函数:散列函数是一类具有良好离散性质的哈希算法,主要应用于数据的去重和查找。
散列函数将任何大小的输入映射成固定大小的哈希值,且具有雪崩效应。
常见的散列函数有MD5、SHA-1、SHA-256等。
2.消息认证码(MAC):MAC是一种通过对消息进行哈希计算和密钥加密来实现完整性和不可抵赖性验证的哈希算法。
MAC算法通常使用一个密钥来对消息进行加密,以防止篡改。
常见的MAC算法有HMAC、CMAC等。
3. 密码哈希函数:密码哈希函数是一种专门用于密码存储和验证的哈希算法。
它在散列函数的基础上引入了盐值和迭代计算的机制,以增加密码破解的难度。
常见的密码哈希函数有BCrypt、PBKDF2、Argon2等。
4.布隆过滤器:布隆过滤器是一种空间效率很高的概率型数据结构,用于判断一个元素是否存在于集合中。
它利用多个哈希函数对元素进行多次哈希,将结果映射到一个位数组中,并通过判断位数组是否存在非零位来判断元素是否存在。
第七讲散列函数与消息认证码马春光machunguang@计算机科学与技术学院哈尔滨工程大学1 /•网络安全威胁:–被动攻击(Passive Attack):敌手通过侦听和截获等手段获取数据;–主动攻击(Active Attack):敌手通过伪造、重放、篡改、乱序等手段改变数据;图1 无线网络中的四种通信安全威胁(a)监听;(b)篡改;(c)伪造;(d)阻断2 /•消息认证(Message Authentication)的目的:–验证消息的完整性,确认数据在传送和存储过程中未受到主动攻击。
•消息认证的方式:–消息加密函数:加密整个消息,以消息的密文文件作为认证,可使用对称密码或公钥密码体制进行加密;–散列函数(Hash):将任意长度的消息变换为定长的消息摘要,并加以认证;–消息认证码(MAC):依赖公开的函数(密钥控制下)对消息处理,生成定长的认证标识,并加以认证;3 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5•2 消息认证码–2.1 MAC函数–2.2 MAC的安全性–2.3 CBC-MAC•作业4 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业5 /散列函数的定义•散列函数H 是一个公开的函数,它将任意长度的消息M变换为固定长度的散列码h 。
•h=H (M)–M:变长消息,H(M):定长的散列值•散列函数是一种算法,算法的输出内容称为散列码或者消息摘要。
•消息摘要要唯一地对应原始消息,如果原始消息改变并且再次通过散列函数,它将生成不同的消息摘要,因此散列函数能用来检测消息地完整性,保证消息从建立开始到收到为止没有被改变和破坏。
•运行相同算法的接受者应该收到系统的消息摘要,否则保温是不可信的。
•散列函数又称为:哈希(Hash )函数、数字指纹(Digital fingerprint)、压缩(Compression)函数、数据认证码(DataAuthentication Code)等6 /散列函数的要求•H 能用于任意大小的分组;•H 能产生定长的输出;•对任何给定的x,H(x)要相对易于计算,使得硬件和软件实现成为实际可能;•对任何给定的码h ,寻找x 使得H(x)=h 在计算上是不可行的,即单向性(one-way);•对任意给定的分组x,寻找不等于x 的y,使得H(x)=H(y)在计算上是不可行的,即弱抗冲突性(Weak Collision-free);•寻找对任意的(x, y) 对使得H(x)=H (y) 在计算上是不可行的,即强抗冲突性(Strong Collision-free);7 /提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业8 /2.2 Hash函数的通用结构•由Ron Rivest于1990年提出MD4•几乎被所有Hash函数使用•具体做法:–把原始消息M分成一些固定长度的块Y i–最后一块padding 并使其包含消息M长度–设定初始值CV0–压缩函数f, CV i=f(CV i-1, Y i-1)–最后一个CV i为Hash值9 //提纲•1 散列函数–1.1 散列函数的定义–1.2 散列函数的通用结构–1.3 MD5• 2 消息认证码•作业11 /MD5 描述•1989年,Merkle提出Hash function模型•1990年,Ron Rivest提出MD4•1992年, Ron Rivest完成MD5 (RFC 1321) –/rfcs/rfc1321.html•在最近数年之前,MD5是最主要的Hash算法•现行美国标准SHA-1以MD5的前身MD4为基础•MD5(Message Digest)–输入:任意长度的消息–输入分组长度:512 bit–输出:128 bit 消息12 /(4)(3)13 /14/MD5 描述-(1)•消息填充•对消息进行填充,使其比特数与448模512同余,即填充长度为512的整数倍减去64,留出64比特在(2)中使用:•填充方法:填充比特串的最高位为1,其余各位均为0。
最少要补1比特,最多补512比特(补一个组)。
11||448mod512||448mod512,||||512M if M then M M ≡==+1||M M Padding=15/MD5 描述-(2)•附加消息长度值•(1)和(2)执行后,消息的长度为512的倍数,假设扩展后的长度为L ×512 比特,将消息以512比特为单位进行分组,用Y 0,Y 1,…,Y L -1表示。
•同样扩展后的消息以字(32比特)为单位可表示为M 2[0…N -1],N =L ×16。
216464||||||||mod 2,2M M LengthM M Padding Length Length M ===低位字节优先,表示为64bit长若初始长度大于,仅使用该长度的低64bit(4) (3)MM1M2一个分组16/MD5 描述-(3)•初始化MD缓存•MD为128bit,记为CVq,用于存放散列函数的中间及最终结果,CV= IV为初始化值。
•MD可表示为4个32bit的寄存器(A,B,C,D),它们也称为链接变量,其初始化如下:17 /输出结果:19 /H MD520 //128bit 的缓存值更新缓存T[0,1…64]32(2(sin())),0(sin())13232i i T INT abs i i abs i T bit bit =×≤≤的单位为弧度能用表示,提供了随机化的模式,消除了规律性单个512bit 分组的MD5处理过程(MD5压缩函数H MD5)每步操作形式22///单个512bit 分组的MD5处理过程(MD5压缩函数H MD5)116()(15)mod16()(53)()5mod16i i i i i i i ρρρ≤≤=+=+=234X[0..15]:保存当前512bit 待处理输入分组的值X[k] = M[q ×16 + k] = 在第q 个512位数据块中的第k 个32位字每次循环(4)的每步(16)内,X[i]的使用循序各不相同25/MD5的安全性•Berson 表明,对单循环MD5,使用不用的密码分析可能在合理的时间内找出能够产生相同摘要的两个消息,这个结果被证明对四个循环中的任意一个循环也成立,但作者没有能够提出如何攻击包含全部4个循环MD5的攻击。
•Boer 和Bosselaers 显示了即使缓存ABCD 不同,MD5对单个512bit 分组的执行将得到相同的输出(伪冲突)。
•Dobbertin 的攻击技术:使MD5的压缩函数产生冲突,即寻找:•MD5被认为是易受攻击的,逐渐被SHA-1和RIPEMD-160替代。
,, ()()x y x y H x H y ∃≠=、26/其他散列函数Hash小结•Hash函数把变长信息映射到定长信息•Hash函数不具备可逆性•Hash函数速度较快•Hash函数与对称密钥加密算法有某种相似性•对Hash函数的密码分析比对称密钥密码更困难•Hash函数可用于消息摘要•Hash函数可用于数字签名27 /提纲•1 散列函数•2 消息认证码–2.1 MAC函数–2.2 MAC的安全性–2.3 CBC-MAC–2.4 HMAC•作业28 /2.1 MAC函数•Message Authentication Code(MAC)–使用一个密钥生成一个固定大小的小数据块,并加入到消息中,称MAC,或密码校验和(cryptographicchecksum)。
•MAC的作用:–接收者可以确信消息M未被改变;–接收者可以确信消息来自所声称的发送者;–如果消息中包含顺序码(如HDLC,X.25,TCP),则接收者可以保证消息的正常顺序;•MAC函数类似于加密函数,但不需要可逆性。
因此在数学上比加密算法被攻击的弱点要少。
29 /提纲•1 散列函数•2 消息认证码–2.1 MAC函数–2.2 MAC的安全性–2.3 CBC-MAC–2.4 HMAC•作业32 /33/对MAC 的强行攻击(1)•函数域:任意长度的消息。
•值域:所有可能的MAC 和所有可能的密钥。
•假设:–MAC 的长度为n 比特→2 n 个可能的MAC–N 个消息,N ≥2 n–密钥的长度为k →2 k 个可能的密钥•假设攻击者使用强行攻击,且已经获得消息的明文和相应的MAC ,即( M i , MAC i ) 。
对MAC的强行攻击(2)•第1 轮:–给定M1 和MAC1=C K ( M1 ),对所有2 k个可能的密钥计算:MAC1=C K i ( M1 )i=1,2, …, 2 k–匹配数≈2 k-n,得到2 k-n个可能的密钥;•第2 轮:–给定M2 和MAC2=C K ( M2 ),对所有2 k-n个可能的密钥计算:MAC2=C K i ( M2 )i=1,2, …, 2 k-n–匹配数≈2 k-2n,得到2 k-2n 个可能的密钥;•……•如果k>n(设k=a×n),则这种攻击需要进行a 轮。
–共需要2 k次以上的MAC运算。
•如果k ≤n ,则第1轮就可以产生一个唯一对应的密钥,但仍然可能有多于一个密钥产生这一配对(当k < n 时),这时攻击者需对一个新的(M, MAC)进行相同的测试。
–共需要≥2 k次的MAC运算。
•由此可见,攻击者企图发现MAC 的密钥不小于甚至大于对同样长度的解密密钥的攻击。
34 /35/对MAC 的其它攻击•设M = (X 1||X 2||…|| X m ) 是一个由64比特X i 数据块连接而成,–定义△(M ) = X 1⊕X 2 ⊕…⊕X m C K (M ) = E K [△(M )]–其中⊕为异或操作,E 为ECB 工作模式的DES 算法•则:–密钥长度为56比特,MAC 长度为64比特,–攻击者至少需要256 次加密来决定密钥K 。
•设M’= (Y 1||Y 2||…|| Y m ),–其中Y 1, Y 2,…,Y m-1是替换X 1, X 2 ,…, X m -1的任意值,而Y m = Y 1⊕Y 2 ⊕…⊕Y m -1 ⊕△(M ) –则C K (M’)= E K [△(M ′)] = E K [Y 1⊕Y 2 ⊕…⊕Y m -1 ⊕Y m ]= E K [Y 1⊕Y 2 ⊕…⊕Y m -1 ⊕Y 1⊕Y 2 ⊕…⊕Y m -1 ⊕△(M )]= E K [△(M )]•这时消息M’和MAC =C K (M ) = E K [△(M )]是一对可被接收者认证的消息。