スマホ一台に全てを纏める現状をどう思いますか。
※これは計算論的な安全性ではなく、物理的な構造的分離によるセキュリティの提案です。
現在のスマホは本人性・権限・秘密鍵の全てが1台に集中して認証を行う構造を持っています。そのため1台のスマホに侵入を許したり失ってしまえば全てを失うことになります。
スマホ1台にまとめる事は悪いことではありません。なぜなら便利だからです。
ですが、セキュリティの面ではどうなのかを考えて欲しいのです。
1台のスマホの喪失を簡単に埋めることが出来ますか?
失ったり奪われたりした情報はそれほど軽いものですか?
私はこう考えるのです。1つの喪失で全てを失う構造は危ないと。
この便利さをあえて分割することで、便利さを維持したまま構造としての安全性を高める方法があるのではないかと思うのです。
この問題を解決するにはどうすればいいのでしょうか。
私は2枚のカードを使うという、この問題に対する一つの改善方法を提示します。
この私の方式では1台のスマホに全てを依存するのではなく、2枚のカードに認証機能や情報を分散して運用することで、カード2枚とスマホのどれか1つを喪失しても運用が安全に継続できる仕組みにしています。
2枚のカードに情報を分散する方式は、あえて現在のスマホの役割を分けることで、セキュリティに強く、それでいて使いやすくするという考えからです。
カードを2枚も使ったんじゃ不便だろうという意見もあると思います。
ですが、現在の技術ではカードを自動化させることも可能なのです。認証という観点から1枚のカードの提示は必要だと考えています「私は今、自分の意志で認証を行っている」というプロセスがまだ人には必要なのです。
もう1枚のカードは財布の中で Bluetooth Low Energy や NFC などを使って自動実行させれば大分使い勝手は良くなると思います。本人の確認が必要な時だけ承認を返す役割にするわけです。
この自動化を行えば実際に提示するのは、今まで通りカード1枚の提示で済むのです。
会社のゲートなどの通過は全自動でも可能です。しかし全自動化には常に慎重な考えが必要だと思います。
カードが2枚あることでのセキュリティ強度
あまり知られてはいませんが2枚のカードにすると、セキュリティ強度を驚くほど高くすることが可能になります。カード1枚やスマホ1台の時とは全く違う次元のセキュリティです。
2枚のカードの間にある空間の断絶を計算量を上げるタイプの攻撃ではどうすることもできず、量子コンピュータからの攻撃でさえほぼ無意味にできます。
この異常なまでの強度が出るのは攻撃を受ける対象を作らない構造になっているからです。何も無い状態では攻撃を受けるポイントも無いという考え方です。
この防御強度が出るのはカードを2枚にし、なおかつ必要な情報を正確に分離した時だけです。カード1枚やスマホ1台では、このセキュリティ強度を出すことは出来ません。
逆に言えば2枚に分離できるならば、数百円のカードでもセキュリティ上の構造としては十分可能になるのです。
運転免許証などで使われる「本人性」と「権限」という概念があります。
本人性は本人であることを証明し、権限はどんな車なら運転してよいのかの資格のことです。本来この2つは免許証などではくっつけて1つのものとして扱われてきました。
ですが、本来は一緒に扱われてきたこの本人性と権限の2つを物理的に分断して扱うとどうなるのでしょうか。
「あなたが本人であることの証明」 → Card1
「あなたは何ができるかの権限の証明」 → Card2
本人性だけでは名前だけで運転することが出来ず。権限だけでは誰が運転して良いのかわからず使えません。
つまり、この2つを分断するとそれぞれ1つだけでは何の意味も持たない構造になるのです。この意味を持たなくなる仕組みをセキュリティに応用します。
一見すると、物理的に切り離した本人性と権限は分離前と同じに見えるかもしれませんが、実際には単体では意味がない構造に変化していて使えないわけです。
この状態の変化は物理での相転移に似ていることから「情報の相転移」と私は呼んでいます。
そして、分離した2つを再び接続すると、情報はさらに相転移し、使えない状態から実行可能な本人性と権限へと戻ります。この分離している状態と接続された状態の切り替わりでの変化をセキュリティに使うわけです。
2枚のカードに分けるというのは秘密分散法からです。大事な情報を1つにせずに分散するという考え方です。ただし秘密情報を分散はしても再構成や復元は行いません。復元した痕跡を残してその情報を奪われないためです。
そしてさらにここにゼロトラストの考え方を加えます。何も信用しないという考え方です。2枚のカードには個人情報など奪われては困る情報を入れない形にします。本人性を入れてあるカードには個人情報ではなくサーバの登録番号でも入れておいて紛失時のダメージを最低限にします。
権限を入れたカードは誰のものかもわからない権限しか入っていないので紛失しても問題はありません。大事なのは重要な情報を1つにせずに分散し、なおかつ奪われても意味のない情報にしてしまうことです。これは攻撃以前に「存在しないものは奪えない」という考え方です。
では、この2枚のカードを使ってどのように認証を行うのかを説明します。
まずカード2枚を本人性のカード(Card1)と権限のカード(Card2)をBLEなどで自動化し、お互いに承認し合う設計にします。自動化することによって利用者が行うことは今までと同じくカード1枚を利用時に提示するだけとなります。
Card1: 財布の中で取り出さずに自動認識される・本人を証明するカード
Card2: 従来のICカードのように提示して実際に使う・権限を証明するカード
カード1は本人を証明するカードですが中に個人情報が入っているわけではありません。カード1を作成する時に厳密な本人証明の元で作成することにより、本人を担保できるカードであるとしています。
2枚のカードは常にお互いが相互承認することで安全な承認を行います。
どちらか片方だけの承認だけで実行されることはありません。
カード2はかならずカード1の承認のもとで権限が実行されるのです。
※本方式は秘密分散、ゼロトラスト、多要素認証を包含するが、最大の特徴は「Identity(本人性)」と「Authorization(権限)」を物理層で分離する点にある。これは従来IAM設計では論理分離に留まっていた領域を、ハードウェア構造として再定義する試みです。
銀行のATMを例に上げてみましょう。
従来のATM:
カード2(資格確認・NFC)+PIN=本人確認(推定)→ATM
新しいATM:
カード1(本人確認・BLE)+カード2(資格確認・NFC・BLE)=ATM(認証・PIN)
この図式を良く見てください。
驚くことに従来のATMには「本人を確認するものが存在していない」のです。
カード2とPINで多分本人だろうという危ない仕組みだったわけです。
実質的にはこれは1.5要素認証に近く、本人性の証明が構造的に欠落しています。
この「本人の証明の不在」はシステムとして致命的なのではないのでしょうか。
新しいATMのフローを書いてみます。
※これはカードを視点とした動作です。
1.まずATMにカード2(キャッシュカード)を提示して読み込ませます。(NFC)
2.ATMは利用者この場合はカード2に本人である証明を求めます。(ATM)
3.カード2はカード1に本人確認としての証明を求めます。(BLE)
4.カード1はカード2に対して本人である証明を出します。(BLE)
5.ATMはカード2から証明を受け取り、サービスの利用を開始します。(NFC)
6.必要ならATMは従来通りサービスでPINを求める。(ATM)
ここで大事なのは従来のATMと違ってキャッシュカードに本人確認が加わっている点です。カード1は厳密な本人確認の上で作成することにより、本人であることを証明できるカードです。ATMは従来よりも厳しく本人であることの証明を求めることが出来るのです。
そして本人であることの確認により、なりすましなどの排除を行うことが出来るのです。NFC・BLE・カード1・カード2・ATMが連携するのも重要です。
利用者が従来通り1枚のカードを提示することに対して裏では複雑な多層防御を行っているわけです。
会社での使用例を上げてみましょう。
ATMの時と違うのはカード2の「権限が動的に常に変化する」ということです。
Card1(本人であることの証明)常時ON +
→ 玄関ゲートの通過:(Card1(本人)+Card2(資格))全自動での承認
Card2(使用権限の確認):NFCで提示する場合とBLEでの全自動に別れる。
→ 出社:職務レベルごとの権限の使用開始(BLE)
→ 入退室:(施設→階層→フロア)エリアごとの侵入権限の承認(BLE/NFC)
→ 勤務中:(勤務開始)勤務前からの変化(BLE)
→ PCの使用:(ログイン→使用中)PCの権限:使用可能への変化(NFC)
→ 特殊機材の使用:上司Aの承認(必要な承認の個数1/2)
→ 特殊機材の権限:必要承認待ちへの変化(NFC)
→ 特殊機材の使用:上司Bの承認(必要な承認の個数2/2)
→ 特殊機材の権限:使用可能への変化(NFC)
→ 休憩中:全使用権限の休止(BLE)
→ PCの使用:(スリープ)PCの権限:使用休止への変化(BLE)
→ 勤務中:(勤務再開)休憩中からの変化(BLE)
→ PCの使用:(使用再開)PCの権限:使用再開への変化(NFC)
→ 退社:全使用権限の終了
これでもCard2の権限の持つ自由度つまり動的に権限が変化していることを上手く伝えられているかはわかりません。会社という一つの構造に落とし込むことで何とか表現できている感じがします。大事なのは権限というものがどれほど自由に変化できる性質を持つかです。
権限の全てをONかOFFで表現しようかとも思いました。ですが、権限の自由度の高さはONかOFFで単純に表現できるものではないのです。行動・状態・時間これらが全てミックスされた上での権限の変化を常に持つのです。
権限という要素は驚くことに、どれだけ自由にあるいは複雑に変化したとしても構造を壊すことがありません。これは人間が理解できる範囲を超えた変化すらも可能なのです。
※通常はBLE/NFCを用いてカードとシステム間で権限を確認しますが、緊急時にはNFCを利用した簡易オフライン実行も可能です。これにより、ネットワークに接続できない状況でも最低限の権限チェックが維持されます。
※ATMの時と同じように非常に高度な認証が必要な場合には2枚のカードに加えてPINを組み合わせる多要素認証はセキュリティ上かなり有効な事だと思います。
最後に
この2枚のカードを使った分散認証で肝心なことはカード1(本人性)とカード2(権限)を物理的に切り離すことによる情報の分散とセキュリティの大幅な強化です。
カード2枚を使って均等に情報を分割するようなやり方ではこのセキュリティ強度は出ません。本来は1つに扱われてきた本人性と権限という場所を間違えることなく分離することにより始めて見えてくる構造があり、それをセキュリティに利用しているのです。
そしてそこに、従来の秘密分散法やゼロトラスト、そして「知っていること(知識)」「持っているもの(所有)」「本人であること(生体)」と言った認証要素を組み合わせることにより、高度で新しいセキュリティが構築できるのです。
セキュリティ強度が上がったことにより不便に思える部分もあるかもしれません。ですがそれは安易に簡略化してはいけない部分でもあるのです。大事なのは強固なセキュリティ構造をできるだけそのまま使う事です。
自由度の高い権限という要素は、常に動的に変化することにより利用者に便利さと不便さの両方を与えます。ですが人の知恵で進化できるのも権限の自由度の高さでもあるのです。
※この記事はZENNにも同内容を掲載しています。
より詳細な記事はこちらが本編になります。
https://qiita.com/milnuma/items/638b95758f9406ef2bac
