11. 実装上の細かい点
Montgomery乗算 (乗算剰余)
bビット素数p, に対し、a×b/R mod p, (R =2b)を乗算3回で行う計算法
• (x,y に対して xy mod p を計算する際、a = xR, b = yRとし ab/R=(xy)Rを計算)
• m = -p-1 mod R (事前計算)
1. T=a×b
2. U=T×m mod R, (Rは2巾なので mod Rは簡単)
3. (T+U×p)/R を出力 (カッコ内は必ずRで割り切れるのでシフトのみ)
• x86_64実装でのちょっとした工夫
• 3.の乗算下位は不要。1.の下位ワードと(-1)との加算によるcarry registerで代用
• 3.の加算結果がピッタリ上位registerに来るように入力を調整、シフト不要
Copyright 2015 FUJITSU LABORATORIES LTD.
movq (a), %rax
mulq (b)
movq %rax, %rcx
movq %rdx, %rbx
imulq (m), %rax
mulq (p)
add (-1), %rcx
adc %rdx, %rbx
movq %rbx, (ret)
※左コードは16clock程度
(同様にp < 295では36clock程度)
Montgomery乗算(p<263)のコード例
11
12. FFT変換処理のMontgomery化
Copyright 2015 FUJITSU LABORATORIES LTD.12
Input f[];
Output g[];
for (i=0; i<n; i++) { v[i] = f[i]; }
for (k=(n>>1), kk=0; k>=1; (k=k>>1), kk++) {
for (j =0; j<k; j++) {
u = 1;
for (i=0; i<n; i+=(k<<1)) {
x = v[i+j];
y = v[i+j+k];
s = u*y mod q;
t[i] = x + s mod q;
t[i+k] = x – s mod q;
u = u * w[kk] mod q;
}
for (i = 0; i< (n>>1); i+=k ) {
v[i+j] = t[i<<1];
v[i+j+(n>>1)] = t[(i<<1)+k];
}
}
}
for (i=0; i<n; i++) { g[i] = v[i]; }
Montgomery空間
(x→xR)で処理
19. 準同型暗号処理性能
イデアル格子ベース
Copyright 2013 FUJITSU LABORATORIES LTD.
パラメータ
(n, t)
鍵生成 (一括)
暗号化
秘匿内積 復号 暗号文
サイズ
(2048, 37) 590 ms 6.33 ms 4.99 ms 2.53 ms 9.5 KB
(4096, 37) 2250 ms 24.43 ms 14.91 ms 7.49 ms 19 KB
(8192, 41) 8910 ms 105.92 ms 54.58 ms 27.36 ms 38 KB
(16384, 45) 34610 ms 488.88 ms 217.65ms 108.96 ms 76 KB
CPU: Intel Xeon X3480 at 3.07 GHz, 16 GBmem
先ほどの準同型暗号 (Ring-LWE版)と比較すると
19
20. Ring-LWE版
(暗号文:正標数係数多項式)
イデアル格子版
(暗号文:多倍長整数)
パラメータ(n,q,t) 鍵生成 乗算 暗号化 秘匿内積 復号 暗号文サイズ
(2048,61, 211) 3.50ms 1.56ms 3.65ms 5.31ms 3.47ms 31.2KB
(4096,65, 212) 11.74ms 11.09ms 23.03ms 34.34ms 22.17ms 66.6KB
(8192,69, 213) 24.82ms 23.17ms 48.07ms 71.25ms 46.35ms 141.3KB
(16384,73, 214) 54.50ms 51.97ms 107.25ms 159.45ms 103.94ms 299.0KB
パラメータ(n, t) 鍵生成 乗算 暗号化 秘匿内積 復号 暗号文サイズ
(2048, 37) 590 ms 2.46 ms 6.33 ms 4.99 ms 2.53 ms 9.5 KB
(4096, 37) 2250 ms 7.40 ms 24.43 ms 14.91 ms 7.49 ms 19.0 KB
(8192, 41) 8910 ms 27.18 ms 105.92 ms 54.58 ms 27.36 ms 42.1 KB
(16384, 45) 34610 ms 108.63 ms 488.88 ms 217.65ms 108.96 ms 92.4 KB
準同型暗号処理性能比較
約三桁の差!
処理性能は数倍以内
漸近的にはRing-LWEの方が高速
暗号文は
イデアル格子
が小さい
Copyright 2015 FUJITSU LABORATORIES LTD.
勝ち 負け 大敗
20