ブログに戻る

強いパスワードの作り方(正しいやり方)

強いパスワードを作るには、長くランダムにします。暗号学的に安全なソースで生成した16文字以上を目指し、アカウントごとに別々のものを使いましょう。攻撃者を実際に食い止めるのは、長さと予測不可能性であって、感嘆符をいくつ詰め込むかではありません。最も手っ取り早く手に入れる方法は、ツールに作らせることです。たとえばAndevのパスワード生成ツールは、パスワードをブラウザ内で作り、どこにも送信しません。

パスワード解読の難しさを比較したチャート。短く複雑なパスワードと、より長くランダムなものを並べ、長さのほうが記号を加えるよりはるかに試行回数を増やすことを示している

何が本当にパスワードを強くするのか

パスワードは、推測されにくく、総当たり攻撃に耐えるとき強いといえます。それを左右するのは2つです。

  • 長さ。 1文字増えるごとに、攻撃者が試さねばならない組み合わせの数が掛け算で増えます。その掛け算は指数的なので、追加する1文字は前の1文字より大きな意味を持ちます。
  • ランダム性。 文字は本当に予測不可能でなければなりません。単語・名前・誕生日・キーボードのパターンから作られたパスワードは、どれだけ長く見えてもソフトウェアには簡単に推測されます。

単純に言えば、長くランダムなパスワードは強く、短くて「気の利いた」ものは強くありません。それ以外のすべて — どの記号を使うか、大文字をどこに置くか — は、この2つの要素に比べれば誤差の範囲です。

長さ vs 複雑さの誤解

長年、標準的なアドバイスは「複雑なパスワードを使え」でした。大文字・小文字・数字・記号を混ぜろ、と。そのアドバイスが生み出したのが P@ssw0rd! のようなパスワードです — 複雑に見えますが実際には弱いものです。なぜなら攻撃者は、人々がどんな置き換えをするか(a@ に、o0 に、感嘆符は末尾に)を正確に知っているからです。

数学はもっとはっきりした話を語ります。パスワードに1文字追加すると、攻撃者に必要な推測回数が、使う文字集合の大きさの分だけ掛け算で増えます。特殊記号を1つ加えても、その集合をわずかに広げるだけです。だから、長いパスワードはほとんど常に、短くて「複雑な」ものに勝ちます — 上の図が示すように、長さは記号を散りばめるよりはるかに速く難しさを押し上げます。

これが、いくつかのランダムな単語からなるパスフレーズが、強くて覚えやすくもなれる理由です。無関係でランダムに選ばれた単語の連なりは、長く、推測されにくく、記号の壁よりも入力が楽です。鍵となる言葉はランダムです。自分にとって意味があるから選んだフレーズは、まさに攻撃者の単語リストにすでに入っているたぐいのものです。

複雑さのルールにもまだ出番はある

多くのサイトが文字種の混在を強制しますが、生成されたパスワードはどのみちそうしたルールを満たします。要点は記号を避けることではなく — 強さの源としてそれに頼るのをやめることです。まず長さとランダム性を正しく押さえれば、複雑さはおのずとついてきます。

「考え出す」より「生成する」が勝る理由

人間はひどい乱数生成器です。私たちは単語・日付・ペットの名前・パターンに手を伸ばし、アカウント間で同じものを使い回します。攻撃者はまさにこうした習性を突きます。

よい生成ツールは、暗号学的に安全なランダム性のソースから引き出すことで、当てずっぽうを排除します。ブラウザでは、そのソースが Web Crypto API — 具体的には crypto.getRandomValues() — で、予測不可能であるよう設計されています。これは、プレイリストをシャッフルするような用途に使われる単純な「ランダム」関数とはまったく別物です。後者は予測可能すぎて、セキュリティ用途には決して使うべきではありません。

