加密和认证
-
加密:解决明文传输的问题
-
认证:解决消息来源是否可靠的问题
- 可使用 消息认证码 解决。
-
加密和认证是完全独立的概念。加密消息不能保证其内容不被改变。认证一条消息不能保证数据加密。在使用这两个工具设计系统和协议时,加密和认证的顺序也是灵活的。
分组密码(block cipher)
-
加密固定长度的数据-明文和密文等长
-
分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
-
设计原则:
- 扩散(diffusion)和扰乱(confusion)
- 扩散的目的是让明文中的单个数字影响密文中的多个数字,从而使明文的统计特征在密文中消失,相当于明文的统计结构被扩散
- 扰乱是指让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。扰乱可以通过各种代换算法实现。
-
设计安全的分组加密算法,需要考虑对现有密码分析方法的抵抗,如差分分析、线性分析等,还需要考虑密码安全强度的稳定性。此外,用软件实现的分组加密要保证每个组的长度适合软件编程(如8、16、32……),尽量避免位置换操作,以及使用加法、乘法、移位等处理器提供的标准指令;从硬件实现的角度,加密和解密要在同一个器件上都可以实现,即加密解密硬件实现的相似性
消息认证码(message authentication code)
- 密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。
- 也叫带密钥的hash函数
- 流程:在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证
- 此图说明了即能保证完整性也能保证信源。MAC前后计算一致说明了数据完整。密钥(如果不泄漏)可保证信源可靠。
- 如果密钥安全性不可保证,可只能保证完整性,不可保证信源。
- DES\AES
- 对于分组密码,一般利用其“设计模式”参与系统的设计。
消息认证码之 HMAC
-
概念
- HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写。一种基于Hash函数和密钥进行消息认证的方法。它可以与任何迭代散列函数捆绑使用。
- 目的其实和MAC一样,其实就是一种具体实现 MAC 技术。一种被当前广泛使用的MAC技术。
- Hman 主要应用于认证(完整性认证和信源可靠性认证)
- hmac和mac虽然都可以带有key,但是安全性是hamc好,因为传统的hash(message+key)是会被长度扩展攻击的。容易受到“碰撞攻击”,hmac具备抵抗这一攻击的性质
- HMAC避免了将密钥K泄漏给攻击者的密钥恢复攻击,避免了攻击者无需与系统交互即可完成的攻击。HMAC的安全性仍为“n/2”,n 是结果的长度。但HMAC的构造使得攻击需要与系统进行 “n/2”次交互,而不是计算机上“n/2”次计算。更安全。
-
HMAC 算法
- HMAC运算利用hash算法,以一个消息M和一个密钥K作为输入,生成一个定长的消息摘要作为输出。HMAC算法可以使用已有的任何Hash函数,关键问题是如何使用密钥。(HAMC算法本身的设计理念)
- HMAC的密钥长度可以是任意大小,如果小于n(hash输出值的大小),那么将会消弱算法安全的强度。
- K为密钥,K' 是从原始密钥K导出的另一个秘密密钥(如果K短于散列函数的输入块大小,则向右填充(Padding)零;如果比该块大小更长,则对K进行散列)
- opad 是外部填充
- ipad 是内部填充
- Note: 我的理解外部填充,就是“ opad 是外部填充”
-
补充
散列函数
-
一类将任意长度的输入位(或字节)转换为 固定长度的输出的函数。
-
散列函数有时又称为消息摘要函数,其散列结果也称作 摘要 或者 指纹。
-
术语“散列函数”也用于称呼访问散列表(一种数据结构)的映射函数。这种散列函数与密码学中的散列函数有一些相似的性质,但两者有很大的不同。密码学中的散列函数有特殊的安全性质和要求,而散列表的映射函数并不需要这些安全性质。
-
基本要求
- 散列函数是 单向函数
-
常见性质
- 抗碰撞性:对于m1 和 m2 , h(m1)=h(m2)的可能 ■ 因为输入是无限的,输出是有限的,任何一个散列函数都有无穷个碰撞 ■ 抗碰撞性要求碰撞存在,但很难被找到 ■ 理想要求:散列函数和随机映射不可分
-
散列函数没有密钥,不存在穷举密钥这样的 “通用攻击”。散列函数一个重要的参数是输出长度。正对散列函数的通用攻击有,“生日攻击”,“原像”攻击。
- 生日攻击https://zhuanlan.zhihu.com/p/379077249
-
实际的散列函数:
- SHA系列:SHA-1\SHA-224\SHA-256\SHA-512;MD5
- 几乎所有散列函数都是迭代函数
数字摘要/消息摘要(Message Digest/Digital Digest )~“生成指纹”
- 任意长度输入->固定长度输出
- 相同输入->相同结果
- SHA-MD5
- 数字
数字摘要VS消息认证码?
- 数字摘要是一种技术工具;更high level的General Construction。
- 消息认证码,当然也是一种工具,一般会有具体的contex,即解决消息通信过程的数据完整性和可靠信源认证问题。
- 使用消息认证码,计算MAC的过程,当然可以看作是原数据的一个“摘要”~指纹。符合消息摘要的定义和实现目的就可以。但是,一般用于生成数字摘要的的hash函数,都要求是非常块的。
- 为什么强调了“符合消息摘要的定义和实现目的”呢?实现“消息认证码”的contex的要求,即数据完整性和可靠的信源,有很多的实现方式,比如同态密码,蒙特卡洛树、skiplist等认证结构,不一定要全部message参加计算。但是数字摘要,一般是Hash(全部message)。---个人的理解
数字签名
-
数字签名是消息认证码的公钥等价形式。是非对称密钥和数字摘要技术的应用
- 即用非对称密码设计的消息认证码
-
使用非对称密码,任何人只要使用sender的公钥,就可以验证消息是否来自该sender 机制
- 使用发送方Alice和接收方Bob都约定的哈希函数(公开的),计算消息的摘要。
- 发送方用自己的私钥对摘要加密,结果记为,简称为 签名。将数据m(注,加密不加密是独立的一回事)和签名发送给Bob。Bob使用Alice的公钥解密签名,结果和自己用收到的数据计算的摘要比对。
- 可以实现 认证-信源确认 和 数据完整性。
-
仔细看这个机制,就可以理解为什么叫“消息认证码”的等价形式了。 因为,略...(“消息认证码”使用对称密钥实现时,安全性基于hash函数的密钥)
-
数字签名为什么要先用一个公开的哈希函数计算摘要呢?因为非对称密钥加密解密的速度是很慢的。
消息加密
- 略,即加密
引用参考
- 百度百科,维基百科。
- 《密码工程-原理和应用》一书
评论
1 / 1