見出し画像

パスワードの安全な運用方法教えます#2(iパス講座)

前回はパスワードにまつわる危険の話と、使い回さないパスワードを全部頭で覚えることの困難さ、それらを対策するには最終的にパスワード管理アプリを使うしかないという話をしました。

今回はパスワード管理アプリと合わせてやっておきたい対策法その2、「2段階認証しろ」の話をします。

※この記事は「現実の身近な事例でITパスポート試験の内容をふんわり理解してみよう」という試みの一環として書かれています。が、別に試験とか関係なく読み物として面白いはずなので読んでください。読もう。

パスワードにまつわる危険はまだまだある

前回の記事ではパスワードを突破する攻撃手法として「総当たり攻撃」「辞書攻撃」「パスワードリスト攻撃」を紹介しました。
が、これらは「正解となるパスワードを当てようとするやり方」であって、実際の攻撃手法の種類はこんなものでは済みません。

  • ログイン画面の脆弱性を突いて認証システムを騙してログインする

  • ログイン画面を人知れず改ざんして入力内容を横から掠め取る

  • 偽のメールやSMSなどから偽のログイン画面に誘導して入力内容を盗むetc…

認証システムの脆弱性を突いて無理やり認証を突破しちゃうやり方もあれば、人間の心理的な隙を突くなどしてパスワードを盗むやり方もある。

例えば入力フォームを改ざんして入力内容を掠め取るやり方は、以前クレカ情報漏洩についての記事でも紹介しました。

↑の記事ではクレカ情報を盗む方法としてフォームジャッキング(Webスキミング)という攻撃手法を紹介しましたが、入力フォームであればなんでも応用できるのでパスワード窃取にも使えます。

他にも、今なお巧妙な手口が発明され続けている攻撃手法の老舗、フィッシング詐欺なんかも過去に紹介しています。

最近だとメールではなくSMSやLINE、SNSのDMなどでスパムが来るパターンも多いですよね。
私の知り合いにも、Vtuberをやっててファンの人から「アカウントのプライバシー公開設定おかしくなってません?見えちゃダメなやつ見えてるかも」みたいなDMが来たので確認したらDiscordを乗っ取られた人がいました。
リンク踏むのダメ、絶対。

日頃から頑張ってセキュリティ意識を高めていたとしても、我々はいつ何時ちょっとした不注意や油断で騙されるか分からないし、
よしんば強固なパスワードを我々がきちんと運用していたとしても、システムの脆弱性を突いて認証システムを突破されたらどうしようもありません。
特に後者に関しては突破されるような脆弱性のあるシステムを運用してしまった側に非があり、ちゃんとしたパスワードを設定していた我々は何も悪くないじゃん…泣き寝入りしろっていうの…?

そのためにも必要なのが2段階認証です。

2段階認証…の前に、認証に必要な要素の話

一般に、認証に使える要素は3つあると言われています。
知識・所有物・生体情報です。

知識…その人しか知り得ない情報。パスワードや秘密の質問など。

所有物…その人しか持っていない物。鍵やスマホ本体(それに紐づく電話番号)、銀行のキャッシュカードなど。

生体情報…その人にしかない身体的特徴。指紋・顔・虹彩・静脈といった体のパーツはもちろん、筆跡・声などその人特有の動作も含む。

これら3つのうち、最もよく使われるパスワードは知識による認証にあたります。
知識認証は他の2つと比べると、偽造不可能で誤判定もせず、損傷や経年劣化もしないので、(容易に特定されたり盗まれたりしなければ)信頼性はとても高いです。デメリットは入力の手間とか暗記しなきゃいけない点とか。

また、万が一バレたりしたとしても変更が容易です。
他の要素だと、例えば静脈とか変更できないので…もし静脈パターンのデータが流出したら、多分その人はもう一生静脈認証できないんですよね…その点パスワードはすぐ変更できるのも大きなメリットの一つです。

