もずく@もうすぐ令和にアップデートです。
9割方書いていた記事が全部消えたけど、気を取り直して、もう一度この企画にトライします!
みんなもALISの編集画面を複数同時に開いたら駄目だぞ。
最後にアクセスした編集画面の内容で上書き保存されてしまうからな!
おじさんとの約束だ。
皆さん、パスワード管理🔑はどうされていますか?
私はKeePass2という管理ツールを使っていますが、スマホでの使い勝手が悪くて閉口しています。Mac&iPhoneユーザだったときに使っていた1Passwordは有料だけど使い勝手がよかったなぁ…
最近はウェブサービスよりもスマホアプリが主流になってきて、ID・パスワードという概念が希薄な人が増えてきたみたいです。スマホにアプリをインストールするときに設定はするけど1回きりだと思っているらしく、スマホを無くしたら一から再スタートなんですと。
そんな若者あふれる4我が職場(=大学)は利用するIDとパスワードが3セットもあるから新入生はいつも阿鼻叫喚です🤯
そしてどれだけ大切にパスワードを管理したところで、フィッシングサイトに引っかかれば終わりですし、フィッシングに気をつけていてもそこらの企業が勝手に流出させてしまうこともあります。
だからいまやTwo-Factor Authentication(2FA/二段階認証)をかけておくことが当然になっています。ALISにはまだないですけどもね、2FA。
しかしこれがまた面倒くさい。Google Chromeを使っているときはAuthyの拡張機能があったので助かりましたが、Braveをメインに使うようになってからは逐一スマホでAuthyを起動しています。
ここまでに大変になってくると、パスワードというシステムそのものに欠陥があると思えてきますよね。
てか、パスワードの代わりに指紋👆でピッとすれば、いちいち覚えておかなくていいんとちゃうん…?
ただし、指紋データが盗まれてしまったら終~了~になるから、指紋データはネットワークに流さないようなうまい方法で…ね?
もちろん賢い人たちはそんなことを昔(といっても2012年頃)から考えていたわけで、生体認証などを使ってパスワード不要でオンライン認証ができるFIDO(ファイド)という規格があります。いまはFIDO2というバージョンになっています。
詳しい内容は後回しにしますが、FIDO2では、流出するとヤバい情報はそもそもネットワーク上を流れません。
認証器と呼ばれるデバイスの上で認証に必要な情報(これは他人に知られても構わない)を生成し、その情報だけをネットワークに流す仕組みです。
そして、そのFIDO2の仕組みをJavaScriptから使えるようにするためのWebauthnという規格がウェブの標準化団体W3Cから承認されたのが2019年3月4日。ウェブ業界ではまさに平成最後のビッグニュースといえます。
FIDOやFIDO2は以前からあったわけで、規格に準拠した認証器(Yubikeyなど)を使えば指紋でログインできるサービスも存在したのですが、特別なデバイスが必要ということもあってなかなか普及していなかったのです。
しかし、Webauthnの登場によってウェブアプリで対応するものが一気に増えることが期待されています。事実、主要ブラウザはほぼすべて対応済みで(例によってAppleが遅いけど)、ウェブサービス側も大御所たちが積極的に対応を進めています(例によってAppleがアレですけども…)。
このWebauthnの承認にやや先駆けて、2019年2月25日、Android(Ver.7.0以降)がFIDO2準拠の認証器として認められたという発表がありました。Windowsも実は2018年秋のアップデートでFIDO2の認証器として対応しています。
つまり、Yubikeyのような特別な認証器を使わなくても、WindowsやAndroidの生体認証機能(指紋や顔認識)を使ってWebauthn対応サービスにパスワードなしで安全にログインできるということです。
2019年はFIDO2普及元年と言われています。楽しみな1年となりますね。
さて、これで話が終わってしまっては「時代のアップデート」とまではいえません。
FIDO2/Webauthnの仕組みがブロックチェーンにまで浸透してこそ、安全・安心な未来がやってくると私は考えています。
まず、ブロックチェーンが個人の暗号資産(仮想通貨)をインターネット上で安全に維持・管理できるのは、暗号技術を使用しているからです。暗号資産(crypto asset)という名前の由来ですね。
ブロックチェーンで中心的な役割りを果たしている暗号技術は公開鍵暗号というもので、公開鍵(public key)と秘密鍵(private key)という二種類の暗号鍵を使う方式です。[詳しくはこちらの記事をどうぞ]
この秘密鍵というのは、いわばプロックチェーンのパスワードで、暗号資産(仮想通貨)の詐欺でよく「教えてくれ」と言われるやつです。もちろん絶対に教えてはいけません。
暗号資産は直接的に金銭価値を持つものがほとんどなので、秘密鍵を盗難されたり流出させたりしたら、そこで終~了~です。
ということで、先程のFIDO2/Webauthnのパスワードと同じように、「秘密鍵」という存在をユーザの触れる範囲から消してしまって、指紋だけでブロックチェーンが利用できるといいですよね。
実際、スマホの暗号資産ウォレットアプリ(Trustウォレットなど)でÐAppsを使ったことのある人は、これに類した体験をしているはずです。
ウォレットアプリを起動するときに指紋認証が求めらて、そのあとはどのÐAppsにアクセスしてもログインなしで最初から自分のウォレットが紐付けられた状態になっていると思います。
暗号資産を利用するのにパスワードを入力する必要がない。素晴らしいですよね。初めてTrustウォレットを使ったとき、私はかなり感動しました。
つまり、FIDO2/Webauthnの普及によって到来する未来が、ブロックチェーンの世界では一足先にやってきている…というわけです。まあ、Touch IDによるApp Storeでの買い物とかも同じなんですけども。
しかし次に述べるように、暗号資産のウォレットアプリとFIDO2/Webauthnではセキュリティのレベルが違うのです。
というわけで、FIDO2/Webauthnとウォレットアプリの違いについて語っていきたいわけですが、先にFIDO2/Webauthnの仕組みに踏み込みます。ちょっと長いです。
技術的なことはいいや…という人は次の見出しまでスキップしてください。
実は、FIDO2/Webauthnの中核となる技術もブロックチェーンと同じく公開鍵暗号です。つまり、公開鍵と秘密鍵を使っています。
FIDO2を一言でいえば、「スマホなどの認証器」と「公開鍵暗号」を組み合わせて本人認証するための規格です。
公開暗号鍵を利用して本人確認をする方法についてはこちらの記事も見ていただきたいのですが、超ざっくりいうと、
・ある秘密鍵で暗号化したものは、ペアとなる公開鍵でしか復号(解読)できない
・秘密鍵は手元に持っておき、それとペアとなる公開鍵は事前に相手に渡しておく
という前提の上で、例えばALISブログにログインしたいとすると、
1. ALISブログから適当なデータ(乱数など)を送ってもらう
2. そのデータを自分の秘密鍵で暗号化(電子署名)してALISブログに送り返す
3. 事前にALISブログに登録しておいた自分の公開鍵でその暗号データを復号してもらう(復号に成功して乱数も一致すればOK)
という手順によって、自分が「その公開鍵に対応する秘密鍵を知っている」ことを証明できるというものです。
この場合、ALISブログサービスはユーザID(mozkなど)とそのユーザの公開鍵をセットにして事前登録しているので、その公開鍵のペアとなる秘密鍵を持っていることを証明すれば、そのユーザIDの持ち主であることが示せるというわけです。
ここまでは公開暗号鍵を使った一般的な本人確認の話(電子署名の話)ですが、FIDO2のポイントはそれに「認証器」というデバイスを組み合わせて使用することです。
この認証器がセキュリティ的に非常に強力にできているのです。
公開暗号鍵を使うためには、秘密鍵と共有鍵のペアを最初に生成しないといけませんし、あとで秘密鍵を使って暗号化(電子署名)するために秘密鍵をどこかに保管しておかなくてはいけません。
この秘密鍵が外部に漏れてしまったらまずいわけですが、FIDO2に認定された認証器は、秘密鍵を使った署名や秘密鍵の保管を端末内の特別に保護された領域(TEE: Trusted Execution Environment)の中で行います。
盗まれてはいけない情報はすべて、インターネットの世界から触れることのできない領域で処理・保管されるのです。
そういえばここまで指紋認証の話が出てきてなくない?と思ったかもしれませんが、FIDO2/Webauthnで生体認証が使われるのは、自分がその認証器の持ち主であることを証明するときです。
生体認証機能を持っている認証器(持たないやつもある)は、生体認証によって持ち主が特定されたときのみ秘密鍵を使った処理を実施します。セキュア!
そして、照合用の生体情報(指紋とか顔とか)はもちろん例の特別に保護された領域に保管されます。完璧!
しかも、認証器にはレベルが3段階あります。
インターネットからの隔離をソフトウェア的に行うL1、ハードウェア的に隔離することでウィルス等にも耐性を持つL2、そして認証器を奪われて解析されても大丈夫なL3です。L3とかスパイグッズですね。
といっても、2019年4月10日にeWBMという企業のGoldengateシリーズがやっとこさL2認定をもらったところなので、スマホではL1が限界なのかも。
ちなみに、FIDO2はそんなセキュアな認証器に超依存しているので、認証器(例えばAndroidスマホ)を紛失すると秘密鍵はもう復旧できないみたいです。怖…
更には、ある認証器で生成した暗号鍵のペアを別の認証器にコピーすることができないので、例えば、ALISブログにAndroidスマホでFIDO2登録しても、Windows PCを使うときには改めてFIDO2登録する必要があります。自分の指紋は同じなのに…
その辺りのことはFIDOアライアンスの皆様も当然わかっているわけで、いろいろと対策は講じられているみたいです。
上の技術的な説明をスキップしなかった方にはわかっていただけたかと思いますが、FIDO2の仕組みで実現していることは秘密鍵の生成・保管・署名と生体情報の照合・保管を特別に保護された領域で行うということです。
秘密鍵の処理については、ブロックチェーンとFIDO2で行っていることはそこまで大きく違いません。ブロックチェーンを利用するというのはトランザクションデータ(取引データ)に電子署名するという行為なので。
だから、ブロックチェーンの秘密鍵についてもFIDO2/Webauthnのような仕組みが作って、スマホやPCの特別に保護された領域(TEE)を使わせてもらえるようになるはず…というのが素人代表もずくさんの考えです。
とはいえ、AndroidやWindowsが認証器としてFIDO2に対応し、主要ブラウザがWebauthnに対応したのは、大企業などで構成されるFIDOアライアンスが規格をきっちり整えて業界に働きかけてきたからです。
ブロックチェーンをこれと同じ状況にもっていくには、数多あるブロックチェーンで秘密鍵の使用方法(トランザクションのフォーマット)を規格化する必要があるかもしれません。
また、FIDOアライアンスのような、セキュリティ要件が満たされていることを認定する団体のようなものも必要だと思います。
他にも、根本的なところでは、ブロックチェーンでは1つの秘密鍵が1つのウォレット(暗号資産)に対応する※という点があります。つまり、あるウォレット(暗号資産)にアクセスできるのが特定のデバイス(スマホなど)に限定されてしまうということです。
FIDO2が対象とするサービスログインなどの本人確認であれば、1つのユーザIDに複数の秘密鍵(公開鍵)を対応させておけば、登録はデバイス毎にする必要があるものの、複数のデバイスから同じユーザIDでログインできます。
ウォレットにアクセスするデバイスが固定されてしまうというのでは、せっかくインターネット上に帳簿のあるブロックチェーンの利点が活かせません。
※もう少し正確にいいますと、最近のウォレットアプリでは取引毎に秘密鍵と公開鍵が裏で生成・利用されているらしいのですが、その鍵ペアを規則的に生成するための「マスター秘密鍵」がウォレット(ウォレットアプリではない)と1:1対応になってしまいます。
そんな課題が山積みではありますが、ブロックチェーン(暗号資産ウォレット)から「秘密鍵の管理」が不要になって指紋認証で安全に利用できるようになれば、一気に普及することだってあるかもしれません。
投機で儲ける…などという時代は終わり、スマホを持ち歩くだけであらゆるサービスが安全・便利に受けられる世界が到来するのです。
部屋も駐車場も駅のロッカーも予約・利用・支払が指紋認証で。レストランやライブ、各種イベントの予約・受付・支払も指紋認証で。ブロックチェーンならスマートコントラクトを利用してコストも下げられます。ERC721トークンを使えば1回きりの電子チケットもブロックチェーンの仕組みの中で発行できるようです。
○○マネーのために無数のアプリをインスールしておかなくても、お気に入りのウォレットアプリを一つ入れておけば困らない時代。本当に楽しみですね。
~おしまい~
ところで、生体情報自体から秘密鍵を生成できる日立のPBIという技術があり、それをブロックチェーンと連携させることで、本当の意味で秘密鍵を覚えておかなくてもよい(無くしても生体情報から生成できる)ものを作ったというニュースリリースが2017年10月にありました。
その後、2018年8月のニュースリリースでその技術が試用されたとありましたので、どうやら開発は進んでいるようです。
この技術、オープンソースにしてスマホやPCの指紋認証でも使えるようにしてくれませんかねぇ…