【解説】入力しやすいパスワードを考えてくれるツールを作った(パスワードエントロピーと入力)

【解説】入力しやすいパスワードを考えてくれるツールを作った(パスワードエントロピーと入力)

パスワードは毎回 ランダムに生成されます。
気に入ったパスワードをタップするとコピーできます。

【解説】入力しやすいパスワードを考えてくれるツールを作った(パスワードエントロピーと入力)

ぜひ、ツールページを「ブックマーク(お気に入り)」に登録して、必要なときに利用してください。

YouTube動画でも話しています。

関連する情報
パスワード管理ノートの書き方・作り方 【アカウント管理の基本】
パスワード管理ノートの書き方・作り方 【アカウント管理の基本】
パスワードがいろいろあって、わからなくなってきたよ。 どうやって整理したらよいかな? 個人でパスワードを管理するときは、まずは「パスワードノート」から始めてみるのもオススメです。 印刷用PDFダウンロード(A4横 両面 3x2x2) パスワードノートって何? 自分で手帳にパスワードを書いている人も多いですが、後から見直して「なんのパスワードなのか」わからなくなることがよくあります。だんだんとごちゃごちゃになってしまうんですよね。 パスワードノートは、自分のアカウント・パスワー...

同じパスワードを使い回すのはどうして危険?【パスワードリスト攻撃】
同じパスワードを使い回すのはどうして危険?【パスワードリスト攻撃】
「パスワードリスト攻撃」とは、どこかのサイトで流出した ID・パスワードのリストが、攻撃者によって別のサイトの不正アクセスに使われてしまうサイバー攻撃です。「パスワードリスト攻撃」では、多くの人が複数のサイトで同じ ID・パスワードを用いる傾向を悪用します。攻撃者は侵入に必要なパスワードリストを、よりセキュリティの弱いサイトから入手して、ほかのサイトで利用します。

パスワードは覚えておくもの?【同じパスワードを使い回さない3つの理由】
パスワードは覚えておくもの?【同じパスワードを使い回さない3つの理由】
スマートフォンを利用していると、会員登録の機会がよくあります。しかし、スマートフォンに慣れていない方ほど、同じパスワードを登録する傾向があります。 そりゃあ、何個もパスワードを覚えられないよ。 実は、「パスワードは覚えない方がよい」のです。 パスワードを覚えようとすると、どうしても簡単なパスワードを使い回すことになりがちです。しかし、パスワードを使い回すと、パスワードを盗まれたときに被害が大きくなります。それだけでなく、どのサービスに登録しているのか把握しにくくなるという問題...

Chromeのパスワード自動生成のしくみ 【Googleアカウントのパスワード管理】
Chromeのパスワード自動生成のしくみ 【Googleアカウントのパスワード管理】
先日、パスワードの決め方について説明したときにGoogle Chromeのパスワード自動生成・保存を紹介しました。 パスワードのクラウド管理にはリスクもありますが、総合するとメモなどよりも安全なのではないかと考えています。 今回は、Googleアカウントのパスワード管理のしくみについて、便利さとリスクについて見てみましょう。 この記事ではAndroidスマートフォンを対象にGoogleアカウントのパスワード管理を説明しています。iPhoneの場合は、「iCloud キーチェー...
\記事が役に立ったらシェアしてね/

1. 入力しやすいパスワードの特徴

