Basic認証で使用できる4種類のハッシュアルゴリズムとは? ~crypt・bcrypt・MD5(APR)・SHA1~
弊社では、ステージング環境や特定のディレクトリを限定公開する際に、Basic認証を用いて認証機能を実装することがあります。
その際に必要となるのが、.htpasswdファイルを使用したユーザー名とパスワードの管理です。
.htpasswdでは、パスワードのハッシュ化方式として、crypt・bcrypt・MD5(APR)・SHA1 の4種類が使用可能で、選択する方式によってセキュリティの強度が大きく変わります。
今回は、それぞれのハッシュ化方式の特徴や設定方法について、詳しく解説していきます。
Basic認証とは
Basic認証とは、一言で表すと「web上で利用できるシンプルな認証方式」です。
webサーバーがユーザー名とパスワードを求め、正しければアクセスを許可するという仕組みになっています。
Basic認証が設定されているページへアクセスすると、ポップアップが表示され、
そこに前もって設定してあったユーザー名とパスワードを入力することで、ログインすることができます。
静的なサイトや簡易的な管理画面など、特定のページだけをサクッと保護したいときによく使われます。
実際に.htpasswdを登録してみよう
1. パスワード生成ツールを使う
.htpasswd
用のパスワードは、Web上に多数ある「.htpasswd 生成ツール」を利用して簡単に作成できます。
また、Apacheのコマンドラインツールであるhtpasswd
でも生成可能です。
生成したハッシュ文字列を.htpasswdに貼り付ければ準備完了。 1行につき1ユーザーを記述し、以下のように書いていきます。
user1:pz6C0NmYo6t1Q
user2:$2y$10$XYkR68AAsESe.6pXVaexAuMhAtdOSBDyS6ouFK6U6oO5MNsnln4yO
user3:$apr1$IKRpq3ym$pe2TNP1pBiX6hdtS6fNB60
user4:{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
user1~user4は全て同一のパスワードですが、user1 は crypt方式、user2 は bcrypt方式、user3 は MD5(APR)方式、user4 は SHA1方式
というように、それぞれ異なるアルゴリズムでハッシュ化されています。
2. Apacheの設定(.htaccess 例)
.htpasswd
を利用して認証をかけるため、アクセス制限をしたいディレクトリに.htaccess
ファイルを作成し、以下の内容を記述します。
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
- AuthType: Basic認証を使うという指定
- AuthName: 認証ダイアログに表示される名称
- AuthUserFile: .htpasswdファイルのフルパス
- Require valid-user: .htpasswdに登録されているユーザー全員にアクセス権を付与
これで、該当ディレクトリへアクセスするとユーザー名とパスワードが求められるようになります。
4種類のハッシュ方式の比較
.htpasswd
に登録するパスワードハッシュには主に以下の4つが使われます。
crypt・bcrypt・MD5(APR)・SHA1 それぞれの特徴を見てみましょう。
1. crypt
例:user1:pz6C0NmYo6t1Q
- 古いUNIX系OSのパスワード暗号化方式
- 最大8文字のパスワードしか認識されないため、非常に脆弱
- ソルトはあるものの、総当たり攻撃に対して弱い
- 現在は非推奨
2. bcrypt
例:user2:$2y$10$XYkR68AAsESe.6pXVaexAuMhAtdOSBDyS6ouFK6U6oO5MNsnln4yO
- 強力なソルトとストレッチングを備えた近年のハッシュ方式
- パスワードの長さや複雑さに柔軟に対応できる
- crypt より遥かに安全で、総当たり攻撃に強い
- Basic認証用としては対応が進んでいるが、環境によっては使いづらい場合も
- 最もセキュリティが高い部類
3. MD5(APR)
例:user3:$apr1$IKRpq3ym$pe2TNP1pBiX6hdtS6fNB60
- Apache独自拡張のMD5方式で、
APR1-MD5
とも呼ばれる - ソルトを使用するため
crypt
よりも安全 - Apache標準の
htpasswd
コマンドが対応しているため導入が簡単 - Basic認証で最も広く使われている方式
4. SHA1
例:user4:{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
- SHA1アルゴリズムを使ったハッシュ
- ソルトがなく、総当たり(辞書攻撃)に弱い
- SHA1自体が近年脆弱性を指摘されており、あまり推奨されない
- 過去のシステムで使用されている場合があるが、できれば避けたい
Basic認証を安全に運用するためのポイント
HTTPSの導入
- Basic認証の情報は Base64エンコードのみ
- 通信が平文ならパスワード漏洩リスクが高いので、TLS/SSLによる暗号化は必須です
強固なパスワードポリシー
- 長いパスワード+英数字・記号を含めることで、辞書攻撃を防ぎやすくなります
ブルートフォース対策
fail2ban
やmod_evasive
などでアクセスを制限し、総当たり攻撃を防ぎましょう
Digest認証や他の認証方式も検討
- Basic認証は導入が簡単な反面、機能は限定的
- より強固な認証が必要ならDigest認証やOAuth、JWTなどを検討するのがおすすめです
さいごに
今回は、「Basic認証で使用できる4種類のハッシュアルゴリズム」というテーマで、それぞれの特徴やセキュリティ面について解説しました。
- crypt:古くて最大8文字制限のため脆弱、非推奨
- bcrypt:最も強力だが、環境によっては導入が難しい場合もある
- MD5(APR):Apacheが標準対応、一般的なBasic認証で広く利用
- SHA1:ソルトがないため脆弱化しやすく、あまり推奨されない
.htpasswd
ファイルはパスワードハッシュを貼り付けるだけで運用できるので、一見シンプルですが、どのハッシュ方式を選ぶかで安全性が大きく変わります。
また、Basic認証そのものもHTTPS必須などの注意点があるので、しっかりとセキュリティ対策を行いながら活用しましょう。
この記事が、Basic認証とハッシュアルゴリズムの選択における一助となれば幸いです。
この記事を書いた人

- モノを売るより創りたいという想いで、約5カ月間の独学期間を経て、営業職からエンジニアへ転職。現在は、ソリューション事業部のWebエンジニアとして、主にシステムの開発・運用に従事している。趣味は料理と釣り。
この執筆者の最新記事
関連記事
関連する記事はありません
最新記事
FOLLOW US
最新の情報をお届けします
- facebookでフォロー
- Twitterでフォロー
- Feedlyでフォロー