見出し画像

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

パスワード運用方法の記事、第3回です。
#1ではパスワード管理アプリを使えという話を、#2では二要素認証をしろという話をしました。

今回は、「使えるなら他の認証方法を使え」の話をします。
AndroidやWindowsのロック解除などによく使われている指紋認証や顔認証、PINコード認証など、皆さん使っています?
実はパスワードより安全なんじゃないかと期待されています。

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

おさらい:パスワードの問題点

これまでの記事で、パスワードには様々な問題点があることを紹介してきました。

  • みんなパスワードを使い回しちゃう

  • 簡単に特定されちゃう

  • 色んな方法で盗まれちゃう

  • パスワード認証を無理やり突破する方法も色々ある

パスワードの使い回しなどはユーザーの運用の問題なので、#1で述べたように個々人がパスワード管理アプリなどを使って解決することもできますが…

実はこれらの根本には、「インターネットに繋がっている限りデータは盗られる恐れがある」というどうしようもない問題が横たわっており、
それによって「秘密にすべき情報(パスワード)が全然秘密にできない」という事態を引き起こすからパスワードは限界なのです。

パスワードを入力する画面がインターネット上にあり、入力したパスワードもインターネット経由でどこかからどこかへ伝送する以上、その過程で盗聴されるリスクは0にできないんですね。
使い回しによって引き起こされるパスワードリスト攻撃も、まず最初に何らかの攻撃手法でパスワードのリストを入手しているわけですよ。入手できてしまうのは、入手したい情報がインターネットに繋がっているからです。

そんなパスワードの限界を他の要素でカバーする方法として前回は2要素認証を紹介しましたが、
近年は違うアプローチでそもそもパスワードを使わずに認証する方法も増えてきています。
とうとう記事タイトルの「安全なパスワードの運用方法」から離れてしまう。脱パスワード。さようなら、全てのパスワード。

それがFIDOファイド

知らない言葉かもしれませんが、使ったことは既にあるかもしれません。
例えば何かのWebサービスやアプリなどでログインする際、パスワードを入力せずスマホの指紋認証だけでログインできるものがたまにあります。それはおそらくFIDO認証です。

他には…Windows Helloって皆さん使っていませんか?Windows10や11を起動した際、PINコードとか顔認証とかでサインインできるようになってますよね。あれもFIDO認証が使われています。

FIDOは、パスワードを使わず生体情報や物理的なキーなどで認証できる仕組みのことです。

……なんですが、FIDOの本質はそこではありません。
FIDOが従来のパスワード認証と決定的に違うのは、「秘密にすべき情報をインターネットに流さない」点にあります!

先ほども述べた通りパスワードの根本的な限界は、秘密にすべき情報が全然秘密にできないから。

FIDO認証では指紋や顔や物理的なキーなど色んな要素から好きに認証方法を選べますが、そこは実はさしたる問題ではなく、
重要なのは「秘密にすべき情報をインターネットに流さない」「端末内に厳重保管して絶対に外に出さない」という点なのです。

機密情報を外に出さないのに、インターネット経由で認証?そんなことできるの?

だって、指紋などの情報は絶対に外に出さないのに、インターネット上のWebサイトのログインに指紋が使えるって?それ矛盾してない?指紋情報が外に出てんじゃん?

これを説明するには3つも専門用語を解説せねばなりません。やっていきます。ついて来れるか。

その1 チャレンジレスポンス認証

まず、FIDOにはチャレンジレスポンス認証という仕組みが使われています。これはiパス試験に出るので覚えてください(iパス講座ノルマ達成)

パスワードを使ったチャレンジレスポンス認証を例にして説明します↓

  1. 我々ユーザー側が「ログインしたいよー」とサーバー側に要求したら、サーバーは乱数(ランダムな数値)などを元に「チャレンジ」と呼ばれるデータを生成してユーザーに送ります。

  2. チャレンジを受け取ったユーザーは、まずパスワードを入力します。

  3. その後、入力したパスワードと受け取ったチャレンジとを組み合わせて特殊な計算を行い、その計算結果を「レスポンス」としてサーバーに返します。

  4. レスポンスを受け取ったサーバーは、手元に持っているパスワードなどの情報を使ってユーザーと同じ計算を行い、レスポンスが正しく計算されているかチェックします。要は答え合わせ、検証作業です。

  5. 計算が正しければ認証成功となります。

…という仕組みです。

サーバーに問題を出されて、解答するにはパスワードなどの機密情報が必要、という感じだと思ってください。

このときユーザーとサーバーの間では、問題文である「チャレンジ」と、解答である「レスポンス」だけが行き来しており、パスワード自体はインターネットに出ていないんですね。
これにより、少なくともインターネット上での盗聴が防げます。

FIDOでは、2.のパスワード入力の部分で指紋認証などを行います。でもこれだけではまだFIDOの仕組みの全容には至りません。

その2 公開鍵暗号方式

これもiパス試験に出ます、てかめっちゃ出ます。

