完全準同型暗号を用いたクラウド上の演算機能の実装
2011SE111 神邊 智貴

2011SE234 佐脇 大貴
指導教員:

2011SE272 坪井 将洋

河野 浩之

はじめに暗号を用いる利点として，データをクラウドに送信する
前に平文データを暗号化処理してからクラウドへと預け
クラウドコンピューティング (以下クラウド) は様々なることで，クラウド管理者などの第三者によって内容を用途で用いられている．その例として，企業が提供する読まれるのを防ぐことが可能になる．そのためプライバクラウドサービスに対して，利用者はデータのバックアッシー問題やセキュリティ問題を大きく改善する．また，公プやストレージの利用，計算の依頼など，ネットワーク開鍵暗号は暗号化と復号に異なる鍵を使用するため，鍵を介して様々なサービスを受けることができる．クラウ自体の受け渡し過程で鍵自体の情報が漏れるリスクを解
ド利用の問題点として，(1) クラウドに預けられた平文決する．表 1 の公開鍵暗号うち，RSA, ElGamal, Paillierのデータはクラウド提供者側からは閲覧可能であるとい
暗号が現在用いられている暗号方式として広く知られてうプライバシーの問題や，(2) ハッキングや社内スパイにいるが，これらは暗号化した状態では乗法または加法のよってデータが漏れてしまうセキュリティの問題などがどちらか一方しか演算できないとされる．本研究で扱うある．これらを解決する従来の暗号方式 [4] に，RSA 暗完全準同型暗号は暗号化した状態のまま加算や乗算の両号や ElGamal 暗号，Paillier 暗号 [1] などが広く用いられ方の演算が可能であるため，データを暗号化してクラウているが，これらの暗号方式でデータを暗号化することドへ預けても，クラウドのサービスは従来とほぼ同じよによって，二つの暗号文の演算が困難になる問題もある．
うに受けられる利点がある．ただし平文や従来の暗号方
そこで，本研究ではクラウドにデータを送信する前に，式での計算よりも計算処理時間が長くなる問題がある．
完全準同型暗号 (Fully Homomorphic Encryption) [5] と呼ばれる公開鍵暗号方式を用いて暗号化することで (1)(2) 2.2 クラウドへの書き込みと索引付けの評価 [1]の問題点を改善し，より安全なデータの受け渡しを可能
2.1 節で述べた準同型暗号のうち，加法準同型暗号の暗にするシステムを実装する．完全準同型暗号はデータを号方式を用いて，クラウドへのデータ書き込みと索引付暗号化したままでも加算や乗算などの演算が可能な暗号けの評価を行う文献 [1] の概要を述べる．加法準同型性を方式であるため，データをクラウドに預けても従来と同じ持つ Paillier 暗号によって私的データを暗号化する．私ように計算などの依頼が可能である．また先行研究 [2][3]的データには様々な言語で書かれた Wiki の平文データを参考に実装し評価を行う．本論文は 6 章で構成され，2を用いる．また暗号化する際，平文の Wiki のキーワード
章では準同型暗号を用いた先行研究について述べる．3 章に索引付けされているのと同様に，暗号化状態でもキーでは完全準同型暗号を用いたシステムの概要について述
ワードが対応するように索引付けして暗号化する．暗号べる．4 章では医療データを用いた完全準同型暗号の実化したデータはクラウドへ預け，検索する際に入力した装について述べる．5 章では本研究で実装したシステム
キーワードを暗号化して検索することで，クラウド上のの評価を述べる．6 章ではまとめを述べる．
暗号データから暗号状態のまま検索することを可能にする．検索結果は各 PC で復号して平文の Wiki データを閲
2 準同型暗号を用いた先行研究の比較覧できる．暗号化した Wiki データから検索するのにか
本章では，2.1 節で準同型暗号の概要を，2.2 節で加法かった時間は 1 秒を切っている．
準同型暗号を用いたクラウドへの書き込みと索引付けの評価を，2.3 節で準同型暗号を用いたデータの受け渡しを 2.3 クラウドを介したデータの受け渡し [2]

