ここ何年もアカウントの乗っ取り事件が問題となっています。パスワードの使い回しや、ありがちで容易なパスワードを使うことにより、他人が容易にパスワードを類推してしまうのです。その抜本的な解決策は、メールやSMSを利用した二段階認証を有効にすることや、パスワードマネージャーなどを導入し、できるだけ難解なパスワードを設定することです。今回は、なでしこで難解なパスワードを生成するツールを作ってみましょう。

  • 難解なパスワードを生成するツールを作ろう

    難解なパスワードを生成するツールを作ろう

パスワードマネージャーを使おう

SNSやネットバンキング、オンラインショッピングなど、私たちは日々多くのアカウントを使い分けて利用しています。同じパスワードを使い回すと一つのパスワードを覚えるだけでよく便利なのですが、パスワードが一度漏洩すると、全てのアカウントが乗っ取られてしまうという問題に直面します。

そこで、パスワードマネージャーを使うのがオススメです。パスワードマネージャーを使うと、あらゆるパスワードを保存できます。そのため、基本的にマスターパスワードを一つだけ覚えておけばよく、個々のアカウントのパスワードは覚えていなくても問題ありません。加えて、非常に難解で長いパスワードを設定することが可能になります。また、Webブラウザなどにも自動でパスワードを覚えるパスワードマネージャーが搭載されているので、これを利用すると便利です。

なお、容易に類推できるパスワードというのは、辞書に掲載されている一般的な単語です。また、ゲームやアニメのキャラクターの名前を組み合わせたものも比較的容易に類推可能です。そのため、全く意味の分からない難解なパスワードを設定するのが安全です。

難解なパスワードとは

それでは、難解なパスワードとはどんなパスワードでしょうか。まず十分な桁数があることです。そして、アルファベットの大文字、小文字、数字、記号と異なる種類の文字を組み合わせたものです。さらに、辞書に載っている単語やキャラクターなどの名前など意味のある文言を使わないことも大切です。また、誕生日や住所など個人に関係する数値や文字を使わないようにしたものです。

この中で最も大切なのは、十分な長さのパスワードを作成することです。それにしても、かなり条件が多いですね。つまり、これらの条件を人間が自分で考えるのは非常に大変なのです。機械的に自動生成したものを利用するのが良いでしょう。

改めて箇条書きにしてみましょう。

  • (1)十分な桁数を持つこと
  • (2)異なる文字種類を組み合わせること
  • (3)意味のある文言を使わないこと
  • (4)個人情報に関係した数値を使わないこと

今回、作るパスワード生成ツールでは上記の(1)と(2)の条件を特に意識してみましょう。

簡単にランダムな数値を作成してみよう

一気に本格的で難しいプログラムを作ろうとすると、挫折することが多いものです。そこで、まずはランダムな数値を作成するだけのプログラムを作ってみましょう。ここでは12桁のランダムな数字を作成してみましょう。

「なでしこ3簡易エディタ」を開いて、以下のプログラムを入力して実行してみましょう。

結果=「」
12回
  N=10の乱数
  結果=結果&N
ここまで。
結果を表示。

プログラムを入力したら「実行」ボタンを押してみましょう。ボタンを押す度に、ランダムな12桁の数値が表示されます。

  • ランダムな12桁の数値を生成するプログラム

    ランダムな12桁の数値を生成するプログラム

プログラムのポイントは『乱数』命令です。『10の乱数』と書くと、0から9までのいずれかの数値をランダムに返します。正確無比なコンピューターを利用してデタラメな数値を計算で生成しているというのが面白いですよね。

そして、このプログラムでは、12回、生成した数値を変数「結果」の末尾に追加することで、12桁のランダムな数値を作成しています。

数値でなくて文字にしてみよう

次に、数値だけではなくランダムな英数字のパスワードを作成してみましょう。数字ではなく文字を組み合わせる場合には、候補となる文字列を用意しておいて、ランダムにその文字列から一文字選び出すようにします。

