本文简要介绍ruby语言中 OpenSSL::KDF模块
的用法。
提供各种 KDF 的函数( key 派生函数)。
KDF
通常用于安全地派生任意长度的对称 key ,以便从密码中与 OpenSSL::Cipher
一起使用。另一个用例是存储密码:由于能够通过增加迭代次数来调整计算工作量,因此可以人为地减慢计算速度,以使可能的攻击不可行。
目前, OpenSSL::KDF
提供以下 KDF 的实现:
-
PKCS #5 PBKDF2(基于密码的 key 派生函数 2)与
HMAC
组合 -
scrypt
-
HKDF
例子
为 Cipher
生成 128 位 key (例如 AES)
pass = "secret"
salt = OpenSSL::Random.random_bytes(16)
iter = 20_000
key_len = 16
key = OpenSSL::KDF.pbkdf2_hmac(pass, salt: salt, iterations: iter,
length: key_len, hash: "sha1")
存储密码
pass = "secret"
# store this with the generated value
salt = OpenSSL::Random.random_bytes(16)
iter = 20_000
hash = OpenSSL::Digest.new('SHA256')
len = hash.digest_length
# the final value to be stored
value = OpenSSL::KDF.pbkdf2_hmac(pass, salt: salt, iterations: iter,
length: len, hash: hash)
检查密码的重要注意事项
在将用户提供的密码与之前存储的值进行比较时,一个常见的错误是使用 “==” 比较这两个值。通常,“==” short-circuits 在评估中,因此容易受到定时攻击。正确的方法是使用在比较两个值时始终花费相同时间的方法,从而不会将任何信息泄露给潜在的攻击者。为此,请使用 OpenSSL.fixed_length_secure_compare
。
相关用法
- Ruby KDF.scrypt用法及代码示例
- Ruby KDF.hkdf用法及代码示例
- Ruby Kernel.local_variables用法及代码示例
- Ruby Kernel.Integer用法及代码示例
- Ruby Kernel.binding用法及代码示例
- Ruby Kernel.frozen?用法及代码示例
- Ruby Kernel.`cmd`用法及代码示例
- Ruby Kernel.autoload用法及代码示例
- Ruby Kernel.loop用法及代码示例
- Ruby Kernel.Hash用法及代码示例
- Ruby Kernel.caller用法及代码示例
- Ruby Kernel.set_trace_func用法及代码示例
- Ruby Kernel.exit!用法及代码示例
- Ruby Kernel.trap用法及代码示例
- Ruby Kernel.String用法及代码示例
- Ruby Kernel.select用法及代码示例
- Ruby Kernel.syscall用法及代码示例
- Ruby Kernel.then用法及代码示例
- Ruby Kernel.sprintf用法及代码示例
- Ruby Kernel.Pathname用法及代码示例
- Ruby Kernel.srand用法及代码示例
- Ruby Kernel.yield_self用法及代码示例
- Ruby Kernel.BigDecimal用法及代码示例
- Ruby Kernel.raise用法及代码示例
- Ruby Kernel.test用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 KDF模块。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。