「使用感」て言うとなんか、、、
はい。
概要
準同型暗号は、
- 暗号化したまま計算ができる
- 量子コンピュータでも簡単に解読できない(量子コンピュータ耐性)
という特徴を持った次世代暗号と呼ばれています。
学術的には2009年くらいに大きなブレークスルーがあり、そこから学術分野を中心に研究が盛んに行われています。実用化に関してはまだまだ計算が遅いとか、暗号化した後のデータサイズが大きすぎるとか、いろいろあってなかなか難しい面もあります。
ただ、今の準同型暗号を中心とした秘密計算分野は、機械学習でいうところの2011年頃の感覚と似ている、という言い方をされます。つまり、ハードウェアとかさらなる理論的なブレークスルーが重なれば、今の機械学習と同じくらいのブームが来るかも!!?
まあ、来ても来なくても、魅力的な技術だし数学的にも面白いので勉強する分には良いよね??(震え声)
内容
正直、格子暗号と呼ばれる準同型暗号のうちの1つは
- 理論が難しい
- 既存ライブラリがやたらとややこしい
- 既存ライブラリは足し算掛け算だけを実装した超低レイヤ
という理由から日の目を見ていない感じがあります。
今回は、たぶんよく学術的に使われているであろう2つの格子暗号ライブラリ、
を使ってみた感想を雑談的に書いていきます。
HElib (オープンコミュニティ)
格子暗号の中のBFV形式をバックエンドにしているオープンコミュニティのライブラリ。
一言で言うと、カオス。どんな機能が使えるのかまとめてあるわけでもないし、ソースコード読むの前提?でもソースコードもかなり追いにくいです。。
コミュニティはとても活発です。機能のリッチさとかを考えたり、オープンコミュニティと言うことを考えると個人的には応援してるし、よく使ってます。また、ブートストラップとよばれる格子暗号の禁止技みたいなものも実装されています(実運用に耐えるかは置いといて)。
格子暗号は高次元の多項式環を用いているので、バックエンドで離散フーリエ変換を駆使して計算を高速化しています。HElibはNTL(11.3.2とかのバージョン)を裏で使ってこの高速化を実現しています。
BFV形式を使っているので、エンコードするところが比較的直感的です。したがって、係数に平文を詰め込む方式のパッキング手法は簡単に実装することができ、そこが重宝しています。係数パッキングとかが、高速化にどう寄与しているかとかは、これにわかりやすくまとめられています。
バックエンドはC++なので、環境設定の闇が深いですが、Dockerfileが置いてあるのでubuntu18.04 の環境では環境構築しやすいです。
SEAL (マイクロソフト発)
SEALはマイクロソフトのリサーチグループが開発しているライブラリですが、ライセンスはMITなので商用も可能な完全なオープンソースです。
一言で言うと、使いやすいです。ソースコードももちろん難しいですが、コメントが豊富で秩序立ってコーディングがしてあるのがわかります。マイクロソフトのトップリサーチャーはやはりすごい、、
例えば、
- 上記のHElibのgitにあるExampleコード
- SEALのgitにあるExampleコード
を見てみると一目瞭然ですよね、、情報量が違いすぎる、、
個人的には最近SEALをよく使うことが多く、その理由としてはSEALがCKKS形式の格子暗号を実装しているからで、BFV形式の実装もあるのですが、CKKS形式が使い勝手が良いからです。マイクロソフトも、たしかコメントの中でCKKSを特別な理由がなければ使うことを推奨しています。ただ、CKKSはエンコードの仕方が特徴的なため、先ほどのような係数パッキングは使わない前提になっています。もうひとつのCRTパッキングというものが主流ではあるけど、やっぱ特定の計算に対しては遅いもんね??
Palisade (MIT, Duality Inc発)
MITと、MIT発のDualityと言う会社が開発しているライブラリです。オープンソースですが、ライセンスは大学の名前で縛ってあるので、商用は不可です。
このライブラリについてはまださわれていないですが、ドキュメントがめちゃくちゃしっかりしていて、世界獲ろうとしている感が伝わって来ます。MITの格子暗号領域でのトップリサーチャーが専門としている、格子暗号のマルチキー形式が実装されているようで、それがどう使えるか早く試してみてまたレビューしたいと思います!!
雑談
マイクロソフト、MIT、世界のオープンコミュニティがそれぞれ作っている格子暗号ライブラリの稚拙な紹介でしたが、やっぱり日本発のものを作ってみたいなあああと思うわけです。だってなんか世界に負けてるの、くやしいやん??
ただ、それを実現するには筆者の脳みそではスペックが足りないのと、手も後4本くらいは欲しいわけで、、
なかなか難しいなあと思っているところです。
もしくは、これらの低レイヤーは海外の天才たちに任せて、もっと使い勝手のいい高レイヤーのラッパーに注力する、これもこの分野への貢献度は高いと思います。これに関してもいろいろ出て来ています。有名なのは、SEALのPythonラッパー。この人たちのコミットも尊敬する。。
以上、雑談的に格子暗号のライブラリについて書いてみました。
だれか興味ある人いたら、連絡ください!!
いいねやコメントお待ちしております!!