先ほどと同じように、なでしこ3簡易エディタにプログラムを書き込んで実行してみましょう。

# パスワードの候補文字を指定 --- (*1)
候補=『abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-』

# 繰り返しランダムな文字を選ぶ --- (*2)
結果=「」
12回
  N=(候補の文字数)の乱数
  C=候補のNから1文字抜出す。
  結果=結果&C
ここまで。
結果を表示。

プログラムを実行すると以下のように表示されます。

  • 12桁のランダムな文字列を生成するプログラム

    12桁のランダムな文字列を生成するプログラム

上記のプログラムを確認してみましょう。(*1)の部分でパスワードの候補となる文字を変数「候補」に代入します。ここで指定した中から一文字をランダムに選び出して組み合わせるようにします。

そして、(*2)の部分で12回ランダムな1文字を選び出して変数「結果」に追加していきます。『文字数』命令を使うと文字列の文字数を調べることができるので、変数「候補」の内容を変更しても自動的にその候補の文字全ての中から選ぶようになります。そして『SのNからM文字抜出す』命令を使うと、任意の場所にある文字を抜き出すことができます。

パスワード生成ツールを完成させよう

それではプログラムを完成させましょう。上記のプログラムでは、対象文字列から完全にランダムなので、文字種類の組み合わせが不完全になりやすくなります。そこで違う文字種類が入り乱れるように、文字種類ごとに候補を作成し、ランダムにこれらを組み合わせるようにしてみます。また複数の候補から目視で選べるように、最初から100個の候補を作成するようにしてみます。

なでしこ3簡易エディタに以下の書き込んで実行してみましょう。

# --- パスワードの設定 --- (*1)
指定桁数=20
候補一覧=[
  『abcdefghijklmnopqrstuvwxyz』,
  『ABCDEFGHIJKLMNOPQRSTUVWXYZ』,
  『0123456789』,
  『!"#$%&'()-=^~¥|@`[{;+:*]},<.>/?_』
]

# --- 100個のパスワードを生成 --- (*2)
100回
  難解パスワード生成して表示。
ここまで。

●難解パスワード生成とは
  結果=『』
  (指定桁数)回
    候補乱数=(候補一覧の要素数)の乱数。# --- (*3)
    候補=候補一覧[候補乱数]
    N=((候補の文字数)の乱数)+1 # --- (*4)
    C=候補のNから1文字抜出す
    結果=結果&C
  ここまで。
  結果を戻す。
ここまで。

「実行」ボタンを押してプログラムを実行してみましょう。難解なパスワードが100個作成されて表示されます。

  • 英数記号を組み合わせて難解なパスワードを生成するプログラム

    英数記号を組み合わせて難解なパスワードを生成するプログラム

プログラムを確認してみましょう。(*1)の部分ではパスワードの桁数とパスワードで使う候補一覧を指定します。文字種類ごとに指定します。

(*2)の部分では100回パスワードを生成するようします。関数「難解パスワード生成」で実際のパスワードを作成します。(*3)の部分では文字種類を選び出し、(*4)の部分で選び出した種類の中から1文字選び出すという手順になっています。これによって、できるだけ同じ文字種類が連続しないようにしています。

パスワード生成のまとめ

以上、今回はランダムに文字を組み合わせて、できるだけ難解なパスワードを生成するプログラムを作ってみました。もし可能ならパスワードでよく使われる単語を集めた辞書を用意しておいて、辞書に該当する語句があればそれを弾くようにできると完璧ですが、ここではプログラムを簡単にするため機能を省略しています。

とにかくパスワードマネージャーを使えば、そのアカウントで設定できる最大のパスワード桁を指定しても全く苦になりません。できるだけ長いパスワードを指定すると安全なので、この機会に難解なパスワードに変更してみるのはどうでしょうか。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。