準同型暗号を用いてAI推論を秘匿計算!GateAIの実力を考察!!(チュートリアル有)
目次
概要
こんにちは、EAGLYSにてGateAIのの開発のリードをしています、三原と申します。
たまには一般的な研究の話ではなく、自社開発のプロダクトについて書いてみようと思います。
どのような秘密計算のサービスを開発しているのか、どんな感じで使えるのか、など簡単にわかる記事にしていきたいと思います。
また、記事に関してはできるだけ中立に、正直にできることとできないことを書いていきます。
GateAIとは
GateAIはEAGLYS社
が研究開発する、
準同型暗号を用いた秘密計算を用いてAIによる推論処理を行うことができるサービスです。
- ローカルでも実行できるDockerコンテナを自分でデプロイするタイプのライセンス型
- デプロイは不要のSaaS型
の2種類を展開しています。
(というよりSaaS型は開発段階なので、展開予定)
今回は、
- GateAIで何ができるのか
- どのようにサービスに組み込むことができるのか
などについて発信したいと思います。
GateAIが解決する課題
GateAI が解決しようとするのは、
データセキュリティとデータ活用の利便性を両立しようとした時に生じるジレンマです。
というと解決しようとしている概念の説明であり漠然としているので、
実際にサービスとして想定しするシナリオを下に書いていきます。
AIへの入力データを秘匿、モデルも秘匿
具体的には
`AI を活用したデータ解析を行うとき、モデルの情報(モデル提供者からすると知財情報)と入力データ(データ所有者が秘匿しながら活用したい情報)をお互いに秘匿(もしくは入力データのみ秘匿)した状態でAI推論を実行することに使用できます。`
つまり、GateAIは暗号状態でAI推論を行うサービスです。
また、これを行うための技術として、準同型暗号(格子暗号)ベースの秘密計算を実装しています。
データ所有者の観点から
自身のデータの中身を見られることなくデータの分析を行うことができます。
例えば取引情報から不審な取引を推定する不正検知、現在の在庫情報や購買情報から次の仕入れ量などを予測する需要予測などはAIを導入して分析に役立てることができますが、
実際に計算を行うサーバに対し、データの中身を見せることなく分析をしてもらい、結果をもらうことが可能になります。
モデル所有者の観点
SaaS型のAIサービス(AI as a Service)を提供している場合、
そのモデルを暗号化したモデルに変換することができ、暗号を入力として受け入れることが可能になります。
これにより、既存サービスのセキュリティ向上を実現しサービスとしての付加価値を高めたり、プライバシーの問題で今までサービスを使うのを断念していた潜在顧客の獲得可能性を高めたりすることができます。
計算サーバのクラウド移行時のセキュリティ
また、計算環境のクラウド移行時でのデータの安全性を高める目的もあります。
例えば自社で内部目的のAIモデルをデプロイし、ビジネスに役立てている場合、サーバのメンテナンスコストなどからデータのクラウド移行を考えることはよくあります。
クラウドでサーバを管理したほうがコストが抑えられることが比較的多いからです。
その際に、例えばデータの保存などは今まで通りローカル環境で行い、AI分析を行う環境のみクラウド上に移行するなど、部分的にクラウド化を進める事例を考えましょう。
AIによる分析環境をクラウドに移行する際、GateAIを用いることでクラウド上にあげるデータを暗号化したままAI処理を行うことができます。
仮にクラウド使用の懸念として、クラウド上での生データの漏洩リスクが足枷となっている場合、GateAIを用いることでデータのクラウド上での漏洩リスクを抑えることが良い解決策になる可能性があります。
秘密計算にはいろいろなアプローチ(準同型暗号、秘密分散、TEEなど)がありますが、
準同型暗号をベースにしているGateAI は、サーバコストが比較的大きくならずに運用できるため、当初のサーバ維持費を抑えたい、という目的からも適したソリューションになることがあります。
このようにクラウドへの一部サーバ以降を画策する際、セキュリティ上の問題点は秘密計算によって解決されることがあります。
また、クラウド移行の理由がコスト削減であった場合、秘密計算にかかるサービス料金、サーバ料金を加味したとしてもトータルではかなりの削減になることも大いにあり得ます。その観点で言うと、特性上1台のサーバの管理で完結する準同型暗号型のサービスは魅力的だと言えるかもしれません。
データを持ち寄り推論に役立てる
同じ会社の異なる部署間、グループ会社間、提携している会社間でもデータの持ち出しはハードルが高いことが多くあります。
例えば、パーティAは顧客の登録情報を、パーティBは顧客の取引情報を、パーティCは別の取引情報を保持している時に、
それらのデータを横に結合することでデータとしての価値を高め、AI分析に役立てようとする取り組みなどがあります。
例えばマイナンバーのような個人を特定するIDに対して、そのIDに対する購買履歴や移動履歴、ウェブサイトの視聴履歴などをいくつかの会社からまとめて分析することができれば、そのIDを持つ人に対する分析精度は格段に良くなるでしょう。
この際、各データ保持者のデータを準同型暗号を用いて暗号化し、
暗号状態を解くことなくAIモデルの学習を実行することが出来ればとても魅力的です。
しかしながら現時点での暗号化状態でのモデル学習は技術的にハードルが高いのが現状です。
GateAI でも、モデルの学習に関しては対象外であり、対象としているのはすでに学習されたモデルの暗号状態での推論のみです。
フェデレーティッドラーニングと準同型暗号の融合
上記の通り、準同型暗号ベースのAIモデル学習はハードルが高く、研究分野としてもかなり先行研究が少ない状態です。
というのも、学習は平文でも平気で数時間、数日、下手すると数ヶ月かかるような計算量であり、準同型暗号を用いてかかるオーバーヘッドを加味するととても現実的な案ではないからです。
そこで、学習を行うときは代替案としてフェデレーティッドラーニング(協調学習)を行うことが有効打となります。
協調学習により、データをお互いに開示することなく、共通のモデル1つを学習することができます。
協調学習を用いると、完全にデータを(開示して)結合した際のモデル学習精度にはやや劣るものの、各パーティが自身のデータのみを用いて学習するより非常に良い精度のモデルを構築することができます。
協調学習に関してもEAGLYS は現段階での秘匿学習ソリューションとして取り組んでいます。
これにより学習されたモデルを実際に各社が共同して運用する際も、GateAI を用いることでより良い推論を行うことができます。
推論時のデータが横結合可能な場合、各パーティのデータを暗号化したあとに横結合することができます。
これを協調学習されたモデルへの入力とすることで、協調学習により生成されたモデルに最適な形で入力データを投入することができます。
また、推論時のデータはGateAI により暗号化されているため、結合した後の推論結果はみれるものの、各パーティのデータ自体は互いに見ることができません。
GateAIの現行バージョン1.3におきましては、単パーティからの入力のみに対応しています。上のシナリオのような、複数パーティからのデータを横結合し推論を実行するような機能もこれから実装されていくでしょう。そうなると準同型暗号をベースとしたソリューション上でのモデル学習と推論実行への繋ぎ込みがスムーズになっていくと考えられます。
GateAI システム構成
システム構成に関しては非常に簡単なチュートリアルを用意しています。
このチュートリアルはエンジニアではない方でもシステム構成や使い方について簡単に確認できるページとなっていますのでぜひご覧ください。
レスポンシブでない記述が多いため、パソコンのブラウザ以外だといろいろ見苦しいですが、ご了承ください。
https://eaglys.gitlab.io/gateai_open_easy_tutorial/
エンジニア方向けに、実際にサービスのAPIを用いて鍵生成、モデルのコンパイル、推論などをプログラム上で行うgitレポジトリでのチュートリアルも展開していますので是非ご覧ください。
使う時はいくつかのAPI操作のみで、プログラム上で比較的簡単に実行できることがわかるかと思います。
https://gitlab.com/dataarmor-open/cf-inference-tutorial
また、ここで確認できるのはあくまで使い方のみであり、実際に使用する際はライセンスの取得もしくはSaaS型サービスへの登録が必要となります。
GateAI使用方法
ライセンス取得型
ライセンス型GateAIを使用するにはディベロッパーライセンスを契約する必要があります。
具体的な契約内容につきましてはEAGLYS社に連絡をして頂く形になります。
SaaS型
現在サービスの実装中となっております。
SaaS型のGateAI に関してはライセンスなどは不要で、サービス上で登録後、すぐに使用可能となります。この際、システム構成は全てのサービスがクラウド上に展開される構成となります。
速度性能や精度性能について
GateAI使用時のAI推論に対しての速度、及び精度の性能について言及します。
速度性能
準同型暗号は他の秘密計算ソリューション(秘密分散やTEE)に比べて数百倍から数千倍遅い、と言われることもあります。また、平文比だと一般にオーダーがさらに1つ上がるような速度低下となります。
高速化実装の研究開発を通し、このギャップを埋めていくところをEAGLYS社は取り組んでいます(世界中の研究者や秘密計算関連の企業も然り)。GateAIではこのような速度面の改善に非常に力を入れてきました。使用しているSIMD型の計算手法(ベクトル情報を暗号化して複数の四則演算を一気に行うようなテクニック)などの研究開発により、
比較的小さなモデル(モデルの学習パラメータが50万程度までのもの)であれば実行時間は平文比2~5倍程度、より大きなモデルになると10〜20倍程度となっています。(しかしながらあくまで秘密計算を適用するモデルに依存するところが多いです)
速度が平文に対して劣化してしまう原因は、
- 暗号状態で四則演算をするときの基本演算時間が非常に遅いこと(現時点での準同型暗号の技術限界)
- ハードウェアレベルでの高速化などがまだ世の中に実装されていないこと(たとえば平文推論ではGPUを用いて非常に高速な線形演算が可能になっている)
が挙げられます。
一つ目の課題に関してはベースとなる基礎研究が世界中の研究者によって行われたり、ソフトウェアエンジニアによってプログラム上で効率的にこれらの演算を実装したライブラリの開発が行われており、日進月歩の状態です。
ハードウェア実装に関しては最後にも言及しようと思いますが、Intelを初めとした各企業が準同型暗号特化型のハードウェアや、プログラム可能な回路での実装を進めています。
EAGLYS社もGateAIのバージョンアップに向けて日々研究開発を行なっております。
精度性能
GateAIが用いる準同型暗号、格子暗号の特色として、セキュリティを担保するためにノイズと呼ばれる乱数のようなものを暗号に付加します。この影響により、基本的に全ての演算は近似計算となります。
詳しくは
https://qiita.com/kenmaro/items/931835476ca8781de9f9
この記事にまとめていますが、結論をいうと、
float32にには少し及ばないが、float16よりは良い性能での推論を実行できます。
現在のAI推論ではあえてfloat16で推論を行い高速化するようなことも行われており、float16で推論を行った時の推論結果への影響などもいろいろと研究されています。
GateAIを介した推論に関してはワーストケース(ノイズがとても大きくなってしまった場合)においてもfloat16程度の精度は保証されていると考えて良いでしょう。
GateAIを使うときのマシンスペック
秘密計算環境はクラウド上、鍵生成環境はローカルもしくはクラウド上が一般的シナリオ
GateAIを用いる際に必要なマシンスペックなどについてお話しします。
システムの構成上、全てのサービスをクラウド上に置く際であっても、計算サーバと鍵などを生成するサーバは分けることを推奨します。
その際、実際に管理するサーバは2台となります。
必要なサーバのスペックとしては、8GB以上のメモリを持ったLinux系OSを推奨しています。
ただ、全てのマイクロサービスはDockerコンテナとして動くため、Dockerの実行環境が構築されていればサービス自体を使うことは可能です。
これらのサーバは月額5万円以下で整備することができるため、比較的サーバ費用はかからない構成で運用できると考えています。
また、鍵生成などのサーバはローカルに配置し、計算を執り行うサーバのみクラウド上に配置する場合、管理するサーバは1台のため、
よりシンプルなシステム構成になります。
ただし、この場合計算サーバに対して鍵生成サーバがアクセスできる(IPなどでのアクセスが許可されている)必要があります。
他秘密計算サービスとの比較
GateAIと他の秘密計算サービスとの比較を簡単に考察します。
`他サービスを運用レベルで動かした経験はないので、あくまで公開されている情報などをもとにした考察になることをご了承ください。`
GateAIの他サービスと比較したときの特長とし、
良い点や微妙な点(改善したい点)を最大限公平な目線で話したいと思います。
AIモデルから秘密計算AIモデルへの変換導入
GateAIは?
AIモデルを構築するときに、ほぼ全ての人がKerasやScikitlearnを導入として使用するのではないでしょうか。
GateAIは、KerasやScikitlearnの学習された出力モデルファイルを入力とし、秘密計算が実行可能なようにコンパイルをする機能を持っています。
(対応しているモデルや、使っていいレイヤなどに一定の制約があります。)
既存のサービスの中で、AI推論を秘密計算化するステップは複雑なのではないかと想定されますが、GateAIのコンパイル機能を用いると非常に簡単です。
基本的にAPI一つで秘密計算を実行可能な環境を構築できるため、導入が楽であることが他サービスにはないところではないかと考察しています。
他の秘密計算サービスは?
最近だとNTTが発表した「析秘」のような秘密分散系のサービスであったり、
TEEを用いた秘匿演算ハードウェア上で演算を行う手法などが比較対象として挙げられますが、
実際に組み込むときの導入のしやすさってどのくらいの手間とお金がかかるものなのでしょう、、
これらのサービスに対してはきちんと試せていないのでなんとも言えません。
もし試したことがある方がいらっしゃいましたらぜひ感想などを聞いてみたいです。
かかってくるインフラコスト
GateAIは?
準同型暗号ベースのサービスのいいところの一つは、計算サーバが特質上1台で済むところです。
この特質上クラウドでのサーバ管理費用が少なく済むところは利点かなと考えています。
また、他のサービス例えばTEEや秘密分散型のサービスにどれだけスケーラビリティがあるのか一概には言えませんが、
GateAIに関してはAWS等のECS的なサービスを用いたデプロイ方法も実験中です。
これにより、使っていない時は極力コストを下げ、秘密計算を行なった時のみインフラに対してお金を払うようなクラウドならではのスケーラビリティも活用できるのではと考えています。
つらつらと書きましたが、端的にいうと多分他のアプローチよりコストは「安い」でしょう。
他の秘密計算サービスは?
暗号状態で演算を行うため、他の秘密計算のアプローチのように複数台サーバを前提とする必要はありません。
もちろん複数台のサーバをある程度低スペックなもので抑えることでコスト削減は可能だと考えますが、その辺はどうなのでしょうか、知っている方いらっしゃいましたら聞いてみたいです。
対応していないアルゴリズムの範囲
GateAIは?
対応しているKerasのレイヤや、Scikitlearnのクラスなどがあり、コンパイルできるのは限定的です。
使っているアルゴリズムが対応していない場合、追加で実装という形になり、そこが面倒だと考えられることも多いでしょう。そこに関してはアップデートなどをかけていきますが、なかなか全てをカバーしていくのは難しいでしょう。
カスタマイズの可能性として良く言えば、準同型暗号は理論上いかなる計算であっても暗号状態で実行可能であるため、
独自のアルゴリズムや対応していないようなレイヤに対しても、秘密計算適用のカスタマイズに柔軟性があるということ。
悪く言えば、どんなモデルやソースコードであっても秘密計算化してくれるような魔法のサービスではないということです。
- 特質上準同型暗号が苦手とする演算があり、それらに対しては実装がとても複雑になってしまうこと
- AIモデルの方も秘密計算と同速度、もしくは大きい速度で進歩しているため、すべてに対応は難しいこと
などの理由により、限定的なアルゴリズムに対してのみコンパイルが可能になっています。
また、現時点ではモデルファイルからのみのコンパイルが可能であり、ソースコードからのコンパイルなどは不可能です。
詳しくは連絡いただくと詳細のドキュメントを送ることも可能です。
ソースコードからそのまま準同型暗号での実行プログラムへとトランスパイルするようなライブラリに関しては、
日本では京都大学のグループが取り組んでいます。
研究室へのリンクを貼っておきますのでもし興味のある学生の方がいらっしゃいましたらチェックしてみてはどうでしょうか。
研究室へのリンク
http://www.pass.cce.i.kyoto-u.ac.jp/?page_id=27
研究プロジェクトへのリンク
https://projectdb.jst.go.jp/grant/JST-PROJECT-19207061/
最近ではGoogleからもオープンソースのalpha版のようなものが発表され話題になりました。
この記事で詳しく書いていますので興味のある方はぜひご覧ください。
https://qiita.com/kenmaro/items/0f11340986990093c4da
ただし、ここの領域は研究領域であり、なかなか実用が難しい領域でもあります。
このように、GateAIが使用する準同型暗号は理論的にいかなる演算も暗号処理できる一方で、
実装上の苦しみや、現実的な実行速度の関係から、対応しているアルゴリズムは限られてくるというのが現状です。
他の秘密計算サービスは?
TEEに関してはおそらくですがかなり多くのアルゴリズムに現時点で対応しているはずです。
実際TEEは隔離された秘匿メモリ領域で計算を実行できるハードウェアなので、多分なんでも計算できると考えられます。
- 物理的なメモリの容量がとても小さいこと
- 実行速度が普通のメモリ上での計算よりも遅いこと(遅いといっても準同型よりは速い)
くらいが問題なだけで、対応アルゴリズムにたいしてはあまり問題ないのではないかと思います。
その辺の汎用性を考えるとTEEは現実性が非常に高いと考えています。
実行速度
GateAIは?
暗号状態での実行では実行時間が遅くなることは間違いなくデメリットです。
遅いことは承知の上、それでも実現できる世界観がある、という意味で準同型暗号には非常に魅力を感じている一方で、
遅いということはサービスを適用する現実的な範囲をかなり狭めてしまいます。
例えば、先述の程度のオーバーヘッドがかかってくると考えたとき、実サービスとして展開できるシナリオには限りが出てきます。
また、この実行時間の増大から生まれる弊害として、モデルに制約が生まれてしまうこともあります。
つまり、GateAIを使用することを前提にすると、モデルを少しだけ小さくするような工夫を行い、実行時間を許容範囲にとどめてあげるような工数が発生する可能性が大いにあります。
他の秘密計算サービスは?
また、他のソリューションとして、TEEを用いたハードウェア上での秘匿演算に関しては、実行時間が準同型暗号や分散型の処理に比べてかなり高速であるようです。
TEE、秘密分散、準同型暗号これらはベースとなる技術には大きな違いがあるものの、達成しようとする「秘匿演算」という括りの中では良く比べられます。また、ユーザから見ると実際内部でどんな技術を使おうが、目的が達成されればいい、という考えに対してももちろんそうだよなあと思うわけです。
つらつらと書きましたが、実行時間のみでいうと、
TEE、秘密分散、準同型暗号
の順で優位性があると考えられます。
(もちろん実行する演算の種類にもよると思いますし、あくまでも感覚的なものです)
しかしながら、前章でも書いた通り、準同型暗号の実行時間は基礎研究の側面、ハードウェア実装、ソフトウェア実装の側面で高速化の角度が高く、速度差というものはこれから拮坑していくものだと思われます。EAGLYS社としても、その速度改善の面で世界的に貢献をしています。
秘密計算運用時のシステム構成はシンプルか?
GateAIは?
理論上は暗号化を一度行い、その暗号がサーバサイドで秘密計算により分析され、結果が暗号のまま返ってくるようなシンプルな構成を実現できます。ここは準同型暗号が提供できる非常に魅力的な点でしょう。
しかしながら、実運用を考えた時、実行時間をより現実的なものにするためにシステム構成に工夫が必要になります。
具体的には、セキュリティ上の要件が変わることはないものの、一時的に暗号状態を解くようなトラスト領域を確保したサンドボックスを用意、活用する必要があります。
それらは、
- 前述したような準同型暗号が苦手とする演算
- そもそもアルゴリズムが世の中に存在しない演算
に対して演算の処理速度と処理精度を担保する際に一時利用されます。
上に該当するものとして、いくつか例をあげます。
- 比較演算などの処理
- 非線形処理かつ近似を行うことが難しい処理
- 前処理などの不確定な要素の多い処理
- ベクトル以外のデータ(テキストや音声)に対する処理
これらの処理はあくまで一時的に秘密鍵を用い復号し(もしくは暗号化する前の段階で)平文状態で演算を行う必要があります。
これらの制約より、単純にKerasなどで組まれたAIモデルを用いて推論を行う以外の処理が入った場合に、
暗号状態で演算を完結することは難しく、
- 暗号状態での演算
- 一時復号状態での演算
というふうに切り分けて処理しなくてはなりません。
GateAIに関してもコンパイラ部分がこの切り分けを行なってくれ、
ここのシステム構成はカスタマイズ作成となることがほとんどである一方で、GateAIはここを自動化し、ユーザが意識せずに秘密計算を実行できるようなシステムを構成してくれます。
準同型暗号型サービスの理想形である、
暗号化し、送ったら必要な計算をサーバ1台で完結してくれる
というようなスーバーシンプルな構成にはならないため、ここに少し理想と現実のギャップを感じてしまう方も多いと思います。
しかしながら、システムアーキテクチャの工夫を行い、実行速度とセキュリティを担保できるようなサービスとしてGateAIは非常に魅力的だと考えています。
他の秘密計算サービスは?
秘密分散であれば一度分散したデータをユーザ側に戻して分散し直したりするプロセスは発生しないのではないかと思います。
TEEに関しては暗号化のようなプロセスはないので、仮にあるとすれば秘匿演算領域でないメモリ上にデータを戻してくる作業だと思いますが、そのようなプロセスは計算途中で発生しないのではないかと思います。
(もしあったらご教示ください。)
おまけ GateAI及び準同型暗号ベースのサービスのこれから
おまけとして、準同型暗号ベースのサービスに、どのような発展性があるのか、
どこがどう良くなる可能性があるのか、ということについて正直に考えていることを書いていきます。
CGGIベースの格子暗号への研究発展性
CGGIベースの格子暗号は、以前にも
https://qiita.com/kenmaro/items/d78f012c522594126afe
この記事などで詳しく書きました。
大事なところを書き出すと、CGGI形式というのは今現在格子暗号で良く使われているCKKS形式などと比べて以下の利点があります。
- bit演算をブートストラップという手法を用いることで任意回数行える
- プログラマブルブートストラップ(PBS)を使えば、エンコードされた実数に対してルックアップテーブルを構築できる
- 上記のbit演算や、PBSを超高速に実行するハードウェアの開発に対し大手企業が覇権を取りに来ている
上の記事に詳しくは書いているのでそこまで深入りはしませんが、
bit演算を任意回行えるということは、理論的にいかなるソースコードであっても準同型暗号で実行できるようにコンパイルできるということ。
PBSを持ちいればbit回路まで落とし込みプリミティブなbit演算を多数準同型暗号上で行うことなしに、LUTを一度参照することで行えること。
ハードウェアの開発に大量投資が行われている中で、それらが開発すれば実行時間が遅いという問題を特殊なハードウェアで(お金を払えば)解決できるということ。
この点においてCGGIベースの信頼性の高い実装ライブラリが開発され、それとハードウェアが融合すればもしかすると社会実装へのハードルがグッと下がるのではないかと思っています。
また、https://qiita.com/kenmaro/items/341a2d7438c858d6d60e
この記事で詳しくは書きましたが、
格子暗号ベースの準同型暗号がISO標準化される日まで数年、と言われており、
それが達成されればブラウザなどにも当たり前に格子暗号が実装される日も来るかもしれません。
このCGGI形式の格子暗号がまた一つ上のステップに行くまで、
また、法的にも格子暗号が普通に社会実装されるような標準化が達成されるまで、
3年程度のスパンと考えるのが妥当な気がしています。
3年程度で可能になるのはあくまでもプロトタイプで、それが汎用化されるのは5年後くらいと考えてもいいでしょう。
そのくらいのタイムラインが私の感じている社会実装ペースです。
秘密分散やTEEに関してはどのようなブレークスルーが待っており、どの程度の時間がかかる見込みなのでしょうか?
私は今のところ勉強不足でそこはわからないため、調べてみたいなと思っています。もしご存知の方がいらっしゃいましたらぜひ教えてください。
まとめ
というわけで、今回はGateAIという製品を中心に、
- どのような使い方が想定されるのか
- いい点や微妙な点のまとめ(コスト、速度、対応アルゴリズムなど)
に関して実際の他の秘密計算ソリューションも絡めてまとめてみました。
いろいろとわからないところも多いですが、
わかるところに関しては中立な立場で考察を行ったつもりです。
もし他のサービスも試したことがある方がいらっしゃいましたら、ぜひ意見交換してみたいです。
というわけで、今回はこの辺で。
EAGLYS
三原
