暗号学の基礎のPBKDF 2アルゴリズム

1441 ワード

サイトログインにはユーザー名とパスワードを入力する必要がありますが、パスワードは個人機密データに属し、パスワードの一方向ハッシュ値のみを保存する必要があります.簡単なハッシュ値ではレインボーテーブル攻撃を防ぐことができず,パスワードベースの鍵派生アルゴリズムPBKDF 2を用いてこの問題を解決できる.
PBKDF 2には以下の入力が必要です.
  • ハッシュアルゴリズム
  • パスワード
  • 塩値
  • 反復回数
  • ハッシュアルゴリズム:SHA 256あるいはもっと安全なアルゴリズムのパスワードを選ぶことを提案します:ユーザーの入力値の塩の値:最低8バイトを提案して、安全な乱数の反復回数を使うべきです:10000回ぐらい反復することを提案して、性能に対して特殊な要求の1000回反復することができます
    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