做外贸学习网站,公司做网站的费属于广告费么,做打牌的网站怎么办,网站开发免责说明1. 引言
OpenSSL新发布的3.20版本中#xff0c;引入了一些新特性#xff0c;包括#xff1a;
post-quantum方法Brainpool曲线QUICArgon2#xff1a;Argon2 是一种慢哈希函数#xff0c;在 2015 年获得 Password Hashing Competition 冠军#xff0c;利用大量内存计算抵…1. 引言
OpenSSL新发布的3.20版本中引入了一些新特性包括
post-quantum方法Brainpool曲线QUICArgon2Argon2 是一种慢哈希函数在 2015 年获得 Password Hashing Competition 冠军利用大量内存计算抵御 GPU 和其他定制硬件的破解提高哈希结果的安全性。等等 Argon2开源实现见https://github.com/P-H-C/phc-winner-argon2C
Argon2: the memory-hard function for password hashing and other applications 由Alex Biryukov、Daniel Dinu 和 Dmitry Khovratovich 设计为密钥派生函数KDFKey Derivation Function可用于
创建密码的哈希值基于密码创建加密密钥2015年7月获得 Password Hashing Competition 冠军可抵抗GPU和侧道攻击。
Argon2利用大量内存和大量计算资源进行 Hash 计算有三个变种
1Argon2iArgon2i使用独立于数据的内存访问这是密码散列和基于密码的密钥派生的首选方法但速度较慢因为它会在内存中进行更多的传递以防止受到折衷攻击。2Argon2dArgon2d是比较快的被用于数据依赖的内存访问这使得它对GPU破解攻击具有很高的抵抗力适用于不受侧信道攻击威胁的应用程序如加密货币。3Argon2idArgon2id是Argon2i和Argon2d的混合体使用依赖于数据和独立于数据的内存访问的组合这使Argon2i能够抵抗侧通道缓存计时攻击并使Argon2d能够抵抗GPU破解攻击。
Argon2i、Argon2d和Argon2id之间通过参数区分
A time cost, which defines the amount of computation realized and therefore the execution time, given in number of iterationsA memory cost, which defines the memory usage, given in kibibytesA parallelism degree, which defines the number of parallel threads
2. Password
Password 是 Web 服务主要的认证方式之一。
Password 一般以 Hash 后的形式存储在数据库中。这些数据库如果被拖库使用 Dictionary Attack 可以轻松破解因为他们的熵很低。相同的密码会被不同的用户使用或同一个用户在不同系统中使用。
为了解决这个问题设计者在密码 Hash 的过程里加入了 salt。 Dictionary Attack 一个字典文件储存了单词、短语、常用密码和他们 hash 后结果。将密码与 hash 结果对比就能破解[2]。 Brute Force Attack 尝试每一个给定长度下的字符组合效率很低。 加盐已经可以解决大部分问题但无法阻止 Brute Force Attack借助 GPU、FPGA、ASIC 等定制硬件可以非常低成本的进行 Hash 计算。此外如果 salt 和 password 被一起被拖库甚至代码会使得破解成本更加低。
这里核心的问题是Hash 方法使用的是无内存计算的而 GPU、ASIC 等硬件可以让无内存计算变得非常高效。但是当一个 Hash 方法需要用到一大块内存去计算的时候这些硬件就会束手无策。所以 memory-hard hash function 开始被设计和使用。
Memory-hard hash function 也可以被用在加密货币的工作量证明中用来压制 GPU 和 ASIC 在加密货币中的滥用。例如 scrypt 被用作莱特币的工作量证明算法。
当今8个小写字母的密码可在10秒内暴力破解。若使用9个小写字母的密码则可在10分钟内破解。若只是在密码末尾添加一个数字或让首字母大写对破解速度几乎无影响。具体见Calculate Passwords。
Argon2是抗GPU攻击的同时具有内存开销。其开销包括
执行时长CPU开销所需内存内存开销degree of parallelism并行度以 p p p来表示
Argon2的参数有
Password §: Defines the password bytes to be hashedSalt (S): Defines the bytes to be used for salting.Parallelism §: Defines the number of threads that are required for the parallelism.TagLength (T): Define the number of bytes to return for the hash.MemorySizeKB (m): Amount of memory (in KB) to use.
具体的bench性能为【其中 n n n用于time cost p p p用于parallelism m m m为message】 由上图可发现
当 n 128 n128 n128时计算哈希值用时为0.105秒即每秒可做10次哈希运算。当 n 8192 n8192 n8192时计算哈希值用时为5.78秒这个时间对用户登录来说有点过长。
实际使用时应选择哈希计算时长合理且抵抗攻击足够强健的参数。
OpenSSL Argon2指令示例
Command: openssl kdf -keylen 24 -kdfopt pass:Hello -kdfopt salt:NaCl1234 -kdfopt iter:1 -kdfopt memcost:8 ARGON2IPassword: Hello
KDF: ARGON2
Salt: NaCl1234
Length: 24
Iterations: 1
Memcost: 8
-----------------
ARGON2I
7E:C8:58:7D:85:96:F6:9C:5A:13:F3:78:27:7C:DC:D5:FA:28:FF:B4:EC:C8:2F:00
ARGON2D
BB:13:EE:29:A3:38:95:D4:C5:81:5A:1B:0B:05:48:0E:22:53:F1:3F:13:12:16:F7
ARGON2ID
07:65:6A:7F:16:81:C8:85:39:68:0E:F4:64:92:2A:38:CE:7E:71:83:DE:72:39:0D参考资料
[1] Prof Bill Buchanan OBE 2023年11月博客 An Early Cybersecurity Christmas Present From OpenSSL: Some Argon [2] Argon2算法简介