先のチャレンジレスポンス認証の説明では、計算に必要な情報としてパスワードを用いており、
これは「パスワードの入力自体は必要」で、「サーバー側にも何らかの形でパスワードの情報が保管されている」ことを意味します。
それだと前回や前々回で紹介したような、盗聴以外の方法によるパスワード流出のリスクは残りますね。

そこでFIDOでは、検証過程でパスワードを使わず「公開鍵と秘密鍵」というものを利用します。

ということで次は公開鍵暗号方式の解説です。公開鍵暗号方式とは…暗号通信の一種で…FIDOからどんどん離れていきますが、基礎知識は大事なので暗号通信そのものから話をします。

そもそも暗号通信というのは、以下のパーツで成り立っています。

  • 平文ひらぶん
    暗号化したい元データのこと

  • 鍵:
    暗号化と復号に必要なルールや情報のこと。暗号通信の一番のキモ。これがバレたら暗号通信は実質崩壊

  • 暗号化:
    鍵を使って平文に特殊な計算を行うこと。元の平文が何なのか分からない暗号文になる

  • 暗号文:
    平文を暗号化したもの。鍵がないと復号できない

  • 復号:
    鍵を使って暗号文を元の平文に戻すこと。暗号化の逆

AさんとBさんで暗号通信したい場合、AさんとBさんが同じ鍵を共有すればいいですよね。
Aさんがデータを送るなら、Aさんは送りたい平文を鍵で暗号化して暗号文を送り、暗号文を受け取ったBさんは同じ鍵で元の平文に復号する。

これは共通鍵暗号方式と呼ばれます。共通の鍵を二人で共有する方式です。

ただ、インターネットでこの共通鍵暗号方式をするには問題があります。共通鍵をインターネット経由で安全に共有できないのです。
当然ですが、鍵を盗られたら(または鍵となる計算方法などが解読されたら)この暗号通信は成立しません。
なので、安全に通信するために暗号化したいのに、その暗号化に必要な鍵を安全に共有するためには鍵が必要で……堂々巡りのような状態に陥ってしまいます。

そこで発明されたのが、盗られても構わない(計算方法がバレてても問題ない)鍵を使う、公開鍵暗号方式です。
そんな鍵、あり得るの?と思うでしょうが、実際あるんですねそういう鍵が…

公開鍵暗号方式では、暗号化しかできない鍵「公開鍵」と、復号できる鍵「秘密鍵」の2本を1ペアにして使います。閉めることしかできない鍵と、開けることしかできない鍵の1ペアです。

講座の資料を流用していく

AさんからBさんにデータを送りたいなら、まず受信者であるBさんが公開鍵と秘密鍵のペアを作って、公開鍵の方だけをAさんに渡します(この公開鍵は暗号化しかできないので、他の人に盗聴されても構いません)
次にAさんが、Bさんから受け取った公開鍵を使って平文を暗号化し、暗号文を送ります。
Aさんの暗号文を受け取ったBさんは、ペアとなる秘密鍵を使って暗号文を復号します。

秘密鍵の方だけ絶対に誰にも教えず持っておけば、公開鍵の方は好きに配って構わないのが、公開鍵暗号方式の素晴らしい点です。世の中の多くの暗号通信はこの仕組みのおかげで成り立っています。

なぜ公開鍵がバレても構わないのかは…どんどん主題からそれるのでここでは割愛!
原理だけかいつまんで説明すると、素因数分解を活用しています。超巨大な2つの素数を掛け算した後、それを素因数分解するのは実は今のコンピュータでも現実的に不可能で、「素数同士の掛け算はできるのに、その逆(素因数分解)はできない」という一方通行な特性を、2本の鍵として利用しています。

その3 デジタル署名

伝えなきゃいけないことまだあんの?いつになったらFIDOの話するのよ。
これで最後なんで許してください。ちなみにこれもやっぱりiパス試験に出ます。

公開鍵暗号方式の先の説明では、公開鍵で暗号化し、秘密鍵で復号を行いました。
これは逆にすることも可能です。秘密鍵で暗号化し、公開鍵で復号することもできます。
これをやると、データの送信者が間違いなく本人であることが証明できるんです。秘密鍵が、重要書類に押すハンコやサインと同じ役割を果たすのですね。それでデジタル署名と呼ばれます。

デジタル署名の仕組みも段取りで説明しましょう。AさんからBさんへデータを送りたいとします。

まず、Aさんが秘密鍵と公開鍵のペアを生成し、公開鍵をBさんに渡します。
その後、Aさんは自分の秘密鍵で平文を暗号化し、暗号文をBさんに送ります。
Bさんは、Aさんからもらった公開鍵で暗号文を復号することができます。
ここまでは、先の例から鍵の所有者が逆になっているだけですね。

このとき、もしAさんを騙る偽者のCさんが現れたらどうなるでしょう。
Cさんが「私はAだ」と嘘をついて、Bさんに何らかのデータを送ります。

Bさんは、(本物の)Aさんからもらった公開鍵で、データを復号しようとしますが…
Cさんから送られてきたデータは、Aさんの秘密鍵で暗号化されたわけではないため、Aさんからもらった公開鍵では復号できません。
よって、Bさんは「Aさんからもらった鍵で復号できないのはおかしい!このデータを送ったお前はAさんじゃないな!偽者め!」と看破できます。