このパスワード生成ツールでは、視覚的に区別しにくい文字は避けるように選ばれます。
また、はじめにスマホのタッチ操作で入力が面倒な文字を固めて、残りは入力しやすい数字を多めにしています。

  • 一般のランダムなパスワード例:
    t5fA(Wg.MGgC
    Xx.Pq5,i2l5Q
  • 入力しやすいルールのパスワード例:
    @Unvzh44258f
    &Fha288998gy
入力しやすいパスワードの特徴

パスワードは合計で12文字になるように、先頭から以下のルールで生成しています。

  • 記号1文字(!@#$%^&*()_+)
  • 英字3〜5文字(先頭だけは大文字)
  • 数字4〜6文字
  • 残りは英字(なくてもよい)

どの範囲が数字かわからないように各文字数には幅を持たせています。

パスワード生成部分のアルゴリズムは(JavaScript)、


const symbols = "!@#$%^&*()_+";
const letters = "abcdefghijkmnopqrstuvwxyz";
const numbers = "23456789";

let password = "";

// 記号を1つ追加
password += symbols[Math.floor(Math.random() * symbols.length)];

// 英字を3~5個追加
const lettersCount1 = Math.floor(Math.random() * 3) + 3;
let passwordLetters1 = "";
for (let j = 0; j < lettersCount1; j++) {
  passwordLetters1 += letters[Math.floor(Math.random() * letters.length)];
}
password += passwordLetters1.charAt(0).toUpperCase() + passwordLetters1.slice(1);

// 数字を4~6個追加
const numbersCount = Math.floor(Math.random() * 3) + 4;
for (let j = 0; j < numbersCount; j++) {
  password += numbers[Math.floor(Math.random() * numbers.length)];
}

// 残りの文字数を英字で埋める
const remainingCount = 12 - password.length;
for (let j = 0; j < remainingCount; j++) {
  password += letters[Math.floor(Math.random() * letters.length)];
}
入力しやすいパスワードの特徴

実際に使ってみると (Ccなどが似ている文字もあります。
しかし、規則をみると記号か英字か特定できます。

1-1. 純粋なエントロピーよりも使いやすさと安全性のバランスを取った

とはいえ、このパスワードは入力しやすいものの、
厳密には完全ランダムなパスワードに比べて複雑でない
という問題点は残ります。

しかし、これは「トレードオフ」です。
スマートフォンに慣れていない方でも、パスワードを使い回さずに済むように考えたからです。

試しに、自分で両方のパスワードをトグル入力してみると、42秒 対 26秒 でした。
約6割増しのスピードで入力できました。

  • タッチ操作が苦手な方だと、特に入力途中の文字種の変更が大変です。
  • また、書き写したときに大文字・小文字がわからなくなってしまうことが多いです。
  • しかもパスワードの入力でエラーになると、CAPTCHA認証や確認コードなどより複雑な操作が必要になり、「泥沼」状態になってしまいます。

そうすると、パスワードの入力エラーが発生しやすくなります。
文字数が多くなると、「ノーミス」で入力するのは「現実的には無理」というケースもあるのです。

このようなトラブルが続くと、いつも覚えやすい簡単なパスワードを使いまわしてしまいがちになります。

純粋なエントロピーよりも使いやすさと安全性のバランスを取った

パスワードの管理において、ある程度の使いやすさも必要です。

2. パスワードの強さについて(エントロピー)

パスワードの強さについて(エントロピー)

でも、このパスワード、完全にはランダムではないよね。
安全なの?

生成されるパスワードは推測が困難で、「総当たり攻撃」に対する耐性が十分にあります。

パスワードの強さを計算してみましょう。
それには、「予測の難しさ」や「ランダムさの度合い」を表す、「エントロピー」を使います。

エントロピーは、取りうるパターンの多さを対数で示します。

これが重要なのは、「総当たり攻撃」で調べ尽くすのにかかる時間に関係するからです。
エントロピーが 1 増えるごとにかかる処理時間は 2倍になります。

2-1. このパスワードのエントロピーと強度

このツールで生成されるパスワードのエントロピーを概算してみます。
計算途中で大き過ぎる値にならないように対数を使って、全体の組合せ数を計算しました。

  • まず、先頭1文字は記号で固定されます。
  • 残りの11文字のうちパスワードで使う数字の文字数(4文字〜6文字)で場合分けをします。
    そうすると、それ以外は英字になります。
  • 11文字中に数字はまとまって配置されるので、開始位置によって場合分けになります。
  • あとは、英字・数字をそれぞれ決まった個数を順列に並べればパスワードは決まります。
このパスワードのエントロピーと強度
数字の文字数が、
  • 4文字の場合:
    10*3*25^7*8^4通り(49.41ビット)
  • 5文字の場合:
    10*3*25^6*8^5通り(47.77ビット)
  • 6文字の場合:
    10*3*25^5*8^6通り(46.13ビット)

そのまま足すことはできないので、端数の部分を2の累乗にして合計し、また対数を取り直します。

46+log_2(2^3.41 + 2^1.77 + 2^0.13) ≈ 49.92ビット

つまり、この生成ルールを知られている場合でも完全にランダムに組み合わせた場合の約 7.9文字分のパスワードと同程度の複雑さになっていると言えます。

このパスワードのエントロピーと強度

ただし、通常は攻撃者にこの生成ルールは知られていないはずで、その場合は75.4ビットに相当する処理時間がかかることが期待されます。

このパスワードのエントロピーと強度
このパスワードのエントロピーと強度

もし、心配なら2つ3つ重ねて長いパスワードにすると「セキュリティ専門家も納得」のレベルになります。

このパスワードのエントロピーと強度

なんのためにエントロピーを計算したんやら……(笑)

3. 内部処理の説明(JavaScript)

このツールは、スマホのブラウザ内で動作します。

ページでは、JavaScriptによってパスワード生成の手順を示すだけ。
動作はスマホ本体内で完結しています。

パスワードを自動的に生成し、生成されたパスワードをクリックするとクリップボードにコピーされ、ポップアップメッセージが表示されます。

function generatePasswords() {
  const symbols = "!@#$%^&*()_+";
  const letters = "abcdefghijkmnopqrstuvwxyz";
  const numbers = "23456789";

  let passwordsList = "<ul>";

  for (let i = 0; i < 10; i++) {
    let password = "";

    // 記号を1つ追加
    password += symbols[Math.floor(Math.random() * symbols.length)];

    // 英字を3~5個追加
    const lettersCount1 = Math.floor(Math.random() * 3) + 3;
    let passwordLetters1 = "";
    for (let j = 0; j < lettersCount1; j++) {
      passwordLetters1 += letters[Math.floor(Math.random() * letters.length)];
    }
    password += passwordLetters1.charAt(0).toUpperCase() + passwordLetters1.slice(1);

    // 数字を追加(パスワードの長さが12文字に満たない場合は増やす)
    let numbersCount = 12 - password.length - 2; // 英字2~3個分を予約
    if (numbersCount < 1) {
      numbersCount = 1;
    }
    for (let j = 0; j < numbersCount; j++) {
      password += numbers[Math.floor(Math.random() * numbers.length)];
    }

    // 英字を2~3個追加
    const lettersCount2 = Math.floor(Math.random() * 2) + 2;
    let passwordLetters2 = "";
    for (let j = 0; j < lettersCount2; j++) {
      passwordLetters2 += letters[Math.floor(Math.random() * letters.length)];
    }
    password += passwordLetters2;

    passwordsList += `<li class="password-item" onclick="copyPassword(this)">${password}</li>`;
  }

  passwordsList += "</ul>";

  document.getElementById("passwords").innerHTML = passwordsList;
}

function copyPassword(element) {
  const password = element.innerText;
  navigator.clipboard.writeText(password).then(function() {
    showPopup(password);
  });
}

function showPopup(password) {
  const popup = document.getElementById("popup");
  popup.innerText = `${password} をコピーしました`;
  popup.style.display = "block";
  setTimeout(function() {
    popup.style.display = "none";
  }, 2000);
}

window.onload = function() {
  generatePasswords();
};

3-1. 関数とイベントの定義

このコードは、

  • ユーザーがボタンをクリックするとパスワードが自動的に生成され、
  • 生成されたパスワードをクリックするとクリップボードにコピーされ、
  • ポップアップメッセージが表示される、

という一連の機能を提供しています。

generatePasswords()関数:
  • この関数は、パスワードを生成するための主要な処理を行います。
  • まず、記号、英字、数字の文字列を定義します。
  • 次に、10個のパスワードを生成するためのループを実行します。
  • 各パスワードは、記号1つ、英字3〜5個、数字、英字2〜3個の順で構成されます。
  • 生成されたパスワードは、クリック可能なリスト項目としてHTMLに追加されます。
copyPassword()関数:
  • この関数は、パスワードがクリックされたときに呼び出されます。
  • クリックされたパスワードの文字列を取得し、クリップボードにコピーします。
  • コピーが完了したら、showPopup()関数を呼び出してポップアップメッセージを表示します。
showPopup()関数:
  • この関数は、ポップアップメッセージを表示するための処理を行います。
  • コピーされたパスワードを含むメッセージを表示します。
  • ポップアップを表示し、2秒後に自動的に非表示にします。
window.onloadイベント:
  • このイベントは、ページの読み込みが完了したときに発生します。
  • generatePasswords()関数を呼び出して、ページ読み込み時にパスワードを生成します。

簡単に強力なパスワードを生成し、すぐにコピーして使用できます。

こちらもどうぞ。
パスワード管理ノートの書き方・作り方 【アカウント管理の基本】
パスワード管理ノートの書き方・作り方 【アカウント管理の基本】
パスワードがいろいろあって、わからなくなってきたよ。 どうやって整理したらよいかな? 個人でパスワードを管理するときは、まずは「パスワードノート」から始めてみるのもオススメです。 印刷用PDFダウンロード(A4横 両面 3x2x2) パスワードノートって何? 自分で手帳にパスワードを書いている人も多いですが、後から見直して「なんのパスワードなのか」わからなくなることがよくあります。だんだんとごちゃごちゃになってしまうんですよね。 パスワードノートは、自分のアカウント・パスワー...

同じパスワードを使い回すのはどうして危険?【パスワードリスト攻撃】
同じパスワードを使い回すのはどうして危険?【パスワードリスト攻撃】
「パスワードリスト攻撃」とは、どこかのサイトで流出した ID・パスワードのリストが、攻撃者によって別のサイトの不正アクセスに使われてしまうサイバー攻撃です。「パスワードリスト攻撃」では、多くの人が複数のサイトで同じ ID・パスワードを用いる傾向を悪用します。攻撃者は侵入に必要なパスワードリストを、よりセキュリティの弱いサイトから入手して、ほかのサイトで利用します。

パスワードは覚えておくもの?【同じパスワードを使い回さない3つの理由】
パスワードは覚えておくもの?【同じパスワードを使い回さない3つの理由】
スマートフォンを利用していると、会員登録の機会がよくあります。しかし、スマートフォンに慣れていない方ほど、同じパスワードを登録する傾向があります。 そりゃあ、何個もパスワードを覚えられないよ。 実は、「パスワードは覚えない方がよい」のです。 パスワードを覚えようとすると、どうしても簡単なパスワードを使い回すことになりがちです。しかし、パスワードを使い回すと、パスワードを盗まれたときに被害が大きくなります。それだけでなく、どのサービスに登録しているのか把握しにくくなるという問題...

Chromeのパスワード自動生成のしくみ 【Googleアカウントのパスワード管理】
Chromeのパスワード自動生成のしくみ 【Googleアカウントのパスワード管理】
先日、パスワードの決め方について説明したときにGoogle Chromeのパスワード自動生成・保存を紹介しました。 パスワードのクラウド管理にはリスクもありますが、総合するとメモなどよりも安全なのではないかと考えています。 今回は、Googleアカウントのパスワード管理のしくみについて、便利さとリスクについて見てみましょう。 この記事ではAndroidスマートフォンを対象にGoogleアカウントのパスワード管理を説明しています。iPhoneの場合は、「iCloud キーチェー...

QRコードを読み込むと、関連記事を確認できます。

【解説】入力しやすいパスワードを考えてくれるツールを作った(パスワードエントロピーと入力)
タイトルとURLをコピーしました