アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング 設計技術

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

投稿日:


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

強力なパスワード

“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リテラシが求められる。
    / \ バックスラッシュ\は環境によっては円記号として表示される。
    円記号で表示されるなら良いが、バックスラッシュとして表示される場合、どちらの向きのスラッシュなのか判断を誤る可能性がある。


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, 設計技術

執筆者:

関連記事

DB操作フレームワーク はJPA or mybatis?

開発に向けた準備で、開発標準を準備するフレームワーク(FW)チーム、それらを使って実装を行う業務チームが集まって、「DB操作を行うためのFWは何を使うか?」という協議になった。 FWチームは、FW・J …

リモートからのwarデプロイの自動化

JavaEEベースのツールを公開しているが、デプロイの都度、warファイルをサーバにコピーしてwildflyにデプロイするのが面倒なので、mavenで自動化しました。 前提 mavenのプラグインと後 …

JavaでのZIP暗号化の考察

法務系業務を行うシステムを設計するにあたり、次のような要件がありました。 CSVファイルの暗号化方式として、当初からパスワード付きZIPファイルの使用を検討していたため、ZIP圧縮を使用する前提で調査 …

JavaEE7のJSF, Facelets, JSPの関係

JavaEEを使ったアプリ開発の際に、いつも気になるが後回しにしていたこと… HTML5への対応方法の調査等、今後の理解促進のために、調べてみた。 FaceletsとJSFとの関係は? J …

JSFラジオボタン・チェックボックスとbootstrap

boostrapでラジオボタンやチェックボックスを使用する場合、div, input, label要素にbootstrapのCSSクラスを指定する必要がある。 JSFでラジオボタンを使用する場合、se …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る