1

述べる．

2.1

準同型暗号の説明

本節では，暗号の種類と特性を比較し，本研究で扱う完全準同型暗号を用いる利点を述べる．
表 1 現代暗号の種類
分類例

共通鍵暗号

DES(ブロック暗号)
RC4(ストリーム暗号)
RSA 暗号ElGamal 暗号
Paillier 暗号
完全準同型暗号

公開鍵暗号

性質

乗法準同型性
乗法準同型性
加法準同型性
加法準同型性
乗法準同型性

本節では，公開鍵を用いた加法準同型暗号の暗号方式による医療センターから各クライアントへの医療データの受け渡しを効率的かつ安全に行う [2] の方式を示す．この研究の概要として，まず各クライアント (a, b) に対応する(公開鍵，秘密鍵) のペア (pka, pra) を作成しておく．次に，(1) 医療センターは公開鍵を用いてデータを暗号化することで，暗号化したデータをクラウドに保存する．また，(2) 医療センターはあらかじめ作成していた秘密鍵をクライアント a，b へ受け渡す．(3) 各クライアントは復号許可印 (Ta , Tb ) がクラウドに認知されることで，暗号文のデータをクラウドから受け取ることができ，(4) 医療センターから受け取っていた秘密鍵 pra，prb を用いることで暗号化されたデータを復号できる．

3

完全準同型暗号を用いた医療クラウドの提案 3.2 データの暗号化と鍵の受け渡しのプロセス

本章では，3.1 節で本研究の提案内容を述べ，3.2 節でデータの暗号化プロセスについて述べ，3.3 節で暗号化したデータを復号するプロセスを述べる．

3.1

本研究の提案内容

クライアントそれぞれに対応する公開鍵 pk ，秘密鍵 prのペアを作る．クライアント a の場合，(公開鍵，秘密鍵)= (pka, pra) となる．同様にしてクライアント b，c の鍵(pkb, prb)，(pkc, prc) も生成する．次にそれぞれの公開鍵で暗号化関数 Epk を使いデータ d を暗号化し，暗号化済みのデータ Epk (d) をクラウドに保存する．データ d には n 個の属性があるとし，それを d = (d1 , d2 , …, dn ) と表す．クライアント a のデータを Epk (d) によって暗号化するための関数を式 (1) のように定義する.

重要なデータをクラウドに預けるにあたって，セキュリティの安全性への心配が重要な課題である．そのためにクライアント各自で暗号化してクラウドへデータを預けることが最も安全な方法であるが，従来の RSA などの暗号方式で暗号化してしまうと暗号状態でのデータの計
Epka (d) = Epka (d1 , d2 , … , dn )(1)
算ができない問題があり，クラウドサービスの利便性が損なわれてしまう．そこで本研究では，完全準同型暗号
図 2 のように，医療センターが持っている医療データによる暗号方式を用いることで，医療クラウドを介した を鍵 pk による暗号化関数 Epk (d) によって暗号化し，種安全で効率的な医療データの受け渡しシステムを構築し， 類の異なる秘密鍵 pra，prb，prc をそれぞれのクライア
暗号状態でもクラウド上で演算可能なプログラムを実装 ントに預ける．
する．

図 2 暗号化のプロセス

3.3

図 1 完全準同型暗号を用いた医療クラウドのアーキテクチャ
図 1 は，実装するシステムのアーキテクチャである．まず，医療側でデータを暗号化するために，漢字仮名交じりの平文データを全て数値化する．数値化された平文デー
タは医療センター側で完全準同型暗号を用いて暗号化する．暗号化されたデータはクラウドへアップロードし格納する．完全準同型暗号によって暗号化されたデータは暗号状態でも加算や乗算が可能であるため，復号する前にデータを演算することで，様々な復号結果を得ることができる．顧客側では，クラウドから演算済みの暗号デー
タをダウンロードすることができ，手元の PC で復号可能となる．復号したデータは数値化されているため，データベースから各数値に対応する文字データと置き換えることで，元の平文データによる復号結果が得られるシステムを作成する．

