crypt — Unixパスワードをチェックする関数—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/crypt
移動先:案内検索

crypt —Unixパスワードをチェックする機能

ソースコード: :source: `Lib / crypt.py`



このモジュールは、 crypt(3)ルーチンへのインターフェイスを実装します。これは、変更されたDESアルゴリズムに基づく一方向ハッシュ関数です。 詳細については、Unixのマニュアルページを参照してください。 考えられる用途には、実際のパスワードを保存せずにパスワードを確認できるようにハッシュされたパスワードを保存することや、辞書を使用してUnixパスワードを解読しようとすることが含まれます。

このモジュールの動作は、実行中のシステムでの crypt(3)ルーチンの実際の実装に依存することに注意してください。 したがって、現在の実装で使用可能な拡張機能は、このモジュールでも使用できます。

ハッシュメソッド

バージョン3.3の新機能。


crypt モジュールは、ハッシュメソッドのリストを定義します(すべてのメソッドがすべてのプラットフォームで使用できるわけではありません)。

crypt.METHOD_SHA512
SHA-512ハッシュ関数に基づく16文字のソルトと86文字のハッシュを使用するModularCryptFormatメソッド。 これが最強の方法です。
crypt.METHOD_SHA256
SHA-256ハッシュ関数に基づく16文字のソルトと43文字のハッシュを使用する別のModularCryptFormatメソッド。
crypt.METHOD_BLOWFISH

Blowfish暗号に基づく22文字のソルトと31文字のハッシュを使用する別のModularCryptFormatメソッド。

バージョン3.7の新機能。

crypt.METHOD_MD5
MD5ハッシュ関数に基づく8文字のソルトと22文字のハッシュを使用する別のModularCryptFormatメソッド。
crypt.METHOD_CRYPT
2文字のソルトと13文字のハッシュを使用する従来の方法。 これは最も弱い方法です。


モジュール属性

バージョン3.3の新機能。


crypt.methods
crypt.METHOD_*オブジェクトとして使用可能なパスワードハッシュアルゴリズムのリスト。 このリストは、最も強いものから最も弱いものへとソートされています。


モジュール機能

crypt モジュールは、次の関数を定義します。

crypt.crypt(word, salt=None)

word は通常、プロンプトまたはグラフィカルインターフェイスで入力されたユーザーのパスワードになります。 オプションの salt は、 mksalt()から返される文字列、crypt.METHOD_*値の1つ(すべてのプラットフォームですべてが使用できるわけではありません)、またはこの関数によって返される、saltを含む完全に暗号化されたパスワード。 salt が指定されていない場合、最も強力なメソッドが使用されます( methods()によって返されます)。

パスワードの確認は通常、プレーンテキストのパスワードを word として渡し、前の crypt()呼び出しの完全な結果を渡すことによって行われます。これは、この呼び出しの結果と同じである必要があります。 。

salt (ランダムな2文字または16文字の文字列、メソッドを示すために$digit$のプレフィックスが付いている可能性があります)。これは、暗号化アルゴリズムを混乱させるために使用されます。 salt の文字は、$digit$の前に付けられるModularCrypt Formatを除いて、セット[./a-zA-Z0-9]に含まれている必要があります。

ハッシュされたパスワードを文字列として返します。文字列は、saltと同じアルファベットの文字で構成されます。

いくつかの crypt(3)拡張機能では、 salt のサイズが異なるさまざまな値が許可されるため、パスワードを確認するときは、完全に暗号化されたパスワードをソルトとして使用することをお勧めします。

バージョン3.3で変更: salt の文字列に加えてcrypt.METHOD_*値を受け入れます。

crypt.mksalt(method=None, *, rounds=None)

指定されたメソッドのランダムに生成されたソルトを返します。 method が指定されていない場合、 methods()によって返される利用可能な最強のメソッドが使用されます。

戻り値は、 salt 引数として crypt()に渡すのに適した文字列です。

rounds は、METHOD_SHA256METHOD_SHA512、およびMETHOD_BLOWFISHのラウンド数を指定します。 METHOD_SHA256METHOD_SHA512の場合、1000999_999_999の間の整数である必要があり、デフォルトは5000です。 METHOD_BLOWFISHの場合、16(2 4 )と2_147_483_648(2 31 )の間の2の累乗である必要があります。デフォルトは4096(2 12 )です。

バージョン3.3の新機能。

バージョン3.7で変更: rounds パラメーターが追加されました。


典型的な使用法を示す簡単な例(タイミング攻撃への露出を制限するには、一定時間の比較操作が必要です。 hmac.compare_digest()はこの目的に適しています):

import pwd
import crypt
import getpass
from hmac import compare_digest as compare_hash

def login():
    username = input('Python login: ')
    cryptedpasswd = pwd.getpwnam(username)[1]
    if cryptedpasswd:
        if cryptedpasswd == 'x' or cryptedpasswd == '*':
            raise ValueError('no support for shadow passwords')
        cleartext = getpass.getpass()
        return compare_hash(crypt.crypt(cleartext, cryptedpasswd), cryptedpasswd)
    else:
        return True

利用可能な最も強力な方法を使用してパスワードのハッシュを生成し、元の方法と照合するには、次のようにします。

import crypt
from hmac import compare_digest as compare_hash

hashed = crypt.crypt(plaintext)
if not compare_hash(hashed, crypt.crypt(plaintext, hashed)):
    raise ValueError("hashed version doesn't validate against original")