當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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模塊。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。