総合的にはパスワードが結局一番使いやすくて良いんですけど、さっき太字で()内に書いた言葉が全てなんですよ。パスワードは容易に特定されたり盗まれたりする。悲しいことに…現実は非情である…
理想的に運用できていれば強いはずなのに、現実には今まで散々説明してきた数々の要因によって弱くなってしまっています。現実問題としてパスワード認証の安全性には限界が見えているのです。

そこで、「パスワードを完璧に運用することはもう諦めて、パスワード以外も使えばいいじゃん」の域に達したのが2段階認証です。

2段階認証とは

2段階認証は言葉の通り、
1つ目の認証を突破したら2つ目の認証が現れ、2つ目も突破することでようやく認証が完了する仕組みのことです。

パスワードを入力したら電話番号宛にSMSで数字4桁が送られてきて、それをさらに画面に入力するとやっとログインできる、みたいなシステムに出くわしたことありませんか?あれが2段階認証の一例です。

2段階認証は2段階を踏んでいればその名が使えるはずですが、現実のところは2要素認証でもあるのがほとんどです。
先の例ではパスワードが知識で、電話番号が所有物にあたります。パスワードを知っていて、かつ電話番号を所有している人でないと認証に成功しません。2要素認証かつ2段階認証です。

逆に、1要素を2段階認証しているシステムってあるの?

ある、というか、あった。
かつて日本では、パスワード+秘密の質問(あなたが最初に飼ったペットの名前は?とか訊かれるやつ)という、1要素の2段階認証が流行ったことがあり、その名残で今も日本では2段階認証という言葉が使われています。
しかし海外では「2FA(Two-Factor Authentication)」(直訳すると2要素認証)やMFA(Multi-Factor Authentication)(多要素認証)という言葉しかほぼ使われません。

現代では、「認証の段階数にあまり意味はなく、要素数を増やすことが重要」というのが定説です。
秘密の質問だって、知識認証である以上はパスワードと同様の手口でいくらでも盗んだり特定したりできますからね…他の要素を混ぜずに知識認証の数だけ増やしても、セキュリティが強固になるとは言い難い…

なお、iパス試験では「2段階認証」という言葉で出題されるので、試験対策の観点からは2段階認証という言葉の方を覚えてください。教える側としては複雑な気持ち。

今後は2要素認証って呼んだ方がいいな

これから話す内容で重要なのは段階数でなく要素数なので、ここからは2段階認証という言葉は使わないことにし、2要素認証の素晴らしい点を書いていきます。

パスワードの限界の話を長々としてきましたが、2要素認証にするとどんな素敵なことが起こるでしょうか?

  • 昔使ったショッピングサイトでパスワードが流出した!私はパスワードを全部使い回しちゃってるし、てか自分の名前+誕生日がパスワードなので余裕で特定できるし、これからあらゆるアカウントが全部ハッキングされちゃう!人生終了!
    →2要素認証してたおかげでパスワードだけではハッキングできない!よかったね!

  • 可愛い女の子から「LINE友だち登録しよ♪」ってTwitterにDM来たからURL開いたらアカウント乗っ取りのスパムだった!Twitterのメアドとパスワードが盗られた!
    →2要素認証してたおかげでパスワードだけでは乗っ取れない!よかったね!

  • 新登場したQRコード決済アプリ「xPay」を早速入れたんだが、セキュリティ超ガバガバで誰でも簡単にパスワード認証を突破できるらしいぞ!?やばいじゃん!俺のアカウントで勝手に買い物される!
    →2要素認証してたおかげでパスワード認証が実質ノーガードでも無事だった!よかったね!

いかがでしたか?(定型句)
パスワードクラッキングの原因と責任が自分にあるのかシステム側にあるのかに関わらず、2要素認証であれば大体の事故は2要素目で防げます。助かる!

知識・所有物・生体情報による認証それぞれに長所と短所があり、単体だと何らかの問題が生じるんですが、組み合わせることで互いの短所を打ち消してセキュリティ性を高めることができるんですね。

