ApacheのBASIC認証で長いパスワードを使っていたが,デフォルトでは先頭の8文字までしか効いていなかった.

ApacheのBASIC認証は,非SSLだともちろんセキュリティ的に使い物にならないが,SSLならまぁ使えるので,一応長いパスワードを設定して使っていた. しかしどうも,途中までしか入力していなくてもなぜか認証に通ってしまうことに気づいた.

これはやばい,変だということで調べてみた.

そこには衝撃の事実が記されていた.

  • Windows,Netware,TPF以外のプラットフォームでは,デフォルトでcrypt()関数の暗号化が使用される
  • crypt()関数の暗号化では,パスワードの先頭8文字だけが使われて,それより長い文字数の場合は切り捨てられる

ヽ(`Д´)ノ  ガーン!

早速 -mオプションをつけて,crypt()ではなくMD5の暗号化でパスワードファイルを作り直した.

/usr/local/apache2/bin/htpasswd -mc /usr/local/apache/conf/.dav davuser
これで,長いパスワードを最後までちゃんと入れないと,認証に通らないようになった.めでたし.

あとMD5の他にも,-sオプションによるSHA方式もあるが,MD5に比べて生成される文字数が短いのと,マニュアルにランダムなSALTを使わないので強度が弱いと書かれているため,強度的にはMD5がベストのようだ.

方式htpasswdのオプション備考
プレインテキスト-pWindows,Netware,TPFでしか使えない
crypt関数-dパスワードの先頭8文字のみ有効.Windows,Netware,TPFでは使えない.それ以外の環境ではこれがデフォルト
SHA-sランダムなSALTを使わないので,総当たり攻撃に弱いらしい
MD5-mWindows,Netware,TPFでのデフォルト.強度的にはベスト


© 2024 KMIソフトウェア