@kenmaroです。
普段は主に秘密計算、準同型暗号などの記事について投稿しています。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。
概要
フランスに拠点を持つスタートアップ
「Zama AI」から出たリリースをぜひ読んでいただきたいと思ったので、
ここで共有したいと思っています。
準同型暗号関連の記事についてはいくつか今まで書いてきましたが、
私からみてこれらのリリースですごいと思ったこと、
をピックアップして書いてみたいと思います。
要点だけまとめて、あとはリリース元へと誘導するだけの記事になってしまうかもしれませんが、
興味のある方はぜひリリース元を読んでみてください。
1つ目のリリースはこちら
2つ目のリリースはこちら
この二つのリリースについて言及しようと思います。
1つめのリリース
このリリースはわりと一般的な内容で、Concreteライブラリがどのようなライブラリなのか、
ライブラリにどのような展望があるのか、ということについてまとめられています。
技術的な内容などはあまり記載されていないですが、
私がこのリリースを読んで感じることを勝手に書いてみます。
- 実装のアーキテクチャに明確な階層があり、開発者に優しく、綺麗な思想が見える
- ライブラリとしてのエンドユーザが明確
- ハードウェアを利用した高速化と、それによるユースケースのカバレッジの向上が(ぼんやりだが)見えている
- ライブラリの開発に対する熱意が垣間見えるところが気持ちいい
少しだけ各ポイントについて深掘ります。
実装のアーキテクチャに明確な階層があり、開発者に優しく、綺麗な思想が見える
私は正直なところOSSにコントリビュートしたような経験はなく、
あくまでバックエンドや理論サイドもカバーしたプロダクト開発のようなことしかやったことがありませんが、
準同型暗号についてもいくつかのOSSを使ったり、実装をチェックしたりしてきました。
ライブラリの設計というのはOSSである以上非常に重要であり、
- どれだけ拡張性のあるライブラリになるか、
- メンテナンスがしやすいのか、新しいコントリビュータが入りやすいか、
などは設計によって大きく左右されるでしょう。
その観点でConcreteライブラリは、
非常に整備され、ドキュメントもかなり整備されており、レベルが非常に高いです。
各モジュールの上下構造や各機能も明確に分けられているため、コントリビュータがどこに変更を加えればいいのか、などとてもわかりやすくなっています。
Rustで書かれているところも、依存関係がカオス化しやすいC++に比べて開発者に優しいかなと思います。
ライブラリとしてのエンドユーザが明確
これはAPIの整備の仕方から見て取れます。
Python API でNumpy のようなインターフェースを用意するところなど、
実際のデータサイエンティストやプログラマーをエンドユーザとして明確に捉えていて素晴らしいなと思います。
上に記載した各レイヤの階層構造がはっきりしているというところもあるのですが、
もっと低レイヤの実装に興味のあるリサーチャーについてもどの階層にアクセスすればいいかも把握しやすい作りだと言えます。
ハードウェアを利用した高速化と、それによるユースケースのカバレッジが(ぼんやりだが)見えている
これは記事の最後のセクションに書かれているところですが、
1000倍、1万倍の高速化に対して、現状実用性の面から閉ざされているユースケースのうち、何割が解放できるのか、というところを見ており、
また、その高速化についての目処も立っている、
という自信のようなものも伺えました。
ライブラリの開発に対する熱意が垣間見えるところが気持ちいい
私はこの記事を読んで彼らのライブラリへの開発の熱意を感じることができました。
暗号界隈でもかなり著名な方達が実装に携わっていらっしゃるので、
これから業界のスタンダートとして使われるようになるライブラリだと思っています。
2つめのリリース
2つめのリリースは、1つめのリリースでも言及されたのですが、
ハードウェアを使用した高速化や、提供予定のAPIの少し詳細な内容となっています。
いくつか私がコメントしたいポイントをピックアップします。
- WASM API(とC API)を(限定的だが)リリースした
- ブートストラップを実行するAPIを、用途に合わせて2種類提供する
- 実測値も記載がありイメージがつかめる
少しだけ詳細について言及します。
WASM API(とC API)を(限定的だが)リリースした
これは1つ目の記事の感想にも関連するのですが、
実際にこのライブラリを使うであろうエンドユーザのことをしっかり考えているなあと思い、本当にすごいと思いました。
例えば暗号関連の研究者は、基本的にCやC++に精通している人が多いでしょうから、
C APIが用意されていればそれらの人も使ってみたくなるでしょう。
また、実際にライブラリを使用してなにかアプリケーションを作ったりする時、
WASM APIが用意されていればブラウザ上で鍵を生成したり、
暗号化、復号などの主要操作を行うことができるので非常に便利でしょう。
この点では、以前の記事
ここでもお伝えしたように、準同型暗号のライブラリとしては非常に有名なマイクロソフトリサーチのSEALも、
フロントで使えるようなライブラリが(外部のチームが)開発されていました。
このように、ディベロッパーのことをかなり考えたAPIを徐々に整備しているところが素晴らしいなと思った次第です。
ブートストラップを実行するAPIを、用途に合わせて2種類提供する
これはどういうことかピンとこない人もいるかと思いますが、
私はとてもすごいと感じたポイントなので言及させてください。
理由は、これもエンドユーザの実運用を意識しないと2つ用意しようと思わないはずだからです。
かゆいところに手が届くような機能があると、わかってるなあ、、と思うと思いますが、
まさにそんな感覚を受けました。
2種類用意されたAPIなのですが、簡単に言うと、
- 超高速で実行でき、並列性が低いAPI
- そこそこのレベルで高速に実行できて、並列性が高いAPI
が用意されています。
TFHE形式のブートストラップについては、以前
この辺りに書きましたが、
暗号に対して任意の関数を実行できるLUTを使ったルックアップの操作
のことです。
このLUTを実際に使う時、用途によっては(特にMLなどの用途では)、
- 大量のLUTを用意する必要があるパターン
- 1つのLUTに対して大量の暗号についてルックアップするパターン
などがあるため、2つめのAPIは非常に重宝するでしょう。
一方でもし演算がシンプルな構成であれば、1つめのAPIを使って実行時間を最短にすることも選択できますし、
アプリケーションレベルでこのライブラリをどう使いたいか、
というところを考えるエンジニアに対しても非常にケアしてくれているなあと思った次第です。
実測値も記載がありイメージがつかめる
最後に、リリースに実測値と使用したパラメータ、使用した実機のスペックなどが記載されており、
簡単な研究結果のまとめみたいになっていたので、
具体的にどのくらいの速度が出ているのか理解できましたし、ありがたいなと思いました。
まとめ
以上、今回はZama AIが開発する
プログラマブルブートストラップを搭載したTFHE亜種のライブラリ、
「Concrete」についてのリリースについて思ったことをコメントしてみました。
いいことばかり今回書いてしまいましたが、リリースでも言及されている通り、
実際に使う時のパラメータ選定や、限定されているビット数などは実運用上困難なところもあるかと思います。
実際私が以前使ってみた時は、パラメータの選定に苦労しました。
しかしながら、このようなライブラリがOSSとして整備され、
機能、性能の面で改善されていくに従い、いろんなユーザが使うようなライブラリになるのではないかと思っています。
みなさんも興味があればぜひConcreteを触ってみて、準同型暗号による演算がどのようにして行われるのか試してみてはいかがでしょうか。
今回はこの辺で。