密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC

这篇具有很好参考价值的文章主要介绍了密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SHA-256

SHA-2是广泛应用的哈希函数,并且有不同的版本,这篇博客主要介绍SHA-256。

SHA-256算法满足了哈希函数的三个安全属性:

  • 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。
  • 抗第二原像性 - 给定一个输入和它的哈希值,无法找到一个不同于该输入的新输入,使得这两个输入产生一样的哈希值。
  • 抗碰撞性 - 这个性质保证不能够产生哈希值相同的两个不同的输入。

SHA-2是一种采用Merkle–Damgård结构来构造的哈希函数。

密码学学习笔记(十三):哈希函数 - Merkle–Damgård结构_kingofyb的博客-CSDN博客

首先,我们对需要进行哈希运算的输入做填充,然后将填充后的输入划分为等长的分组,每个分组的长度等于压缩函数的输入长度。SHA-256算法输入的分组大小为512比特。

然后,将压缩函数应用于消息的所有分组,在每次迭代过程中,都将上一轮的输出作为压缩函数的第二个输入参数,而将消息的某个分组作为它的第一个输入参数。将压缩函数最终的输出作为消息的摘要。

在第一次调用压缩函数时,它的第二个参数通常是固定的,且标准文件中将其指定为特定的值。具体来说,SHA-256使用第一个素数的平方根来生成这个初始值。

MAC 

什么是MAC消息认证码?

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC,密码学与计算机安全,密码学,学习,笔记

密码学学习笔记(三):MAC - 消息认证码_mac消息认证码_kingofyb的博客-CSDN博客

HMAC(Hash-based MAC)

RFC 2104: HMAC: Keyed-Hashing for Message Authentication (rfc-editor.org)

由于长度扩展攻击,SHA-2不能被直接用来计算秘密消息的哈希值。HMAC可以将哈希函数转换为密钥算法。

  1. 由主密钥生成两个密钥:k1 = k ⊕ ipad,k2 = k ⊕ opad。其中,ipad(内部填充)以及opad(外部填充)是常量,⊕表示异或操作。
  2. 将密钥k1和message串联在一起,计算串联结果的哈希值。
  3. 将密钥k2与第2步的输出串联在一起后,再次计算串联结果的哈希值。
  4. 将第3步输出的哈希值作为最终的认证标签。

HMAC的好处在于,其设计者可以证明嵌入的散列函数的强度与HMAC的强度之间的联系。如果嵌入的散列函数的安全受到威胁,只需要用更安全的散列函数替换嵌入的散列函数,这样仍可以保持HMAC的安全性。

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC,密码学与计算机安全,密码学,学习,笔记

H = 嵌入的散列函数比如SHA。

M = HMAC的消息输入,包括嵌入到散列函数中定义的填充位。

Yi = M的第i个分组, 0≤i≤L-1。

L = M中的分组数。

b = 每一分组中所含的位数。

n = 嵌入的散列函数所产生的散列码长度

K = 秘密密钥。如果密钥的长度大于b,则将密钥作为散列函数的输入来产生一个n位数的密钥。建议密钥长度≥n。

K+ = 为使K为b位长而在K左边填充0后所得的结果。

ipad = 00110110(十六进制36)重复b/8次。

opad = 01011100(十六进制5C)重复b/8次。

HMAC(K,M) = H[(K+ ⊕ opad) || H[(K+ ⊕ ipad) || M]]

NMAC(Nested MAC)

NMAC算法(Nested MAC)类似于之前描述的CBC-MAC算法。它使用稍微不同的伪随机函数F。函数F返回的数字是密钥的正确值。CBC-MAC可以看我之前的博客。

密码学学习笔记(三):MAC - 消息认证码_mac消息认证码_kingofyb的博客-CSDN博客

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC,密码学与计算机安全,密码学,学习,笔记

与CBC-MAC的一样,在对最后的数据块进行加密之后,使用第二秘密加密密钥对结果进行一次附加加密。由于最后一个数据块的先前加密结果由与密钥相同数量的比特组成,因此应附加额外的比特序列,以确保结果与数据块具有相同的大小。NMAC通常用于数据块长度远大于密钥大小的系统。 

如果没有算法的最后一步(没有使用第二个密钥进行加密),入侵者将能够使用正确计算的身份验证码将任意数量的块附加到拦截的消息中。然后,他可以计算一个新的身份验证码,并将其附加到修改后的消息中。作为第一个新添加的函数F的输入,攻击者将使用原始消息的原始身份验证代码。

KMAC(KECCAK MAC)

KMAC使用SHA-3-256(key||message)。KMAC算法使用了CSHAKE来构造消息认证码算法,其中cSHAKE是SHAKE可扩展输出函数的自定义版本。KMAC算法对密钥、输入以及输出的长度进行编码,并将其作为cSHAKE的输入。文章来源地址https://www.toymoban.com/news/detail-672741.html

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC,密码学与计算机安全,密码学,学习,笔记
KMAC算法只是cSHAKE函数的包装器。

