crypt.bcrypt
- パスワードハッシュ ¶このモジュールは、blowfishを使ったパスワードハッシュアルゴリズムを実装します。 OpenBSDのbcryptアルゴリズム(version 2a, 2b)と互換です。
version 2a は脆弱性が発見されているので、新規のコードでは使用しないで ください。代わりに version 2b を使用して下さい。
典型的な使い方は非常にシンプルです。新しいパスワードハッシュ値を
得たい場合 (例えば新しいユーザのために、など) は、パスワード文字列を
唯一の引数としてbcrypt-hashpw
を呼び出してください。
(bcrypt-hashpw password)
⇒ hashed-string
このルーチンは自動的にソルト値を付加します。戻り値の文字列はそのままユーザ
データベースに格納できます。与えられたパスワードがハッシュ値に一致するか
どうかを調べるには、ハッシュ値そのものを第二引数としてbcrypt-hashpw
に
渡します。
(bcrypt-hashpw password hashed-string)
⇒ hashed-string
パスワードが正しければ、戻り値はhashed-stringと完全に一致するはずです。
{crypt.bcrypt
}
passwordのハッシュ値を計算します。settingは
ソルト値とパラメータを指定する文字列です。settingが
省略された場合は、適切なデフォルトのパラメータとランダムなソルト値が
自動的に選択されます。
戻り値のハッシュ値文字列にはソルト値とパラメータが含まれているので、 それを再びsettingに渡すことができます。したがって、パスワードを 既存のハッシュ値に一致するかチェックしたい場合は、ハッシュ値をsettingに渡し、 戻ってきた文字列が渡したハッシュ値と一致するかを見れば良いことになります。
bcryptアルゴリズムは最大72オクテットまでのパスワードを使えます。
新しいハッシュ値を計算する際にパラメータを指定したい場合は、次に説明する
bcrypt-gensalt
を使うとsettingに使える文字列を得ることができます。
{crypt.bcrypt
}
与えられたパラメータを折り込んだ、
bcrypt-hashpw
のsetting引数に使える文字列を返します。
prefix引数はハッシュ関数およびそのバージョンを指定する文字列です。
現在のところ、bcrypt
互換である$2a$
と$2b$
がサポート
されています。
ただし、$2a$
には脆弱性が発見されていますので、
新規のコードには$2b$
を使用して下さい。
perfix引数を省略した場合は$2b$
が用いられます。
count引数はハッシュの繰り返し回数に関係します。大きな値を指定すれば、
ハッシュ値の計算により長い時間がかかります。パスワードハッシュにおいては、
時間をかけた方が良いことに注意してください。一回のハッシュの時間が長くなれば
辞書攻撃への防御になります。一方で、通常のパスワードチェックでは
ログインの度にたかだか一回しはハッシュ関数を呼ばないので、それがたとえコンマ数秒
かかったとしてもたいした負荷ではありません。
bcryptアルゴリズムでは、(expt 2 count)
回ハッシュが繰り返されます。
entropy-source引数はランダムなバイト列を格納したu8vector
です。
bcryptアルゴリズムでは少なくとも16バイトの長さが必要です。