常见密码学工具

加密和认证

  • 加密:解决明文传输的问题

  • 认证:解决消息来源是否可靠的问题

    • 可使用 消息认证码 解决。
  • 加密和认证是完全独立的概念。加密消息不能保证其内容不被改变。认证一条消息不能保证数据加密。在使用这两个工具设计系统和协议时,加密和认证的顺序也是灵活的。

分组密码(block cipher)

  • 加密固定长度的数据-明文和密文等长

  • 分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

  • 设计原则:

    • 扩散(diffusion)和扰乱(confusion)
    • 扩散的目的是让明文中的单个数字影响密文中的多个数字,从而使明文的统计特征在密文中消失,相当于明文的统计结构被扩散
    • 扰乱是指让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。扰乱可以通过各种代换算法实现。
  • 设计安全的分组加密算法,需要考虑对现有密码分析方法的抵抗,如差分分析、线性分析等,还需要考虑密码安全强度的稳定性。此外,用软件实现的分组加密要保证每个组的长度适合软件编程(如8、16、32……),尽量避免位置换操作,以及使用加法、乘法、移位等处理器提供的标准指令;从硬件实现的角度,加密和解密要在同一个器件上都可以实现,即加密解密硬件实现的相似性

消息认证码(message authentication code)

  • 密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。
  • 也叫带密钥的hash函数
  • 流程:在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证

MAC

  • 此图说明了即能保证完整性也能保证信源。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输出值的大小),那么将会消弱算法安全的强度。 HMAC构造
    • K为密钥,K' 是从原始密钥K导出的另一个秘密密钥(如果K短于散列函数的输入块大小,则向右填充(Padding)零;如果比该块大小更长,则对K进行散列)
    • opad 是外部填充
    • ipad 是内部填充
    • Note: 我的理解外部填充,就是“ opad 是外部填充”
  • 补充 HMAC

散列函数

  • 一类将任意长度的输入位(或字节)转换为 固定长度的输出的函数。

  • 散列函数有时又称为消息摘要函数,其散列结果也称作 摘要 或者 指纹。

  • 术语“散列函数”也用于称呼访问散列表(一种数据结构)的映射函数。这种散列函数与密码学中的散列函数有一些相似的性质,但两者有很大的不同。密码学中的散列函数有特殊的安全性质和要求,而散列表的映射函数并不需要这些安全性质。

  • 基本要求

    • 散列函数是 单向函数
  • 常见性质

    • 抗碰撞性:对于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函数的密钥)

  • 数字签名为什么要先用一个公开的哈希函数计算摘要呢?因为非对称密钥加密解密的速度是很慢的。

消息加密

  • 略,即加密

引用参考

  • 百度百科,维基百科。
  • 《密码工程-原理和应用》一书
end
  • 作者:(联系作者)
  • 发表时间:2022-01-02 00:37
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论

    joey
    栈主
    今天是元旦,早上去深圳湾看日出了,顺路回来搞下博客。舒服
    danJ  回复 joey
    joey元旦快乐!2022心想事成!



    1 / 1