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_SHA256
、METHOD_SHA512
、およびMETHOD_BLOWFISH
のラウンド数を指定します。METHOD_SHA256
とMETHOD_SHA512
の場合、1000
と999_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")