復号化のプロセス

本節では，3.2 節で暗号化済みのクラウド上のデータから，秘密鍵を用いて復号化するプログラムを記述する．ク
ライアントはクラウドから暗号化されたデータをダウンロードし，自らが持つ秘密鍵を用いて復号化関数 Dpr によってデータを復号化する．また，クライアント a のデータを鍵 pra を用いて復号するための関数を式 (2) のように定義する．

Dpra {Epka (d)} = Dpra {Epka (d1 , d2 , … , dn )}= (d1 , d2 , … , dn )(2)

図 3 復号化のプロセス
図 3 は復号化のプロセスである．まず，(1) 各クライアントは必要な医療データをクラウドに要求する．次に，(2)クラウド側はそれぞれの要求に応じて，暗号化された医療データを各クライアントへ送信する．そして，(3) クライアント側ではあらかじめ医療センターから受け取っていた秘密鍵を用いることで，復号化関数 Dpr により必要なデータを復号できる．

4を変えることで暗号のセキュリティレベルを変更することが出来る．秘密鍵と公開鍵は 11 から 17 行目で生成され，p，r の値を変更することで鍵の種類を変更することができる．
1:

完全準同型暗号による実装

2:
3:
本章では，3 章で示した提案を実装するためのプロセ
4:
5:スを述べる．4.1 節で暗号化プログラム実装の手順につい6:て述べ，4.2 節で HElib を用いたアルゴリズムについて， 7:
8:
4.3 節で暗号化について，4.4 節で暗号文での演算につい9:10:て，4.5 節で復号結果について述べる．
11:
12:
4.1 暗号化プログラムの実装の手順
13:
14:
15:
16:

表 2 実験に用いた医療データ

患者名

年齢

神邊
本田
香川
内田
大久保
岡崎
吉田
中田
稲本

22
10
40
65
29
80
75
59
54

ID
110
432
921
923
716
012
384
721024

住所

病名

血糖値

血圧

愛知
北海道
香川
東京
東京
愛知
東京
東京
愛知

骨折
喘息
糖尿
ガン
骨折
骨折
ガン
ガン
骨折

123
100
205
91
105
100
228
130
83

120/80128/87145/92
138/94
124/84
170/73
169/100
139/89122/86long m=0, p=2, r=16; // Native plaintext space// Computations will be ’modulo p’
long L=16;// Levels
long c=3;// Columns in key switching matrix
long w=64;// Hamming weight of secret key
long d=0;long security = 128;ZZX G;
m = FindM(security,L,c,p, d, 0, 0);
FHEcontext context(m, p, r);buildModChain(context, L, c);
FHESecKey secretKey(context);
const FHEPubKey& publicKey = secretKey;
G = context.alMod.getFactorsOverZZ()[0];secretKey.GenSecKey(w);EncryptedArray ea(context, G);long nslots = ea.size();

図 4 HElib に実装されているプログラム

4.3

データの暗号化

データを暗号化するプログラムを図 5 に示す．1 から
8 行目でファイルから読み込んだデータを v1 に格納し，9 行目の ea.encrypt 関数で鍵 publicKey によって平文 v1を ct1 に暗号化している．10 から 16 行目でファイル名を指定してファイルに出力する．

