コンピューターやスマートフォン、またそれらで利用する様々なサービスやアプリケーション、はたまた家電製品まで、日常で当たり前のように便利に利用している情報機器ですが、使うものが増えると比例して増えていくもの… そう、パスワードです。覚えておくのが大変だと思いのかたも多いのではないでしょうか?
情報機器の活用が当たり前になるにつれパスワードも当たり前に利用する場面も増えますが、そもそもパスワードって何のために存在するのでしょう?
これは簡単、利用者が本人だと認証するためですよね。パスワードは本人しか知らない文字列を利用することで利用者を本人だと認証する仕組みです。本人しか知らない文字列=パスワードは本人の記憶に頼るしかありません。「記憶」しておけないのであればメモ帳やノートなどに「記録」したりするわけですが、そうなると他者の目に触れてパスワードを知られてしまうという「リスク」と、そのために他者が触れないようにする「管理」が必要になりますね。
以前と比較して最近では指紋や虹彩(眼のパターン)などを利用した生体認証も増えましたが、それでも文字列を利用するパスワードを利用する機会はまだまだ多いものです。
今回はそのパスワードについてあらためて考えてみたいと思います。
SNSが普及しそれらを利用したコミュニケーションも当たり前のようになっていますが、そのアカウントが乗っ取られてつながっている人に意図しないメッセージが送信されてしまったなどのニュースも増えています。このように悪意を持ってアカウントを乗っ取るなどの攻撃をする悪い奴は昔から後を絶ちませんが、その攻撃者にとってはSNSは非常に都合のいいサービスだったりします。
多くのSNSは初回利用時のアカウント作成において文字列のパスワードを設定します。文字列のパスワードだからこそ人間は記憶に頼らざるを得ないのでランダムかつ桁数の長いものは使いたがりませんよね。そう、多くの人が自分が憶えておける単語や数字の組み合わせを使いたがります。数字でいうと自身や家族、恋人などの生年月日、文字列でいうと名字や名前、容易に想像できる単語などなど…。これらを組み合わせたフレーズをパスワードとして利用しているかたは割と多くいらっしゃいます。
ですが、SNSにおいてはこれらの利用は危険です。だってSNSならプロフィールで生年月日、つながっているかたの生年月日、名字、名前… それだけでなく記事から趣味や好きなもの、行動範囲などなど様々な情報が得られます。その情報からの単語や数値を組み合わせればパスワードは簡単に類推されてしまいます。最近では投稿した写真で指紋パターンが搾取されるなんて情報もちらほらと…。
自分しか知らないフレーズだからパスワードとしての利用が成立するのに、SNSの利用はそのパスワードをクラックするヒントを出し続けていることにもなります。怖いですね。
このように楽しく利用しているサービスのはずが、なにかしらの被害に遭うリスクを増やしている可能性も十分にあり得ます。
そんなこと言ってもいざパスワードをクラックするなんて特殊な技術や機器、そして知識が必要なんでしょ?と思うかもしれません。
パスワードのクラックされにくさを強度と言ったりします。その強度についても少し考えてみましょう。
例えば自転車によく使われるチェーンの鍵。わかりやすく3桁で000~999まで回る鍵を想像してみてください。組み合わせはいくつあるでしょう?
簡単ですね。1,000通りの組み合わせを持つことができます。簡単に考えれば000から1ずつ足していけば999で一周するので組み合わせは1,000通りと想像するでしょう。この3桁を1桁ずつ考えてみます。
1桁は0~9までの10通りのパターンを持っています。もう1桁増やして2桁で考えれば10の位の数字毎に0~9までのパターンを持たせられますので、
10 × 10 = 100通りの組み合わせと考えることができます。3桁なら 10 × 10 × 10 = 1,000通りの組み合わせになりますね。これを自転車のチェーンの鍵で試そうとすると一つずつ人間の手で回しては開くかどうかを繰り返すことになります。結構な手間ですよね。ましてや自転車の鍵ですから開けようと時間をかけている間も人の目に触れて不審に思われるなどの要件も加わります。仕組みは簡単でもこれらの手間や要件が加わってセキュリティとして成立するわけです。
ではコンピューターではどうでしょうか? 数字を一つずつ足して確かめるなんてコンピューターでは簡単すぎる処理ですし、繰り返しても飽きたり疲れたりしません。見つからないようにこっそりとだってできる場合もあります。なので桁数やパターンを増やして解析されるまでの時間を稼ぐという発想になるわけです。先ほどの3桁の組み合わせでは瞬殺で解析されますので、さらに組み合わせを増やすことを考えてみましょう。
1桁のパターンをたとえば数字だけでなくアルファベットを加えます。数字のパターンは0~9で10パターン、これにアルファベットのa~zの26文字を加えれば
数字10 + アルファベット26 = 36パターンになります。
さらにアルファベットに大文字小文字の判別を持たせることでA~Zの26パターンを加えて
数字10 + アルファベット小文字26 + アルファベット大文字26 = 62パターンになります。
これらのアルファベット大文字小文字を加えた3桁の組み合わせを考えると
62 × 62 × 62 = 238,328通りの組み合わせになり数字3桁の約238倍の組み合わせを持たせられることになります。そして桁数を増やすごとに ×62が増えていくので、組み合わせがどんどん増えていく=試行する回数を増やして解析される時間を稼げることになります。これがパスワードの基本的な考え方なんです。
情報処理技術者試験ではこれまで初級シスアドから応用情報技術者まで何度も同様の問題が出題されています。例えば、
応用情報技術者試験 平成27年春期 問38
パスワードに使用できる文字の種類の数をM,パスワードの文字数をnとするとき,設定できるパスワードの理論的な総数を求める数式はどれか。
ア. Mn
イ. M!/(M-n)!
ウ. M!/n!(M-n)!
エ. (M+n-1)!/n!(M-1)!
試験問題としてあらためて出題されるとむずかしそうに見えますよね。けど先ほどの自転車の鍵の桁数の関係をもう一度考えてみましょう。
数字だけなら 10 × 10 × 10
アルファベット大文字小文字なら 62 × 62 × 62
そう、1桁の文字パターン数に組み合わせの桁数を乗ずれば組み合わせの総数が算出できます。答えは「ア」になりますね(これだけでは試験は合格できませんが)。
桁数が多ければ多いほど解析されるまでの時間が長くなることがこれでわかりましたね。じゃあ長ければ大丈夫かと思いますが、先ほどもSNSでも触れましたが攻撃者はそんな単純ではありません。
桁数が多くなればなるほど人間は覚えにくいため知っている単語を使いたがる傾向があります。そこを利用して辞書の単語やその単語の組み合わせをぶつけていくディクショナリアタックなんて攻撃方法もあります。単語の組み合わせを利用したパスワードは桁数が多くてもこの攻撃に遭えば簡単にクラックされてしまいます。
ということでパスワードを利用するのであれば、桁数は多くかつランダムなパスワードが望ましい強度を持つことになります。
お使いのパスワードと同様の組み合わせを作って、以下のサイトで強度を調べてみると面白いですよ。
Microsoftセーフティとセキュリティセンター
Kaspersky Lab Secure Passowrd Check
How Secure is My Password?
SNSなどのWebを利用した各種サービスだけでなく、例えばご自宅や職場でも利用されていることが多い Wi-Fiもパスワードでログインしますよね。また大手のショッピングサイトに会員登録した際に、クレジットカードなどの会員情報も登録していませんか?
自分は大丈夫だとは思わず被害に遭う前にガッチリ強度のあるパスワードに更新、便利なサービスだからこそ安心して利用できるようにしましょう。