って聞かれたときに答えられなかったので,これを機に整理してみます.
この記事は 勝手に秘密計算アドベントカレンダー の13日目の記事です.
下記の論文の解説をメインに行なっていきます.
P.-E. Clet, O. Stan, and M. Zuber: "BFV, CKKS, TFHE: Which One is the Best for a Secure Neural Network Evaluation in the Cloud?", In: International Conference on Applied Cryptography and Network Security. Springer, Cham, 2021. p. 279-300.
記事全体として,全3部作を予定しています.
第1回:BFV, CKKS, TFHE って何が違うんですか?①
第2回:BFV, CKKS, TFHE って何が違うんですか?②
今回(第3回)は
- ライブラリとか実装方針
- 結果の比較
- まとめ
の3本立てで書いていきます.
正直,わざわざ解説を書くより,論文を読んだ方が早いんじゃないかっていう気がします・・・
突貫で書いてしまった部分もあるので,大いに誤りを含む可能性があります.誤字・脱字レベルでも構いませんので,ご指摘ください.
また,予告なしに内容の加筆や構成の変更を行うことがありますが,読みやすくするためのものですので,ご容赦ください
ライブラリとか実装方針
BFV, CKKS では SEAL, TFHE では 公式ライブラリ を使います.
また,全てのライブラリで,nn-c, nn-e というモードがあり,それぞれ
- nn-c : インプットの特徴量は暗号化されているが,Neural Network での重みは平文
- nn-e : インプットの特徴量も Neural Network での重みも暗号化されている
を表します.
更に,符号関数 を用いるなら,TFHE の方が良いことが指摘されています.TFHEnn-c で符号関数を用いることができるモードを TFHEsign と表記することにします.
最後にパラメタについて,TFHE は BFV, CKKS よりもかなり小さめにとっています.
結果の比較
前章でのライブラリを精度・メモリ・時間の3つから比較します.
精度
よくわからなかった・・・
CKKS が一番精度良さそう・・・なのか・・・?
メモリ
TFHE が一見すると,メモリ使用量が少ないのですが,これは小さいパラメタを使用しているだけなので,BFV, CKKS と同じパラメタを使用すると,メモリ消費は一番激しいです(bootstrap が激しいため).
BFV, CKKS では,Batching を使えるため,メモリ消費量は TFHE より抑えられます.これらのメモリ使用量は同じパラメタであれば,だいたい同じようです(同じような関数を作用させているため).
時間
TFHE は,やはり bootstrap がネックのようですね.
BFV は CKKS よりも暗号文のサイズが2倍なので,計算時間も2倍かかるのは妥当でしょう.
また,どの方式も nn-e は nn-c よりも2倍程度速いとのこと.
まとめ
以下では,BFV, CKKS, TFHE がどのような場面で使用すると良いのかについてまとめます.
BFV
整数係数の多項式の厳密な演算を行えるが,そのため多項式の次数は小さいほうが望ましい.
また,Batching を用いることで,メモリと時間を改善することができる.
多項式が整数係数でない場合は,丸め誤差が発生する可能性がある.
square network でも,BFV はうまく機能する.
CKKS
実数係数・複素数係数の多項式でも演算を行えるため,メモリ・時間の観点からも,実用上は最良の選択となりうる.
しかし,CKKSを使用する環境は検討する必要がある.
square network の場合は,この方式が最善.
TFHE
ビット演算を使用する場合・完全準同型暗号を構成したい場合に使う.
また,符号関数を使用する場合は,TFHE を用いると良さそう.
さて,今回で
P.-E. Clet, O. Stan, and M. Zuber: "BFV, CKKS, TFHE: Which One is the Best for a Secure Neural Network Evaluation in the Cloud?", In: International Conference on Applied Cryptography and Network Security. Springer, Cham, 2021. p. 279-300.
の解説記事の連載が終了しました.正直,1回目でやりたいことはほぼやってしまったので,残りは個人的には消化試合っていうかなんていうか・・・.
どれが優れているっていうよりかは,適材適所で使い分けることが重要なのがよくわかりました.
どちらかというと,理論より実装的な論文を読む機会があまりなかった(っていうかそっち方面にあまり興味がない)ので,今回初めて読んでみました.
やっぱりこういうのを読んだ際って皆さん追試実装とかするんですかね?今後もこういう機会があったら,やってみたいなぁと思いました.
今回の内容はここまでです.ここまでご覧になってくださった方々ありがとうございます!