到了这里,关于密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 密码学学习笔记(十二):压缩函数 - Davies–Meyer结构

    密码学中压缩函数是指将输入的任意长度消息压缩为固定长度输出的函数。压缩函数以两个特定长度的数据为输入,产生与其中一个输入大小相同的输出。简单来说就是它接受一些较长的数据,输出更短的数据。 压缩函数接收长度为X和Y的两个不同输入,并生成长度为X或Y的

    2024年02月16日
    浏览(15)
  • 密码学学习笔记(十七 ):Edwards曲线数字签名算法 - edDSA

    Edwards曲线数字签名算法(Edwards-curve Digital Signature Alogorithm, edDSA)由Daniel J. Bernstein等人在2011年提出,它是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。 EdDSA的一个特殊之处在于,该方案不要求每次签名都是用全新的随机数,而且该算法是确定性的。 EdDSA不直

    2024年02月16日
    浏览(19)
  • 密码学学习笔记(九):Public-Key Encryption - 公钥加密2

    如果我们知道𝑝, 𝑞 (即𝑁 = 𝑝𝑞) 我们可以在mod N中进行反幂运算。 比如: 我们有一个单向陷门函数,非常适合加密。  取两个大素数,然后N = 𝑝𝑞, 然后挑选一对𝑒, 𝑑  加密:给定𝑃𝐾 = (𝑁, 𝑒) 和一条消息𝑚 在里面 计算密文𝑐 :  解密:给定一个密文𝑐

    2024年02月13日
    浏览(19)
  • 密码学学习笔记(二):对称加密(二) IND-CPA、IND-CCA安全以及分组密码操作模式

    书接上篇笔记,假设声称对手可以在给定我们方案的密文的情况下找出明文的第一位。我们如何检验这一说法? 通过加密以0或1开头的明文生成密文 将密文交给对手,等待对手决定是哪种情况,检查决定是否正确 不可区分性:  如果我们想模拟任何泄漏怎么办? 为了模拟任

    2024年02月04日
    浏览(22)
  • CRYPTO现代密码学学习

    简单介绍 :RC4加密算法是一种对称加密算法,加密和解密使用同一个函数 初始化分为以下几个步骤 初始化存储0-255字节的Sbox(其实就是一个数组) 填充key到256个字节数组中称为Tbox(你输入的key不满256个字节则初始化到256个字节) 交换s[i]与s[j] i 从0开始一直到255下标结束. j是 s

    2024年02月03日
    浏览(35)
  • 图形学学习笔记1:基础变换矩阵

    变换矩阵 (Transformation Marices) ,一切物体的缩放,旋转,位移,都可以通过变换矩阵作用得到,在光栅化中会用到,同时在投影 (projection) 变换也有很多应用 将如下图所示的简单矩阵乘法定义为对向量的线性变换。 最简单的缩放变换 ,如图,即除了(0,0)不变之外都乘以某个系

    2024年03月12日
    浏览(23)
  • 前端密码加密 —— bcrypt、MD5、SHA-256、盐

     🐔 前期回顾 悄悄告诉你:前端如何获取本机IP,轻松一步开启网络探秘之旅_彩色之外的博客-CSDN博客 前端获取 本机 IP 教程 https://blog.csdn.net/m0_57904695/article/details/131855907?spm=1001.2014.3001.5501           在前端密码加密方案中,bcrypt与SHA-256都是常见的加密算法,它们各有优劣

    2024年02月05日
    浏览(26)
  • C++学习笔记(二十一)

    简介: 所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器,底层结构是用二叉树实现的 set和multiset的区别: set不允许容器中有重复的元素,multiset允许容器中有重复的元素 构造: setT st;        // 默认构造函数 set(const set st);        // 拷贝构造函数 赋值:

    2024年01月18日
    浏览(34)
  • Solidity Keccak256与SHA3-256

    SHA3由Keccak标准化而来,在很多场合下Keccak和SHA3是同义词,但在2015年8月SHA3最终完成标准化时,NIST调整了填充算法: SHA3-256(M) = KECCAK [512] (M || 01, 256) 。所以标准的NIST-SHA3就和Keccak计算的结果不一样。 如对空字符串进行Keccak256 和 SHA3-256结果各不相同: 以太坊在开发的时候SH

    2024年02月11日
    浏览(39)
  • Android 获取应用sha1和sha256

    在 Android 应用开发中,SHA-1(Secure Hash Algorithm 1)值是一种哈希算法,常用于生成应用的数字签名。这个数字签名用于验证应用的身份,并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的步骤: 生成密钥库(KeyStore): 首先,你需要创建一个密钥库

    2024年02月07日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包