Amazon,Facebook,Twitterなどウェブサービスではログインが必須で,ウェブサービスの数だけアカウントの登録が必要になる.
「ユーザー名」と「パスワード」の組み合わせを記憶するのは大変で,4個ぐらいまでなら覚えられるかもしれないが,正直覚えられない.
結局は,ユーザー名やパスワードの使い回しをしてしまう.久しぶりに開くSNSだとユーザー名もパスワードも忘れてしまって,結局ログインするときに毎回パスワードリセットすることもあった.
実は,今はパスワードをほとんど覚えなくて済んでいる.今日はパスワードの話.
パスワードの使い回しがやばい
一人当たり平均27個のウェブアカウントを皆持っているらしい.SNS系もあれば,仕事で使うようなものから金融関連等の重要なものまで.
27個のユーザー名とパスワードの組み合わせは正直覚えられない.ユーザー名は辛うじて大丈夫かもしれないがパスワードとなるとよっぽど安易なパスワードを設定しない限り記憶するのは難しい.
よく聞く安易なパスワードは「12345678」だが,流石にこれを使う気にはなれない.
パスワードを使い回すと当然そのパスワードを使っている他のウェブサービスも芋づる式に情報が漏れてしまう.使い回しは絶対に避けるべきだ.
パスワードは長いほどいい?
パスワードの決定はウェブサービスよって異なるが,だいたい6〜8文字程度.
任意の長さにも決めるウェブサービスも存在するが,今はパスワードは長ければ長いほど安全という定説.長ければ予測される候補の難易度が上がるためだ.
結局はパスワードが誰かに漏れることによって悪用されたり個人情報が漏れることが怖い.意図せずパスワードが漏れることもあれば,悪意のある対象からパスワードを盗み出されることも避けなければならない.
ここでパスワードに関する技術的な2つのことを紹介する.知ってて損はない.
パスワードのエントロピーって?
実は情報量エントロピーでパスワードの安全性を定量的に評価できる.エントロピーが高いほどパスワードが予測されにくいとされている.
例えば,2通りのパスワードを使い回しているとエントロピーは「1bit」になる.情報量は貴重な情報ほどエントロピーが高くなり,パスワードを予測しようとする人が持つ事前情報量に依存することが知られている.
情報量エントロピー\(y\)の計算は,
\[y = \log_{2}(x)\]
で計算できる.単純に対数を取るだけだ.
アルファベット26文字なら約4.7bitとなる.アルファベットの大文字を含めると大体5.7bitになる.
ここからわかるように実はパスワードの文字数を増やすよりもアルファベット・数字・大文字などの文字の種類を増やす方が情報量が大きくなる.
2019年にはブルートフォースアタックで1秒間に1000億個のパスワードが試せることができたらしい.8文字のパスワードだと12分で突破可能だ.
パスワードのハッシュ関数って?
パスワードはハッシュ関数という数学アルゴリズムにて変換されて保存されるのが一般的.入力した値をハッシュ関数で変換し,全く別の値が出力される仕組み.
ビットコインのブロックチェーンでは,取引のトランザクション中に使われているそうだ.確か「SSL」にも使われていたような.
一度,ハッシュ化された後に元の値つまりパスワードに戻すこととは困難な不可逆性の特徴を持つが,「SHA-1」というハッシュ関数で異なる入力値から同じ出力値が出力されたことがあったり...
例えば「a」をSHA-1でハッシュ値に変換すると,
a
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
こんな複雑なハッシュ値に変換される.ランダムな文字列のパスワードだとより複雑にはなるだろうが,多くの人は覚えるためにパスワードも意外とランダムでないことが多い.
ここまでの話をまとめると,
- パスワードの使い回しは危険
- パスワードの安全性が定量的に分かる情報エントロピー
- パスワードは長い方がいいが長さよりも種類を増やす方が効果的
パスワードマネージャーを使う
パスワードは複雑で使いまわさずにウェブサービスごとに変えるのが良いことがわかったが,絶対覚えられない.
そんな時に使うのが「パスワードマネージャー」.
パスワードマネージャーなら,15桁程度のランダムな文字列を自動で生成してくれ記憶してくれる.これなら頭で記憶するよりも安全なパスワードが生成できる.
これからはパスワードは頭で覚えておくものっていう概念を捨てなければならない.
では,パスワードマネージャーから情報が漏れたらどうなるのか.パスワードマネージャ内の情報はランダムとなっているため漏れたとしても,情報が特定されることは不可能か,もしくは途方もない時間が必要で少なくとも頭で記憶するパスワードよりリスクが少ない.
二段階認証を使う
「7pay」の不正利用問題が最近起こりに「2段階認証」という言葉も話題になった.自分は普段からGoogle Authenticatorを使うことが多い.
ユーザ名とパスワードだけではなく,「メールやSMS認証のワンタイムパスワード」,「Google Authenticatorの2段階認証」や「USBを使用した物理キー」なんかもある.
これからはパスワードが不要のログインがウェブの標準化の動きとなっている.
とにかく今は,パスワードを頭で記憶する行為をやめた方がいい.