最もポピュラーな2要素認証、「パスワードでログイン後、電話番号宛にSMSでワンタイムパスワードが来る」というパターンの場合、
電話番号という所有物およびそこに届くSMSを盗むことが難しいので、セキュリティ性を担保できています。
特別な装置やアプリが要らないのでお手軽でもあるし、ガラケーでもできます。2要素認証の主流と言えるものです。

SMS認証にも忍び寄る影

ただ、近年はそのSMSも100%安全とは言い切れない様子です。

世界的にもSMS認証は流行っているわけですから、クラッカーとしても当然SMS認証をクラッキングしたくなる。
そこでいくつか出てくるのが例えばこういうやり方。

  • アプリの権限でSMSを盗聴する
    (ゲームとか便利ツールみたいなアプリをスマホに入れると、そいつが実はSMSにアクセスする権限を持っている悪いアプリで、許可してしまったが最後SMSをリアルタイムで全部盗み見られる)

  • SMSのネットワークに侵入して盗聴する

  • SIMスワップなどの方法でSIMカードや電話番号を奪う
    (SIMスワップ…SIMカードが故障・紛失などすると代替SIMカードに交換してもらえることを利用する。虚偽申告でターゲットのSIMカードを紛失したことにして、ターゲットの電話番号が利用できる代替SIMカードを不正入手する)

実は、日本のSIMカードとSMSネットワークは相当に信頼性が高く強固なので、日本ではSMSネットワークの盗聴やSIMカードに悪さをするタイプのSMS認証クラッキングは発生していません。
ゆえに日本ではまだあまり深刻ではないのですが、海外では数年前からSMS認証のクラッキング事例が挙がっています。

「危険だからもう使わない方がいい!」というほどではなく、むしろ今はまだまだ使われまくっていますが、絶対安全と安心しきれるわけでもないことは頭の片隅に残しておいてください。

じゃあ現状の無難解答は…?

SMSすら100%安全でないなら、何を使って2要素認証すりゃいいんだよ!

世界のテクノロジーは目まぐるしく変化するので、ここでは執筆時点での無難な解答しかできませんが、今なら認証アプリを使うのが良いんじゃないでしょうか。

認証アプリって?

2要素認証の1要素として、スマホ本体を利用するためのアプリです。
Google Authenticatorとか、Microsoft Authenticatorなんかが有名です。

認証アプリによる2要素認証を設定したアカウントでは、
パスワードなどでログイン後、「お前のスマホの認証アプリを起動しろ」と指示されます。
そこで認証アプリを開くと、その場限りでしか使えないワンタイムパスワード(OTP)が発行され、それを画面に入力すると認証が完了します。

OTPの他、専用のボタンを押すだけの仕組みになっている場合もあります。
パスワードなどでログイン後、「お前のスマホの認証アプリで認証しろ」と指示されるのでスマホを開くと「認証する」ボタンが出ていて、それを押せば認証が完了します。
あるいは画面に数字が表示されていて、「画面と同じ数字をあなたのスマホの認証アプリで選んで押してね」なんて仕組みの場合も。

電話番号ではなく、認証アプリがインストールされているスマホ本体を所有物として認証するため、電話番号やSMSに由来するクラッキングは当然効きません。
スマホ本体と認証アプリにも、PINコードや指紋や顔認証などによるロックをかけておけばより安全です。
SMS認証と違ってアプリとアカウント双方で初期設定する手間こそあるものの、利用できるなら現状最も無難で楽な選択肢です。

なんでただの数字がそんなに安全なの?

不思議ですよね。OTPとして発行されるのは数字6桁とかで、前回の記事のパスワード基準で考えたら超ショボいのに、なぜこれが安心安全と言えるのか。

GoogleやMicrosoftの認証アプリは、TOTP(Time-Based One-Time Password)という仕組みを利用しています。現在時刻をもとにしてOTPを発行する仕組みです。
これを解説しましょう。