このように、送信者本人しか持っていない秘密鍵を使って暗号化を施せば、(その暗号文を相手が復号できるかどうかで)その暗号化を施した人間が送信者本人であるという証明になるのです。
そのため、秘密鍵で暗号化することを「署名する」と呼ぶことがあります。

改めましてFIDOの仕組み

事前知識の説明がやっと終わったので、FIDOの話に戻ります!
FIDO認証の段取りを初期設定から順に説明しましょう。
ここではスマホの指紋認証でログインできるWebサービスを例にします。

初期設定の段階。登録と呼ばれます。

まずスマホで指紋認証し、指紋認証に成功したらスマホで秘密鍵と公開鍵を生成します。
で、公開鍵を相手のサーバーに渡します(実際にはもうちょっとややこしい処理がありますが割愛)

登録完了後、実際にFIDO認証する際の流れ↓

  1. サーバーは「チャレンジ」を生成し、ユーザーに送ります。

  2. ユーザーは秘密鍵を使…いたいのですが、その秘密鍵を使うためには指紋認証でロックを解除する必要があります。ここでスマホによる指紋認証を行います。

  3. 指紋認証に成功したら秘密鍵が使えるようになるので、受け取ったチャレンジに署名(秘密鍵で暗号化)します。それを「レスポンス」としてサーバーに返します。

  4. レスポンスを受け取ったサーバーは、初期設定時に受け取っていた公開鍵で復号を試みます

  5. 復号に成功して元のチャレンジと同じデータが出てくれば、その署名をしたのが秘密鍵を持つ本人だと証明できるので、認証成功となります。

ここがすごいよFIDO認証

チャレンジレスポンス認証なので、インターネットを行き来するデータは毎回違う内容で生成される「チャレンジ」と、そのチャレンジに署名をした「レスポンス」だけです。
これによりインターネット上の盗聴はほぼ無意味となります。

認証には公開鍵と秘密鍵を利用するため、サーバー側には秘密にしなければならない情報を渡す必要がありません。
サーバーに保管するのは見られてもいい公開鍵だけなので、万が一サーバー側で情報流出などしても実質無害です。

そして最も重要な秘密鍵ですが、これは非常に厳重な方法でスマホ本体の特別な領域に保管されるとともに、利用するにはその端末での指紋認証などの認証が必須となります。
万が一スマホ本体が盗まれても、指紋認証を突破できなければ秘密鍵も利用することができません。
前回の話と絡めると、スマホと秘密鍵が所有物で、指紋が生体情報という2要素認証にもなっているんですね。

秘密鍵と指紋などの生体情報はともにスマホの外には出せない仕組みになっているため、フィッシング詐欺やフォームジャッキングなどで盗られることもありません(というか入力したくてもできません)

FIDO、なぜもっと普及しない?

こんなにすごいのに、現実にはまだほとんどのシステムがパスワード認証で運用されています。なんでだろう?

現実問題として、すでに世界に定着しきっているパスワード認証を直ちに刷新するのは困難だし、ここまで世界に定着したのにはそれ相応の便利さがあるからなんですよね。

  • パスワード認証は枯れた技術なのでシステムを作るのも運用するのも超簡単

  • 認証に使う装置としてはキーボードなどの文字入力装置だけあればいいので超お手軽

  • パスワードさえ分かれば誰でもどんな端末からでも認証できるのが超便利

スマホとPC両方でFIDO認証できるようにしたい場合、端末ごとに登録作業が必要になるのが手間です。人から借りたPCではFIDO認証できないのもデメリットです。
セキュリティ上の理由から私物持ち込み禁止のサーバールームではFIDO認証できません。

また、FIDO認証はとにかく「秘密鍵をいかに安全に保管するか」にセキュリティ性の全てが委ねられています。
秘密鍵を保管し、FIDO認証を行う装置をFIDO認証器と言うんですが、この認証器が絶対にクラッキングされない安全性を持っていなければFIDO認証は成立しません。
ちゃんとした認証器を製造するのが大変なんですね。

2021年現在はその認証器の役割を徐々に最新のスマホやPCでできるようになってきたという状況で、まだ世界にあまねく認証器が普及しているとは到底言い難いでしょう。iPhoneとMacがFIDOに対応したのも結構最近の話ですしね。

Webサービス側も、FIDO認証でログインできるものはまだ全然増えてません。ブラウザ自体は結構対応してるんですが…やっぱ新規開発は大変ですから…

ここまでのまとめ

  • そもそもパスワードを使わないFIDO認証というものがあるよ!

  • 色んな技術を組み合わせて使っていてとても安全だよ!

  • でもまだ世間に広まりきっていないよ…

ということで、
FIDO認証はパスワード認証に代わる次世代の認証システムとして期待されていますが、発展途上です。
使える場所はまだ少ないですが、性能がすごいということは分かったと思うので、使えるならどんどん使ってみましょう。

以上!!!!!!!!!!!

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