htpasswd ジェネレーター:bcrypt・apr1・SHA-1・crypt

ユーザー名とパスワードから、Apache の .htpasswd ファイルに使う user:hash の 1 行を作ります。平文・crypt・apr1・SHA-1・bcrypt のすべてをブラウザー内で計算し、openssl passwd・Apache の htpasswd・glibc の crypt で検証済み。パスワードはタブの外に出ません。

ブラウザ内でローカルに実行

Apache ベーシック認証用の htpasswd エントリーを作成する方法

ユーザー名とパスワードを入力し、形式を選んで「htpasswd エントリーを生成」を押してください。.htpasswd ファイルにそのまま追記できる user:hash の 1 行を返し、貼り付ける前に選んだ形式の注意点を表示します。

ハッシュはすべてブラウザー内で計算されます。apr1 のエントリーは openssl passwd -apr1 と htpasswd -m に、bcrypt は htpasswd -B が書き出す $2y$ 行に、SHA-1 は htpasswd -s の {SHA} 形式に一致します。パスワードは送信されず、入力中もタブ外へのリクエストは発生しません。

  1. ログイン時に入力するのと同じユーザー名を入力します。Apache はユーザー名を 255 バイトに制限し、行を左右に分けるコロンも拒否します。
  2. パスワードを入力します。Windows 版 htpasswd はパスワードを 255 文字に切り詰め、bcrypt は先頭 72 バイトまでしか使いません。該当する場合はページが警告します。
  3. 形式を選びます。現在の推奨は bcrypt、htpasswd が既定で書き出すのは MD5 (apr1) で、crypt・SHA-1・平文は古いサーバーや既存ファイル向けに残されています。
  4. bcrypt ではコスト係数を設定します。Apache は 5 から始めて 4〜17 を受け付けますが、このページは 10 から始めて 4〜14 までです。鍵計算がブラウザー内で動き、1 段ごとに倍になるためです。
  5. 「htpasswd エントリーを生成」を押し、結果の上の注意を読んで「コピー」で 1 行を取り出します。運用前にサーバー上で htpasswd -vb /etc/apache2/.htpasswd alice を実行して確認してください。

各 htpasswd 形式が書き込む内容と、どれを選ぶべきか

各形式が書き込む内容

plain はパスワードをそのまま保存し、httpd が受け入れるのは Windows と Netware だけです。crypt は古い Unix のルーチンで、13 文字・2 文字のソルト・パスワードの先頭 8 文字だけを使い、それ以降は黙って捨てられます。長いパスフレーズの強度がここで失われる理由です。

MD5 (apr1) は $apr1$ソルト$ハッシュ を書き出します。パスワードと 8 文字のソルトに MD5 を 1000 回適用する Apache 独自の方式で、htpasswd -m の出力です。SHA-1 は {SHA} に続けて SHA-1 ダイジェストの base64 を書きます。他の形式と違いソルトがないため、同じパスワードは常に同じ行になります。bcrypt は $2y$コスト$ソルト$ハッシュ を書き、16 バイトのランダムなソルトと 2^コスト 回の鍵計算を使います。

エントリーの置き場所

.htpasswd ファイルはアカウントごとに user:hash を 1 行持ち、Apache が AuthUserFile で読み込みます。最小構成の保護ディレクトリは AuthType Basic、AuthName "Restricted"、AuthUserFile /etc/apache2/.htpasswd、Require valid-user です。ファイルはドキュメントルートの外に置き、Web サーバーのユーザーだけが読めるようにしてください。

コマンドラインでは htpasswd が同じ行を作ります。-B が bcrypt(-C でコスト指定)、-m が apr1、-s が SHA-1、-d が crypt です。1 つのファイルに形式を混在できるため、古い crypt の行と新しい bcrypt の行は同居できます。各行は htpasswd -vb ファイル名 ユーザー名 で確認できます。

セキュリティ上の注意

HTTP ベーシック認証はリクエストごとにパスワードを base64 で送るため、接続は HTTPS でなければなりません。ハッシュが守るのはファイルであり、通信路ではありません。crypt・SHA-1・apr1 は計算が速く、それはファイルを盗んだ攻撃者にとって都合のよい性質です。新しいエントリーには bcrypt を使い、アカウントに触れるたびに古い行を置き換えてください。

このジェネレーターはパスワードを保存も送信もしません。計算はページ内で行われ、ソルトはブラウザーの乱数生成器から取得します。コスト 10 はここで約 0.2 秒、コスト 12 は約 1 秒かかるため、htpasswd が 17 まで受け付けてもフィールドは 14 で止まります。

最近使ったツール: