研究
⾼機能暗号
安全性と機能性を兼ね備えた次世代の暗号技術
TLSで利⽤される暗号化⽅式は、暗号化して復号する、署名は署名して検証する、といった単機能な暗号技術です。
それに対して、それ以外の便利な機能を付加した暗号技術を⾼機能暗号といいます。
⾼機能暗号は厳密な定義があるわけではありませんが、プライバシーを重視した分野で少しずつ活⽤が増えています。
準同型暗号
概要
インターネット上で広く使われているAESなどの暗号方式は、暗号化して復号する操作しかありません。 それに対して、準同型暗号は暗号文を復号することなく暗号化した状態で計算できる暗号技術です。
イメージとしては数字をカプセルの中に入れ、カプセルを開けることなく複数のカプセルを一つにまとめられるようなものです。 図のカプセルは説明のため半透明ですが実際には中身の情報は一切分かりません。
準同型暗号のイメージ図
クラウドに預けたデータをクラウドの管理者に中身を見せることなく集計処理などができます。
投票
たとえばyesかnoを答えるアンケートの結果を集計したいとします。 集計者は準同型暗号の公開鍵をユーザに配布します。各ユーザは答えを手元(ローカル)で暗号化し、サーバに暗号文を渡します。 サーバは暗号文のまま集計して集計者に渡します。集計者は復号して結果をえます。 サーバは各自がどう投票したかは分からず、集計者は誰がyes/noを答えたか個別に知ること無く結果だけをえられます。
クロス集計
もう少し凝った例として、クロス集計を紹介します。 データアナリストは喫煙歴と病気に掛かったかの相関を調べたいとします。 投票と同じく準同型暗号の公開鍵をユーザに配布します。各ユーザはタバコを吸う・吸わない、病気になった・ならないをそれぞれ暗号化し、サーバに暗号文を渡します。 サーバは暗号文のままクロス集計します。 その結果を受けた集計者集計者は復号してタバコと病気の相関係数をえます。 このようにユーザのプライバシーをたもったままデータ分析ができます。
技術詳細
暗号文のまま加算できる加法準同型暗号の方式は古くから知られていました。ただ、加算と乗算が両方できる準同型暗号は長らく実現しませんでした。 2005年、Bonehたちがペアリングという数学の関数を用いて加算は複数回でき、乗算が一度だけできる準同型暗号BGNを提案します。 2009年、Gentryたちが格子という数学的要素を用いて乗算も複数回できる完全準同型暗号を提案し、現在活発に研究されています。 2018年、光成たちは乗算が一度だけできる効率のよいペアリングベースの準同型暗号(Efficient Two-level Homomorphic Encryption in Prime-order Bilinear Groups and A Fast Implementation in WebAssembly)を提案し、世界で初めてWebAssemblyを用いてブラウザで動くライブラリを実装しました。 それにより、2018年のコンピュータセキュリティシンポジウムのポスターセッションで最優秀デモンストレーション賞を受賞しました。 先程紹介のクロス集計に必要な演算は2個のベクトルの内積と呼ばれる演算ですが、我々の方式はそれを暗号文のまま実現できます(ブラウザで動くクロス集計デモ)。
高機能署名
高機能な署名の例として、たとえばEthereumの合意レイヤでは、複数の署名を集約することで効率的に検証できる署名が利用されています。
通常の署名は人数が増えると署名データと検証時間は数に比例して増えますが、集約できると一定サイズに抑えられます。
また、署名にしたデータのどれを公開するか・非公開にするかを選択して相手に検証してもらえる選択的開示可能なBBS署名というのもあります。
BBS署名は2025年8月現在、W3Cで検証可能な資格証明と呼ばれる分野で仕様作成中です。
こういった高機能署名はペアリングと呼ばれる演算を利用しています。
mclはペアリングや楕円曲線の演算を扱いやすくしたライブラリです。x64/ARM64など各種CPU、Windows/Linux/macOSなどの各種OSに加えWebAssembly (WASM) にも対応しています。
WASM版のmcl-wasmはEthereum公式のJavaScript用VMである[ethereumjs/vm](https://www.npmjs.com/package/@ethereumjs/vm)などブロックチェーン系プロジェクトに利用されています。