For Development HEAD DRAFTSearch (procedure/syntax/module):

12.13 crypt.bcrypt - パスワードハッシュ

Module: 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と完全に一致するはずです。

Function: bcrypt-hashpw password :optional setting

{crypt.bcrypt} passwordのハッシュ値を計算します。settingは ソルト値とパラメータを指定する文字列です。settingが 省略された場合は、適切なデフォルトのパラメータとランダムなソルト値が 自動的に選択されます。

戻り値のハッシュ値文字列にはソルト値とパラメータが含まれているので、 それを再びsettingに渡すことができます。したがって、パスワードを 既存のハッシュ値に一致するかチェックしたい場合は、ハッシュ値をsettingに渡し、 戻ってきた文字列が渡したハッシュ値と一致するかを見れば良いことになります。

bcryptアルゴリズムは最大72オクテットまでのパスワードを使えます。

新しいハッシュ値を計算する際にパラメータを指定したい場合は、次に説明する bcrypt-gensaltを使うとsettingに使える文字列を得ることができます。

Function: bcrypt-gensalt :key prefix count entropy-source

{crypt.bcrypt} 与えられたパラメータを折り込んだ、 bcrypt-hashpwsetting引数に使える文字列を返します。

prefix引数はハッシュ関数およびそのバージョンを指定する文字列です。 現在のところ、bcrypt互換である$2a$$2b$がサポート されています。 ただし、$2a$には脆弱性が発見されていますので、 新規のコードには$2b$を使用して下さい。 perfix引数を省略した場合は$2b$が用いられます。

count引数はハッシュの繰り返し回数に関係します。大きな値を指定すれば、 ハッシュ値の計算により長い時間がかかります。パスワードハッシュにおいては、 時間をかけた方が良いことに注意してください。一回のハッシュの時間が長くなれば 辞書攻撃への防御になります。一方で、通常のパスワードチェックでは ログインの度にたかだか一回しはハッシュ関数を呼ばないので、それがたとえコンマ数秒 かかったとしてもたいした負荷ではありません。 bcryptアルゴリズムでは、(expt 2 count)回ハッシュが繰り返されます。

entropy-source引数はランダムなバイト列を格納したu8vectorです。 bcryptアルゴリズムでは少なくとも16バイトの長さが必要です。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT