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