暗号学の基礎のPBKDF 2アルゴリズム
1441 ワード
サイトログインにはユーザー名とパスワードを入力する必要がありますが、パスワードは個人機密データに属し、パスワードの一方向ハッシュ値のみを保存する必要があります.簡単なハッシュ値ではレインボーテーブル攻撃を防ぐことができず,パスワードベースの鍵派生アルゴリズムPBKDF 2を用いてこの問題を解決できる.
PBKDF 2には以下の入力が必要です.ハッシュアルゴリズム パスワード 塩値 反復回数 ハッシュアルゴリズム:SHA 256あるいはもっと安全なアルゴリズムのパスワードを選ぶことを提案します:ユーザーの入力値の塩の値:最低8バイトを提案して、安全な乱数の反復回数を使うべきです:10000回ぐらい反復することを提案して、性能に対して特殊な要求の1000回反復することができます
PBKDF 2とdk_lenパラメータは、通常は使用できませんが、本稿では省略します.
次はPythonのデモコードです.
関連記事
暗号学の基礎シリーズ
参考文献
[NIST] Recommendation for Password-Based Key Derivation: Part 1: Storage Applications
PBKDF 2には以下の入力が必要です.
PBKDF 2とdk_lenパラメータは、通常は使用できませんが、本稿では省略します.
次はPythonのデモコードです.
# Python 3.4+
import hashlib, binascii
def retrieve_data_from_database(user):
""" PBKDF2 ,
"""
data = {'yang': b'e75dfdc937acc5b7fccb2bc4237f75248c5bbe01797f70049be8abf43e55be44'}
return data[user]
def validate_password(user, password):
"""
password PBKDF2 PBKDF2 ,
"""
salt = b'\x7d\xef\x87\xd5\xf8\xbb\xff\xfc\x80\x91\x06\x91\xfd\xfc\xed\x69'
dk = hashlib.pbkdf2_hmac('sha256', password, salt, 10000)
saved_data = retrieve_data_from_database(user)
return binascii.hexlify(dk) == saved_data
def login(user, password):
"""
"""
if not validate_password(user, password):
print('user or password error')
#
関連記事
暗号学の基礎シリーズ
参考文献
[NIST] Recommendation for Password-Based Key Derivation: Part 1: Storage Applications