当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby KDF模块用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 KDF模块。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。