HMAC和密钥导出(HMAC and Key Derivation)
简单地计算hash_func(key+msg)以获得MAC(消息认证码)被认为是不安全的。建议改用HMAC算法,例如HMAC-SHA256或HMAC-SHA3-512或其他安全MAC算法。
什么是HMAC?
HMAC= Hash-based Message Authentication Code (MAC code,使用加密哈希函数计算):
HMAC(key, msg, hash_func) -> hash
结果MAC代码是混合了密钥的消息散列。它具有哈希的密码特性:不可逆、抗冲突等。
hash_func可以是任何加密哈希函数,如SHA-256、SHA-512、RIPEMD-160、SHA3-256或BLAKE2s。
HMAC用于消息真实性、消息完整性,有时用于密钥推导。
密钥导出函数(key derivation function,KDF)
密钥导出函数(KDF)是将可变长度密码转换为固定长度密钥(位序列)的函数:
function(password) -> key
作为一个非常简单的KDF函数,我们可以使用SHA256:只需对密码进行哈希。不要这样做,因为这是不安全的。简单哈希容易受到字典攻击。
作为更复杂的KDF函数,您可以通过使用称为“salt”的随机值计算HMAC(salt、msg、SHA256)来派生密码,该值与派生密钥一起存储,稍后用于从密码中再次派生同一密钥。
使用HKDF(基于HMAC的密钥推导)进行密钥推导的安全性低于现代KDF,因此专家建议使用更强的密钥推导函数,如PBKDF2、Bcrypt、Scrypt和Argon2。我们将在后面讨论所有这些KDF函数。
HMAC 计算- 举例
要更好地了解HMAC及其计算方法,请尝试以下在线工具:Free Online HMAC Generator / Checker Tool (MD5, SHA-256, SHA-512) - FreeFormatter.com
计算HMAC('sample message', '12345', 'SHA256'):
HMAC('sample message', '12345', 'SHA256') ='ee40ca7bc90df844d2f5b5667b27361a2350fad99352d8a6ce061c69e41e5d32'
在Python中,我们可以按如下方式计算HMAC代码(使用hashlib和hmac库):
import hashlib, hmac, binasciidef hmac_sha256(key, msg):return hmac.new(key, msg, hashlib.sha256).digest()key = b"12345"
msg = b"sample message"
print(binascii.hexlify(hmac_sha256(key, msg)))
运行上面的代码示例:***HMAC SHA256 Examples in Python - Python Repl - Replit
上面的代码将计算并打印预期的HMAC代码(如我们前面的示例中所示):
ee40ca7bc90df844d2f5b5667b27361a2350fad99352d8a6ce061c69e41e5d32
HMAC和密钥导出(HMAC and Key Derivation)相关推荐
- RFC5869翻译 HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
HMAC-based Extract-and-Expand Key Derivation Function (HKDF) Abstract 该文档描述了一个简单的基于HMAC的密钥导出方法,它可以用来 ...
- C语言KDF密钥源代码,区块链中的数学-SM2算法与KDF密钥导出函数
本节讲了SM2算法的KDF函数,从一般用途到SM2特定实现 ## 写在前面 上一节说了[sm2概述和加密过程](https://learnblockchain.cn/article/1516)实现, ...
- 一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD) 蓝牙CTKD是蓝牙4.2版本引入的一种交叉传输密钥派生的安全机制,全称 Cross-tra ...
- 【量子通信到底是怎么回事?】量子通信的概念(光的偏振特性)、量子密钥分发(quantum key distribution,QKD)
文章目录 前言 I .量子通信的概念 1.1 是否存在一种密码,从理论上讲是无法破译的? 1.2 量子通信的概念 1.3 光的偏振特性 1.4 光线的振动方向和最后的光栅(就是那个起过滤作用的栅栏)既 ...
- SM2使用的密钥导出函数
SM2中使用了一种KDF,可以参见SM2标准文档第4部分公钥加密算法的5.4.3节密钥派生函数. 函数:K = KDF (Z, klen) 功能:SM2使用的的密钥导出函数 输入参数: Z:KDF所需 ...
- SM9使用的密钥导出函数
SM9使用的密钥导出函数是H1和H2函数的前四步,详情参见在第2部分 数字签名算法 5.4.2节密码杂凑函数. 两个密钥导出函数的差异在SM3杂凑时的首字节不同,H1和H2分别使用0x01和0x02作 ...
- Password-Based Key Derivation Functions (PBKDF)
概述 KDF是一种确定性算法,用于从秘密值(如密码)派生加密密钥材料.家族中的每个PBKDF由选择的伪随机函数(PRF)和固定的迭代计数(记为C)定义.执行PBKDF的输入包括密码(记为P).盐(记为 ...
- Authenticator 备份密钥/导出
在各大互联网平台中对于账户的安全性不容小嘘,gmail v2ex 这些在使用的时候为了提高安全性经常会推荐绑定 google auth,用户登录或者其他操作的时候一个 token验证. 原理 Goog ...
- git提示(拷贝密钥问题)“Load key /home/devid/.ssh/id_rsa: bad permissions”
今天在Linux虚拟机系统中将windows上的.ssh文件夹直接拷贝进去,并测试github的连通性 ssh -T git@github.com 却提示 devid@Linux ~/workspac ...
最新文章
- 每周算法讲堂 floyd
- 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
- 高并发C/S的TCP版本golang实现
- 从 C++ 到 Objective-C 的快速指南 【已翻译100%】
- 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
- CSS具有最高优先级 !important
- redis安装、配置和启动
- WebService开发常用功能详解
- SqlAlchemy ORM
- matlab中的方波信号图片_哈工大、哈工程MATLAB被禁用,这个国产软件号称可替代!...
- 【SPPS学习一】 SPSS-26软件下载与安装步骤详解
- Android编译预制过高版本app导致编译错误解决
- 机器学习算法(十):线性回归之最小二乘法
- 【XSY3331】东非大裂谷(结论,DP)
- 医学病理图片(SVS格式)的格式转换与显示——python实现
- 计算机二级wps知识点,计算机二级MS office和WPS office如何备考?
- 浏览器、html、css面试题(一)
- 数据备份与数据还原 ----数据库的异地容灾策略
- Vue el-input 使用伪元素插入间隔符
- BUUCTF 每天10道Misc Day4