IBMのFully Homomorphic Encryption (FHE) Toolkitの目的は、開発者がFHEを自らのソリューションに導入できるようにすることだ。暗号化されたデータを直接操作可能にするFHEには、高度に規制された産業におけるデータセキュリティとプライバシを劇的に変える影響力がある、とIBMは言う。
広義では秘密計算(secure multi-party computation)と同じ領域に分類される準同型暗号(Homomorphic Encryption)は、処理のための復号を必要としないセキュアな計算処理のアプローチである。その代わりに準同型暗号では、暗号化テキスト( ciphertext)の処理が可能であると同時に、暗号化されたその処理結果が、最初に復号化した入力データを処理した上で暗号化したものと同一であることを保証する。
準同型暗号(Homomorphic Encryption、HE)には、可能なプリミティブ処理の数や種類によって、部分的(partially)準同型、制限付き(somewhat)準同型、レベル付き完全(leveled fully)準同型、完全(fully)準同型がある。例えば部分的準同型暗号では、加算(addition)か乗算(multiplication)いずれか一種類のみのオペレーションを、暗号化テキストに対して回数無制限で適用することができる。一般的に使用されているRSAアルゴリズムは、この部分的準同型暗号の一種である。制限付き準同型暗号は、部分的準同型と同じく1種類のオペレーションが可能だが、限られた回数しか実行できない。これらに対して完全準同型暗号では、加算と乗算の両方を、回数の制限なく使用することができるのだ。
IBMの研究者であるFavio Bergamaschi氏によれば、FHEは金融や医療など、規制の厳しい産業に適している。
IBM Fully Homomorphic Encryption Toolkitは、HELibをベースとしている。HELibは、set、add、multiply、shiftなど多数の低レベルルーチンと、自動ノイズ管理やマルチスレッド処理などの高レベル機能を提供する、オープンソースのHEライブラリである。
IBM Researchは2009年にHeLibを開発することで、FHEの先駆者たちを支援しました。そのHeLibは現在、世界で最も成熟した多用途の暗号化ライブラリに成長しています。以来私たちは、パフォーマンスの大幅な向上を図り、100倍以上の速度向上を達成しました。これにより、日常生活で使用されているアプリケーションでのFHEの活用が可能になったのです。
準同型暗号には特別なスキルセットを持ったプログラマが必要だが、IBM HFE Toolkitは、このテクノロジの導入をより簡単にすることを目的としている。
11年間にわたる最高水準の暗号化研究を合理的な開発者エクスペリエンスに統合して、コーヒーを淹れたりデスク整理したりするような時間で誰でも使えるようなものとして自由に利用できるようにしたというのは、小さな功績ではありません。
この言葉のとおり、IBMの最初のリリースではmacOSとiOSをサポートしており、LinuxとAndroidが近々追加される予定である。ツールキットには即時利用可能なプレイグラウンドと、暗号化データベースのクエリを行うサンプルアプリが含まれている。クエリはMacBook Pro上で80秒程度で動作する。関連するコードは次のようなものだ。
/************ Perform the database search ************/
dispatch_async(dispatch_get_main_queue(), ^(void){
[self.logging setStringValue:[NSString stringWithFormat:@"Searching the Database"]];
});
FHE_NTIMER_START(Query_search);
std::vector<helib::Ctxt> mask;
mask.reserve(address_book.size());
for (const auto& encrypted_pair : encrypted_address_book) {
helib::Ctxt mask_entry = encrypted_pair.first; // Copy of database key
mask_entry -= query; // Calculate the difference
mask_entry.power(p — 1); // FLT
mask_entry.negate(); // Negate the ciphertext
mask_entry.addConstant(NTL::ZZX(1)); // 1 — mask = 0 or 1
// Create a vector of copies of the mask
std::vector<helib::Ctxt> rotated_masks(ea.size(), mask_entry);
for (int i = 1; i < rotated_masks.size(); i++)
ea.rotate(rotated_masks[i], i); // Rotate each of the masks
totalProduct(mask_entry, rotated_masks); // Multiply each of the masks
mask_entry.multiplyBy(encrypted_pair.second); // multiply mask with values
mask.push_back(mask_entry);
}
// Aggregate the results into a single ciphertext
// Note: This code is for educational purposes and thus we try to refrain
// from using the STL and do not use std::accumulate
helib::Ctxt value = mask[0];
for (int i = 1; i < mask.size(); i++)
value += mask[i];
FHE_NTIMER_STOP(Query_search);
準同型暗号は比較的日の浅い分野であり、積極的な研究活動が行われている。準同型暗号に投資している企業はIBMだけではない。例えば、MicrosoftはSEAL(Simple Encrypted Arithmetic Library)をリリースしており、Googleも先日、Private Join and Computeツールを公開した。