ID進化

きっと何者にもなれないお前たちに告ぐ

 せいぞーん せんりゃーく!!
 再びタイトルで遊んで申し訳ない、またあまりにもマイナーなネタで申し訳ない。とりあえず申し訳ない。

 さっそくだが先日 b.tokyo で当社の加納が bPassport について発表した。手前みそながらブロックチェーンの未来へのワクワク感を伝えることができたのではないかと鼻が高い。

 しかし謎めいた bPassport という言葉といくつかのイメージだけでは消化不良を起こしているかもしれないので、この場を借りて少し深く紹介しようと思う。

 bPassport は一言でいえば「自分が何者であるか」を扱うシステムである。これは加納が語っていたことと関連している。加納は「頑張りが評価される社会」を実現したいと語った。そのためにはあなたが何者か?という情報は決定的なのである。
 そういうわけで今回のテーマは「あなたは何者?」だ。

認証と認可

 ソフトウェアの世界には認証(Authentication)と認可(Authorization)という言葉がある。
 認証は「本人かどうか」を問うものであり、
 認可は「その人がそれを行ってよいかどうか」を問うものである

 認証は通常パスワードや多要素認証を用いて、ネットの向こう側で操作しているひとが、そのIDに紐ついている本人であるかを確認することである。OAuthなどはこの部分を自分で実装せずに Google に委託しているといえよう。

 認可というのは「そのシステムで何ができるのか?」を定めることであり、定義上そのシステム内でのみ有効なものである。あなたは自宅のネットワークでは管理者権限があるかもしれないが、会社のネットワークでは一般権限しかないといったことが起きる。
 OAuth だとこの情報は共有されない。そのシステムで何ができるかはそのシステムが決めるからだ。OAuth にも権限項目があるが、これは Google 内の権限をどこまで公開するか?に関する権限である。

署名で認証

 これがどう変わるかを見ていこう。まず認証のほうだ。bPassport は公開鍵暗号をベースにしているので ID は公開鍵になる。もちろん覚えやすい表示用 ID というものも作れるが、重要なのは公開鍵のほうである。

 そしてパスワードを入力するのではなく署名を送ることで認証を行う。署名にはタイムスタンプ方式や、チャレンジレスポンス方式などが考えられるが、いずれの場合も認証側は公開鍵だけ知っていればよい。これは従来の方式に比べ大きなメリットがある。

 まず承認側はパスワードハッシュなどを保存しなくていい。このことはアカウント作成時にパスワード設定という煩わしいステップを踏む必要がないということでもある。もっと言えばアカウント作成などせずとも、とりあえずログインだけはできてしまうのだ。

 OAuthなどを使ってもアカウント作成なしにログインできるが、この場合はGoogleのAPIを呼び出さなければならない。しかし bPassport では認証側は何の API を呼び出す必要もないし、データの連携をする必要もない。公開鍵そのものが署名の正しさを保証してくれるからだ。

 ブロックチェーンを使えば Google のような中央集権的なプレイヤーがいなくても複数のシステムでIDを共有することができる。ある日突然 bPassport がなくなったとしても、公開鍵と署名を使ったログインは全く影響を受けずに機能し続けるのだ。

あなたは何者なのだ?

ID進化

 さてここまでは序章にすぎない。認可のほうは劇的な進化をすることになる。準備はいいですか?

 結局のところ認可を与えるのは各々のシステムである。認可というのはシステム内の権限のことだからどうしようもない。だから bPassport はそこには手を付けない。認可は今まで通り各システムが与えるだろう。しかしもう一歩踏み込んでみよう、そもそも各システムは何を基準に認可を与えるているのだろう?

 ビットフライヤーで取引が可能になるのは本人認証が完了した時だ。ネットワークの管理者になるのは、あなたがその能力と権限を会社から認められた時だ。お酒を買えるのはハタチになってからだ。

 そう、認可とは「あなたが何者か?」をシステムが確認した時に設定されるのだ。言い方を変えれば認可とは単なるシステム内のフラグに過ぎない。本質的なのはあなたの「Who are you?」なのである。そして bPassport が扱うのはこの情報だ。

 この情報は単に bPassport のシステム内データであるだけではない。ブロックチェーン上に置かれ、公開鍵暗号によって数学的に正しさを保証された情報だ。決してねつ造されず、改ざんもされず、bPassport の API に頼ることなくデータの正当性を検証することができる。だから各システムはこの情報を根拠に利用者に認可を与えることができるのだ。

仕組み

お墨付き

 仕組みとしてこうだ。
 【公開鍵】←【この者が〇〇であることを認める by 認定者】

 公開鍵はあなたの ID であり、あなたが本人であるという認証は署名によって行うことができる。
 その公開鍵にお墨付きをつけることができる。このお墨付きは誰かによって与えられるので、その人の署名が必要だ。その人の公開鍵は再び誰かによってお墨付きを与えられているだろう。このループはルート公開鍵にたどり着くか自己署名にたどり着くまで続く。

 また一つの公開鍵に複数のお墨付きをつけることもできる。そもそもお墨付きを与えるということは無条件に認めるということではなく、何かの側面について認めるのである。だからお墨付きの中には「〇〇であることを」とという限定するための情報が含まれている。

 だからその人のさまざまな側面に対してお墨付きを与えることができる。その人がビットフライヤーの従業員であるとか、成人であるとか、信用に値する人物であるとか。
 また同じ側面に対するお墨付きであっても、違う人がお墨付きを与えるのであればそれはそれで意味があるだろう。単純に複数の人からのお墨付きはその信ぴょう性をより強固にするはすだ。

どんな使い道があるの?

 抽象的な話ばかりだと眠くなるだろうから、少し具体的な話をしてみたい。

 まず考えられる応用例は本人確認だ。銀行口座を作る時、ビットフライヤーでアカウントを開設するとき、漫画喫茶に入る時、様々なシーンで本人確認は行われている。

 私が小宮山という名前で東京都〇〇に住んでいるという情報は私に属している情報である。どっかのシステム内のフラグではない。
 bPassport を使うことで、
「私が小宮山という名前で東京に住んでいることをビットフライヤーが確認した」
 ということを私は立証することができる。これを使って例えばホテルの予約をデポジットなしでできる、スポーツジムの会員登録ができる。お酒を買うときに20歳以上であることも同様に立証できる。出前を取る時に自分の住所がでたらめでなく、いたずらでもないことを立証できる。

 まあこのような感じだ。従来の認証と認可の仕組みと違い、私が何者であるかという情報がシステムの区別なく飛び交っているのがわかるだろう。

 もうめんどくさい住所の入力はしなくていい、免許証の提示も一回だけすればいい、アカウント作成も勝手に終わっている。無駄な繰り返しを省き生産的なことに時間を使おう。加納が語っていた未来がここにある。

(お知らせ)bitFlyer Blockchainでは仲間を募集しています!


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