1: ifstream fin(input_file);
表 2 は実装に用いるデータである．まず，医療センター
2:if(!fin){
側で表 2 のデータを暗号化するために MySQL からデー
3:
cout << "入力ファイルをオープンできません" << endl;
4:return 1;}
タを読み込み，漢字仮名交じりの平文データを全て数値化
5:while(fin.getline(plain,sizeof(plain))){する．元の平文と数値との置き換えは，データベースにあ6: int t=atoi(plain);
7:v1.push_back(t);}らかじめ仮名表記部分の平文データを格納しておき，数値
8: Ctxt ct1(publicKey);
9: ea.encrypt(ct1, publicKey, v1);と対応付けすることで元の平文と数値を置き換える作業を
10: char cryfile[100];
行う．数値化された平文データは医療センター側で HElib 11: cout << "暗号化ファイルの名前を入力してください" << endl;
を用いて暗号化する．暗号化されたデータは Ubuntu 環 12: cin >> cryfile;
13: ofstream fout(cryfile);
境によって構築したクラウドへアップロードし格納する． 14: if(!fout){
cout << "出力ファイルをオープンできません" << endl;
さらに，暗号文どうしの計算をするプログラムをクラウド 15:
16:
return 1;}
上で動かすことで演算を行う．顧客側では，クラウドから 17: fout << ct1 << endl;18: fout.close();
演算済みの暗号データをダウンロードし手元の PC で復 19: cout << "Complete" << endl;号できる．復号したデータは数値化されているため，デー 20: return 0;21:}
タベースから各数値に対応する文字列データと置き換えることで，元の平文データによる復号結果が得られるシス
図 5 暗号化プログラム
テムを作成する．各顧客のアカウント管理は WordPressで行う．
4.4 暗号文での演算
4.2 HElib
本節では暗号状態で演算するためのプログラムを記述
今回，完全準同型暗号を用いたプログラムを実装するにする．まず，健康管理人がデータを復号する際に，デーあたって，IBM 社の提供する HElib(Homomorphic Enタ成分の一部を復号できないようにするプログラムであcryption library) を用いる. HElib は IBM が開発したオーる．表 2 のうち，データ一列分の成分を D とし D =プンソースで，完全準同型暗号を C++で実装している．
{d1 , d2 , ... , d7 } とする．データ D を暗号化したものをHElib は IBM 社の研究者である Craig Gentry 氏が 2009
E = {d01 , d02 , ... , d07 } とする．健康管理人の場合，ID に値
年に発表した論文 [5] に基づき実装されている．HElib はする暗号データ d03 に，暗号化した 0 を掛け，d03 以外の属
https://github.com/shaih/HElib からダウンロードでき性には 1 を暗号化したもの掛けることで，d03 の部分のみる．図 4 は HElib 内のプログラムの一部である．L の値が復号不可となる．ID の部分のみを伏せるための平文デー

タ D0 = {1, 1, 0, 1, 1, 1, 1} とし，D0 の暗号化データを 5 実装したプログラムの性能と評価
E0 = {10 , 10 , 00 , 10 , 10 , 10 , 10 } とする．ここで暗号状態で本章では，実装したシステムの結果を評価する．今回，の掛け算 E・E0 = {d01 × 10 , d02 × 10 , d03 × 00 , d04 × 10 , d05
完全準同型暗号によるデータ保護を
HElib によって実装
× 10 , d06 × 10 , d07 × 10 } = {d01 , d02 , 00 , d04 , d05 , d06 , d07 }した結果，属性が 8 つの場合，暗号化したデータの容量はを行う．E・E0 を復号すると {d1 , d2 , 0, d4 , d5 , d6 , d7 }平均約 2.3Mbyte で平文データの約 1454 倍となった．まという結果が得られる．
た暗号化にかかった時間はセキュリティレベルが 16 の場
次に各属性の合計を計算する．データの取り出し方は合平均 44.06 秒で，暗号データをクラウドへアップロー上の方法と同様の演算を行い，必要な部分のみに暗号状ドするのにかかる時間は約 0.30 秒であった．
態の 1 を掛け，それ以外には 0 を掛ける．例えば厚生労働省の調査によると平成 25 年中における全国の表 2 のうち，血糖値の合計を計算するプログラムの場合，病院の 1 日平均在院患者数は 1,275,347 人である．その各患者のデータの暗号文を E1 , E2 , E3 , ... , En とし，ことを考慮すると，データ容量は 2.8TByte 以上となるこ
E0 = {00 , 00 , 00 , 00 , 00 , 10 , 00 } をそれぞれに掛けた値をとが予想される．また暗号化にかかる平均処理時間は，1E1・E0 , E2・E0 , ... , En・E0 とする．ここで E1・E0 から日に約15587 時間以上かかり，クラウドへアップロード
En・E0 をすべて足すと {00 , 00 , 00 , 00 , 00 , d016 + d026 +又はクラウドからダウンロードするのにかかる時間は約
d036 + ... + d0n6 , 00 } となり，これを復号すれば血糖値の106 時間以上である．
部分のみ合計値を得る．