今あなたは、なんかのWebサービスのアカウントに対して「よーし今から2要素認証に認証アプリを使う設定をするぞー!」と意気込んでいるとします。

設定を開始すると、まずそのWebサービスなどのサーバー側が、あなた一人とだけ共有する「秘密の鍵」を生成してくれます。
そして、その「秘密の鍵」をあなたの認証アプリと共有します。なるべく安全にあなたの認証アプリとだけ共有する方法として、スマホでQRコードを読み取ることで共有がなされることが多いです。

初期設定を図解するとこう

こうして「秘密の鍵」の共有ができたら、その「秘密の鍵」と現在時刻を組み合わせて特殊な計算を行うことで、OTPを発行できるようになります。

TOTPによる認証のイメージ図はこう

認証アプリで認証する際には、サーバー側と認証アプリ側の双方で、それぞれの持っている「秘密の鍵」と現在時刻を使ってOTPを発行します。
このとき発行されたOTPが一致していれば、同じ「秘密の鍵」を共有している同士で、かつ今この瞬間にログインを試みている人だということが証明できて、認証に成功するのです。

「秘密の鍵」が一致しない場合、発行されるOTPも全然違うものになるので、これが本人確認になるわけです。この「秘密の鍵」はとても重要な機密情報です。
また、時刻が違ってもOTPは別物になるため、発行するたびに毎回違うOTPが生成されます。昔使ったOTPが盗まれても何の問題もありません。
もし仮に総当たり攻撃を仕掛けられたとしても、攻撃しているそばから時間経過でOTPはどんどん変わっていくので総当たりでのヒットはほぼ無理です。

このTOTPの仕組みのもう一つ便利なところは、「OATH規格」というもので世界的に規格化されているため、幅広く色んなサービスに対応できる点です。
Googleの認証アプリやMicrosoftの認証アプリが、Twitterの2要素認証にも使えるし、Amazonの2要素認証にも使えるし、その他対応していれば大体どのサイトでも使えるんです。この点もおすすめポイントの一つです。

すごく良さそうに思えるがこれにも問題点はあるのか?

どんな仕組みも万能で無敵ということはなく、やっぱり何かしらの弱点はあります…
TOTPによる認証の場合…

例えば、現在時刻をもとに毎回違うOTPが生成されると説明しましたが、実際には30秒ごとにOTPが変わる仕組みなので、クラッカーがリアルタイムでターゲットの操作を監視していればOTPをリアタイ盗聴&30秒以内に即利用することは理論上可能です。
たった6桁の数字だから、OTPを利用するタイミングさえ分かれば盗むこと自体はそんなに難しくないんですね。

Wi-FiやBluetooth経由でキーボード入力を盗聴するキーロガーなんてのも世の中にはありますし…そこで、キーボード入力はさせず認証アプリの方でボタンによる認証操作をさせるパターンもあるわけです。

完璧に安全なセキュリティ設定なんてのは、突き詰めだすとクラッカーとのイタチごっこになってキリがありません…
現実的な手間を考慮した上で、及第点ぐらいの堅牢さを持つ方法を選ぶのが、完璧ではないが無難な解答と言えるでしょう。

ここまでのまとめ!

  • パスワードという仕組みは根本的にもう限界です!

  • なので2要素認証をしましょう(世間では2段階認証って言うね)

  • 2要素目としてはSMS認証が定番だけど、もう少し手堅く使うなら認証アプリが無難だよ

だいぶ長くなりました!セキュリティの話は嘘や誤解などなく正確に書かなきゃいけないので、噛み砕いた説明をするにしてもどうしても言葉が増えてしまうんですね…

次回、最終回!スマホのロック解除に使う指紋認証やPINコードなどがどうして安全なのか、という話をします!!!!!!!

iパスに関する記事をまとめたマガジンはこちら↓


この記事が気に入ったらサポートをしてみませんか?