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

主に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. システムエンジニアリング, 設計技術

執筆者:

関連記事

初心者向けの最低限のviの使い方

新入社員やUnix/Linux未経験がviで苦戦するのをよく見ます。 ネットではコマンドの説明を主とした内容が多く、このような資料を見てviを使うと、モードの違いが分からず、思ったように編集できないこ …

ASP.NET Core: IHttpClientFactoryのサンプル

前回の記事でIHttpClientFactoryの使用方法を説明しました。 ここでは、サンプルを使用した具体的な使用方法を説明します。 前提 マイクロソフトが推奨するIHttpClientFactor …

wildflyアップロードサイズ上限

多くのWebサーバやAPサーバでは、サーバリソースの過剰な消費やDoS攻撃に対する対処として、アップロードの最大サイズが決められている。(厳密には、ブラウザから入力値やファイル等のデータを送信するため …

ExcelからPowerPointへの図表貼り付けVBA

パフォーマンスモニタの監視データ(blg)に基づいてPowerPointで報告用のレポートを作成する必要がありました。パフォーマンスログのデータをCSVに変換してExcelに取り込んでグラフを作成し、 …

ASP.NET Core: IHttpClientFactoryの検証用サンプル

これまでにIHttpClientの使い方やサンプルの説明をしました。 今回は検証用のサンプルを説明します。 前提 マイクロソフトが推奨するIHttpClientFactoryを使用して、HttpCli …

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