4.5

6

復号結果

表 3 はユーザである患者がデータを復号した結果である．これにより，クラウドに預けた暗号化したデータから復号したデータを得られ，患者のプライバシーを保護しながらクラウドを介したデータ共有が可能となる．
表 3 患者による復号
患者名

年齢

吉田

75

ID
384

住所

病名

血糖値血圧

東京

ガン

228169/100

表 4 は健康管理人がデータを復号した結果である．患者のプライバシーを守るために，患者の ID を復号できなくする処理をクラウド上で行うことにより，データを健康管理人が復号しても ID の部分は表示されない．
表 4 健康管理人による復号
患者名

年齢神邊香川吉田

224075

ID-

病名

血糖値

血圧

愛知香川
東京骨折
糖尿ガン

123205228120/80
145/92
169/100

表 5 は役所が復号した結果である．役所は自分の地域の病気傾向を把握する事が目的である．そのため，役所などの組織が医療データを要求する場合，不特定多数の人がデータを閲覧する可能性がある．よって必要な部分の計算はクラウドに依頼し，計算結果のみ復号できる処理を行う．

病名

合計値

血糖値
血圧最大値
血圧最小値

1165
1225785

本研究では，完全準同型暗号を用いることで，暗号状態での演算をクラウド上で行うシステムを HElib，MySQL，WordPress を使用して実装した．医療データの暗号化，クラウド上で暗号データの演算，ユーザ側での復号を正常に動作することを確認した．性能測定結果として，HElibによって暗号化した暗号データの容量は平文データのの約 1454 倍，クラウドとの平均通信時間は約 0.30 秒，暗号状態での平均計算時間は約 44 秒という結果を得た．
外来患者数の一日平均が約 3000 人を越える東京大学医学部附属病院の場合，一日に訪れる外来患者のデータを全て暗号化するのに約 36.7 時間以上かかる．今日実験に用いた市販 pc のスペックで実装したシステムを実行させると，業務面で支障をきたすことが予想される．5 から10 年後の性能が向上した市販 pc では，実行時間に関して支障をきたすことなく実行できるシステムといえる．

参考文献

住所表 5 役所による復号

まとめ[1] Bermardo Ferreira, Henrique Domingos, Searching
Private Data in a Cloud Encrypted Domain, Proc.
of the 10th Conference on OAIR, pp.165-172, 2013.
[2] Bharath K. Samanthula, Gerry Howser, Yousef
Elmehdwi, and Sanjay Madria, An Eﬃcient and Secure Data Sharing Framework using Homomorphic
Encryption in the Cloud, in Cloud 1st conference byACM, ISSN: 978-1-4503, DOI: 1596-8/12/08, 2012.
[3] Tatiana Emakova, Benjamin Fabian, Secret Sharing for Health Data in Multi-provider Clouds, Proc.
of IEEE International Conference on Business Informatics, pp.93-100, 2013.
[4] 一色寿幸, 尾花賢, 森健吾, 準同型暗号を用いたプラ
イバシー保護統計演算のソフトウエア実装報告, 電子
情報通信学会技術研究報告. ISEC, 情報セキュリティ
Vol.111(455), pp.135-140, 2012-02-23.
[5] Craig Gentry,
A fully homomorphic encryption
scheme, PhD thesis, Stanford University, 2009.