OWASPが推奨する強力なパスワード

Webアプリケーションのセキュリティの標準化や推進を行うOWASPでは、強力なパスワードの使用を推奨しているので、それをまとめた。

Website with the collection of all the cheat sheets of the p…

強力なパスワード

“Implement Proper Password Strength Controls”から意訳です。
2019年10月時点での資料に基づいており、セキュリティトレンドによって内容が変わる場合があるので、オリジナルのサイトを見ることもお薦めします。

  • パスワードの長さ
    • パスワードの最小長は8文字以上にすること。NIST SP800-63B(“Digital Identity Guidelines”)では、8文字未満のパスワードは弱いと考えられている。(同資料では、PIN等の数字だけの場合は最低6文字以上とありました。)
    • パスワードの最大長は少なすぎる値にしないこと。典型的な最大長は128文字である。ロングパスワードDoS攻撃に対する防御としても、最大長を設定する必要がある。
      一部のハッシュアルゴリズムでは扱える文字長の制限があるので、そのようなケースを考慮して最大長を決定する必要がある。(bcryptの場合、64バイトまでのようです。)
  • パスワード(文字)を切り捨てないこと。ユーザが入力した文字は、パスワードに全て含まれていること。
  • ユニコードや空白を含む全ての文字を使用できること。入力できる文字種の制限はない方が良い。
  • パスワードの漏洩や認証が侵害された場合、パスワード変更を確認する。ニュアンスが気になるので原文も載せておきます。

    Ensure credential rotation when a password leak, or at the time of compromise identification.

  • より複雑で脆弱性のないパスワードを生成するために、パスワード強度メータを導入すること。

個人的なコメント

  • パスワードに空白を含めることに関して
    • ユーザの入力に対して全般的に空白やタブをトリムする仕組みが標準化されている場合がある。先頭や最後に空白があるパスワードの場合、正常に認証ができなくなる不具合が呼び込む場合があるので、設計や実装時に「パスワード項目は他とは異なりトリムしてはいけない」が担当者に伝わるよう工夫する必要がある。(このようなパスワードは許容しない、という選択も考えられる。)
    • 自動でパスワードを生成するようなケースでは、生成したパスワードをWebページ上やメール等で通知することになる。やはり、パスワードの先頭や最後に空白が入っていると、ブラウザやコピペの実装によっては空白が切り落とされる場合が考えられる。このようなケースでは、空白を含まない、または両端に空白が入らないような設計・実装が必要である。
  • パスワードを紙面や電話で通知するケースに関して
    契約に基づく会員向けサイト等の場合、初期パスワードを紙面で通知する場合がある。紙面に何らかの問題がある場合やログインできない場合は、ユーザサポートが口頭で伝える場合も考えられます。
    このようなケースでは、ユーザが間違いやすい文字、口頭で伝えるのが難しい文字が含まれると、ユーザやユーザサポートの負荷が増大します。年配のユーザが含まれる場合、ITリテラシが低かったり目が悪い傾向があるので、この傾向はさらに強くなります。
    このような問題を軽減・回避するために、次のように紛らわしい文字は初期パスワードから除外することをお薦めします。また、印刷や表示に使用するフォントを変える、フリガナを振る等して、間違いを軽減する工夫をお薦めします。

    文字理由
    l I 1 |文字の形が似ており紛らわしい。
    フォントによっては、全て縦棒にしか見えない。
    0 Oフォントによってはゼロの斜線が入らい場合があり、そのような場合は識別が難しい。
    : ;文字の形が似ており紛らわしい。
    「コロン」は比較的知られているが、「セミコロン」を知らない場合がある。
    , .文字の形が似ており紛らわしい。
    ' ` "文字の形が似ており紛らわしい。ダブルクォーテーションはシングルが連続しているようにも見える。
    読み方が難しくユーザにITリテラシが求められる。
    ~ ^文字の形が似ており紛らわしい。
    読み方が難しくユーザにITリテラシが求められる。
    / \バックスラッシュ\は環境によっては円記号として表示される。
    円記号で表示されるなら良いが、バックスラッシュとして表示される場合、どちらの向きのスラッシュなのか判断を誤る可能性がある。