属性ベース暗号の良さをちょびっと整理してみた
機密なファイルを複数人もしくは企業間で安全に共有したいと思ったことはないだろうか?
もっと楽に、直感的に、アクセスコントロールをできたら…と思ったことはないだろうか?
属性ベース暗号はそういうときに役にたつ暗号である。
属性ベース暗号とは
属性ベース暗号(ABE: Attribute-Based Encryption、以下ABE)とは、「①セキュリティ」と「②属性によるアクセスコントロール」を同時に満たすことができる暗号化手法である。①はシンプルに、データを暗号化するため保証される。②のアクセスコントロールというのは、ファイル管理系クラウドサービスを想像するとわかりやすい。例えば、Google Driveを取り上げてみる。Google Docs/Spreadsheets/Slides等を誰かと共有したいとき、そのリンクを限られた人に送ったり、もしくはE-mailリストにアクセスを許可する人のメールアドレスを追加(ホワイトリスト作成)したりする。このように、アクセスさせたい人にだけ許可を与え、その他をはじくという制御のことをアクセスコントロールという。また、”属性による”という性質は「ユーザの持つ属性」を利用することで達成できる。例えば、”上司”(属性1)はあるデータを見ることができるが、”部下”(属性2)や”外部提携先”(属性3)はそのデータをみれない、といった感じ。これにより抽象化された制御ができる。このように、暗号化機能と属性アクセスコントロール機能を同時に持ったものをABEという。もう少し厳密には、「その属性(集合)を持っている人しか、暗号化データを復号できなくする」暗号化手法である。もちろんGoogle DriveはABEを使っていない(上に書いたように、ホワイトリスト作成方式を採用してるので)。
従来のホワイトリスト作成じゃだめなの?
ここで一つ、「なんで属性を利用するのよ?別にホワイトリスト作成してもいいじゃん」ってつっこみがある(はず)。でも、例えば組織でアクセスコントロールを運用する場合を考えてみてほしい。組織には、部門、その下のグループ、そことつながる外部の取引先や提携先など、許可するユーザ数が必然的に多くなるため、その都度全ユーザのアドレスをかき集め、ホワイトリストを作成しなければならない。この人はOK、あの人はNOというように、個人レベルでの手動制御は本当に手間である。一方で、ABEは、個人に対して属性を紐付けてあげることで、属性単位でコントロールできる。また、さらに良いことに、属性の組み合わせによるコントロールも可能である。例えば、属性A、B、C、Dがあったとき、「AかつB」、「AまたはBまたはC」、「『AかつB』または『CかつD』」といったように、様々な制御条件を組み込むことができる。このように、属性ベースにすることで、コントロールの”柔軟性”と”自動化”を実現することができる。
次に、別の視点からABEの良さを考えてみる。ちょっと脱線する。
そもそもクラウドサービスって安全にデータ管理されるの?
ここでは、安全性を「データ所有者以外がファイルをみることができるのか」という意味で使っている。つまり、「安全性が低い」とは、例えばGoogleのサーバ管理者が「あなたのファイルの中身を見ることができる」ということである。結論からいうと、安全性は低い(見ることができる)。Google DriveもDropboxも、そこらへんのクラウドサービス事業者は、ファイルの中身を閲覧することができる。事業者はよく「暗号化しているから安全だ」というが、実際はその暗号化の特性上、暗号化はクラウド側で行われており、また暗号を解くための鍵がクラウド側にあるため、常に暗号化はされていない。だから、万が一の場合の安全性は保証されない。
暗号を使って安全にファイルを共有するには?そのときの問題点は?
機密情報が書かれたファイルを安全に共有したい場合、まず考えられるのは暗号化による方法である。クラウド側での暗号化に頼ると、上のような安全性の問題があるため、それを解決する手段として、ユーザがファイルをクラウドにアップロードする前にユーザの鍵を使って暗号化し、その暗号化データをクラウドからあるユーザに共有することが考えられる。ただ、これには大きな問題がある。それは、暗号化ファイルを相手に復号させるために、相手側の鍵をつかって暗号化する(公開鍵暗号方式のため)必要があるのだが、1人であればその人の鍵だけ事前にもらえば良いが、組織の場合、大勢の人から各人の鍵をもらい、各個人に対応する鍵で暗号化しなおして、一人ひとりに暗号化ファイルを送らないといけない。一人ひとり異なる内容の年賀状を送るのと同じである。このように、従来の暗号方式であると、複雑で骨の折れる作業をすることになる。
ABEはそれを解決する暗号方式である。どういう属性を持った人にアクセスを許可するか(復号させるか)という制御条件を組み込んで暗号化を行うことで、あとはその条件を満たした人のみが復号でき、満たさない人は復号できないようにすること(アクセスコントロール)が可能になる。
まとめ
まとめると、次の2点がABEの良いところ。表にしてみた。
- アクセスを許可する全ユーザ数に依存しない、シンプルな暗号化機能
- 属性集合の組み合わせ方により、手間の少ない、柔軟なアクセスコントロールが可能
本ポストでは、ABEのよいところしか書いてないので、次は「なんでこんなに良いABEが実用化されていないのか。何が障壁になっているのか」という視点でまとめようと思う。
(本ポストは、以前著者がMediumにて投稿したポストを再掲したものである)