Andevのパスワード生成ツールは、まさにこれを土台に作られています。Web Crypto APIを使い、お使いのブラウザ内でローカルにパスワードを生成します。作業が端末上で行われるため、生成されたパスワードはどこにも送信されません — それを見たり、ログに記録したり、漏えいさせたりするサーバーは存在しません。第三者に結果を預けることなく、強いパスワードが手に入ります。

実践的なチェックリスト

これらに従えば、本当に大切なことは押さえられます。

  • 長くする。 16文字以上を使いましょう。長いほど良く、生成ツールとパスワードマネージャーが入力を担えば、あなたの手間はほぼゼロです。
  • ランダムにする。 自分で考え出すのではなく、暗号学的に安全なソースから生成しましょう。
  • 個人情報を基にしない。 名前・誕生日・住所・好きなチームなど、誰かが見つけたり推測したりできるものは一切使わないこと。
  • サイトごとに固有のパスワードを使う。 1パスワードにつき1アカウント。1つのサイトが侵害されても、被害はそこで止まります。
  • パスワードを使い回さない。 使い回しこそ、漏えいした1つのパスワードが、「クレデンシャルスタッフィング」を通じて多数のアカウント侵害につながる原因です。これは攻撃者が漏えいしたログイン情報を他のサイトで試す手口です。
  • パスワードマネージャーに保存する。 16文字のランダムな文字列を何十個も暗記する必要はありません — それはマネージャーの仕事です。入力も代わりにしてくれるので、長さが不便でなくなります。
  • 二要素認証(2FA)を有効にする。 強いパスワードは第一の防衛線で、2FAは万一パスワードが露呈しても持ちこたえる、二つ目の鍵です。

数秒で1つ作る方法

  1. パスワード生成ツールを開きます。
  2. 長さを16以上に設定します(本当に大切なアカウントにはもっと長く)。
  3. 使いたい文字種を選びます — 大半のサイトはフルミックスで問題ありません。
  4. アカウントを作成・更新する際に、生成されたパスワードをパスワードマネージャーにコピーします。
  5. アカウントが提供しているところでは2FAを有効にします。

これがワークフローのすべてです。生成ツールがランダム性を、パスワードマネージャーが記憶を担い、あなたは二度とパスワードを考え出したり使い回したりする必要がなくなります。

関連ツールについての注意

パスワードとハッシュは混同しやすいので、はっきりさせておく価値があります。パスワードは、ログインのために自分が保持して使う秘密情報です。一方ハッシュは、あるデータの一方向の指紋で、あなたを認証するためというより、データの完全性を検証するためによく使われます。ファイルや文字列のチェックサムを作る必要があるなら、それはハッシュ生成ツールの仕事であって — 強くて固有のパスワードの代わりにはなりません。パスワードをハッシュツールに貼り付けて、保存しても安全になると期待しないでください。アカウントログインのためのパスワードのハッシュ化とは、そういうことではないのです。

重要なポイント

  • 長さとランダム性が勝つ。 パスワードの解読の難しさを意味あるかたちで決めるのは、この2つの要素だけです。
  • 複雑さの神話はただの神話。 長くランダムなパスフレーズは、P@ssw0rd! のような短く「複雑な」パスワードに毎回勝ります。
  • 安全なツールに生成させる。 推測可能なものや人が選んだ文字列ではなく、Web Crypto APIの crypto.getRandomValues() を土台にしたソースを使いましょう。
  • サイトごとに固有のパスワードを毎回。 決して使い回さず、個人情報を基にせず、パスワードマネージャーに保存しましょう。
  • 二つ目の鍵を加える。 二要素認証を有効にして、1つのパスワードが露呈しただけでゲームオーバーにならないようにしましょう。

次のパスワードを強いものに

パスワード生成ツールは無料で、登録不要、すべてブラウザ内で動作します — あなたのパスワードはWeb Crypto APIでローカルに作られ、端末から一切出ません。16文字のランダムなパスワードをワンクリックで生成し、パスワードマネージャーに入れたら、Andevのプライベートなブラウザ内ツールで、他のセキュリティ作業も同じプライベートな方法でこなしてみてください。