秘密分散法!
~ Secret Sharing Scheme ~
Akito Tabira!
2015/12/17 最終更新!
2015/05/01 新規作成
秘密分散法概論
書籍
• 秘密データ「シークレット」を複数のデータ「シェア」に分散さ
せ、その内のいくつかが わないとシークレットを復元できない
仕組み!
• 最も単純なものは「(K, N)-閾値秘密分散法」と呼ばれる!
- N: 分散して保持しておくシェア数!
- K: 秘密データの復元に必要なシェア数
秘密分散法とは 概論
3本資料では(K, N)-閾値秘密分散法のみを扱う
secret
share1 share2 share3 share4 share5
分散段階
secret
share1 share2 share3 share4 share5
復元段階
書籍
• 一般的に、n次方程式を求めるにはn+1点が必要!
➡ (K, N)-閾値秘密分散法ではK-1次方程式を利用!
• 情報理論的安全性を持つ (⇔ 計算量的安全性)
グラフで理解する 概論
4
2点から直線が求まる 1点では直線は定まらない
secret
書籍
1. K-1次の多項式を生成する!
!
!
!
2. 番目のシェア を計算する
実装: 分散段階 概論
5
f(x) = aK 1xK 1
+ · · · + a1x1
+ S
i = 1, 2, . . . , N
S: 分散対象のシークレット
ai: 乱数値
i f(i)
y切片
書籍
• 連立方程式を解く!
!
!
!
!
• ただし、シークレットSだけを求めれば良い場合はラグランジュ補
間を利用すれば楽に求められる!
- この場合、係数値 は求めることができない!
- シェアの追加生成をする場合は連立方程式を解く必要がある
実装: 復元段階 概論
6
0
B
@
xK 1
1 . . . x1
1 1
...
...
...
...
xK 1
K . . . x1
K 1
1
C
A
0
B
B
B
@
aK 1
...
a1
S
1
C
C
C
A
=
0
B
@
f(x1)
...
f(xK)
1
C
A
ai
※ シェアの追加生成には元の多項式が必要
書籍
• 機密情報の搬送!
- 搬送元で分散し、搬送先で復元する!
- 搬送途中での盗難や紛失のリスクを低減できる!
• 機密情報のバックアップ!
- 機密情報を分散して保管する!
- 暗号化だけでは十分な計算パワーがあれば復元できてしまう!
• 暗号 の複数の運用者での分散保有!
- 盗難・紛失のリスクを低減できる!
- 運用者個人での不正を防止できる
用途例 概論
7
書籍
• 計算機は「無限」を扱えない!
➡ 疑似的に無限を表現するには巨大な多倍長整数を扱う必要があ
り、演算コストが膨大になる!
➡ また、「無限空間における一様乱数」は生成できず、偏りのあ
る乱数生成がセキュリティ上のリスクを生じさせる!
• 復元時に除算がある!
➡ 浮動小数演算上の誤差が発生する可能性がある!
➡ そのため、整数演算で完結するよう実装上の注意が必要となる
実装上の課題 概論
8
書籍
• 有限個の整数しか登場せず、!
• 四則演算が自由にできる世界を作れば良い
実装上の課題: 解決策 概論
9
有限体の世界へ
書籍
• 秘密分散法とは、シークレットを複数のシェアに分散させ、その
内のいくつかが わないとシークレットを復元できない仕組み!
• 機密情報を安全に保護するために利用される!
• 最も単純なものは(K, N)-閾値秘密分散法!
• K-1次多項式からシェアを生成する!
• 実用上は有限体上で実装する!
- 有限体については後述
概論まとめ 概論
10
秘密分散法の数理
書籍
• 四則演算を自由に行える「体」という世界を理解する!
• 体の一つであり、計算機で扱いやすいガロア体 を理解する!
• 上で秘密分散法を実装する方法を理解する
目標 数理
12
GF(28
)
GF(28
)
書籍知識マップ 数理
13
代数系
群
可換群 乗法群加法群
体
拡大体
有限体
ガロア拡大体
有限群
ガロア拡大体上での秘密分散実装
書籍
• 「代数的に捉える」とは、ある対象を集合として捉え、その上で
どのような操作(演算)が行われ、どのような関係が成り立ち、それ
らがどのような性質を持つのか考えること!
• である任意の に関して のとき、 は演算 につ
いて「閉じている」という!
• 集合 が演算 について閉じているとき、 を「代数系」という!
!
• 例: 整数の集合 は演算 について閉じているが、演算 については
閉じていない!
➡ は代数系である!
➡ は代数系ではない
代数系 数理
14
a, b 2 A a, b a ⇤ b 2 A A ⇤
A ⇤ (A, ⇤)
Z + ÷
(Z, +)
(Z, ÷)
書籍
• 単位元!
任意の に対して、!
!
が成り立つ の元 を の単位元という!
• 逆元!
ある に対して、!
!
を満たす の元 を における の逆元という
単位元・逆元 数理
15
x 2 G
G e (G, ⇤)
x ⇤ e = e ⇤ x = x
x 2 G
G y x(G, ⇤)
x ⇤ y = y ⇤ x = e
書籍
• 以下の性質を満たす代数系 を群という!
- 結合律 が成り立つ!
- 任意の に対し、単位元 が存在する!
- 任意の に対し、逆元 が存在する!
!
• 例: 0を除いた実数の集合を としたとき、 は群である!
- 結合律が成り立つ!
- 単位元 が存在する!
- 任意の に対し、逆元 が存在する
群 数理
16
(G, ⇤)
a ⇤ (b ⇤ c) = (a ⇤ b) ⇤ c
a 2 G e 2 G
a 2 G a0
2 G
R⇤
(R⇤
, ⇥)
e = 1
x 2 R⇤ x0
= 1/x
書籍
• 交換律 が成り立つ群 を可換群という!
- 別名: アーベル群!
!
• 例: 整数の集合 は演算 について可換だが、演算 については可換
ではない!
➡ は可換群である!
➡ は可換群ではない
可換群 数理
17
a ⇤ b = b ⇤ a (G, ⇤)
Z +
(Z, +)
(Z, )
書籍
• 加法群!
- 演算記号が の群 を加法群という!
- 単位元は0、 の逆元は と表す!
• 乗法群!
- 演算記号が の群 を乗法群という!
- 単位元は1、 の逆元は と表す
加法群・乗法群 数理
18
+ (G, +)
x x
⇥ (G, ⇥)
x x 1
書籍
• 以下の性質を満たす代数系 を体という!
- 加法が定義されており、加法群 が可換群である!
- 乗法が定義されており、乗法群 が可換群である!
- 分配律 が成り立つ
体 数理
19
x ⇥ (y + z) = x ⇥ y + x ⇥ z = (y + z) ⇥ x
(G, ⇤)
(G, +)
(G {0}, ⇥)
書籍
• 四則演算が自由に行える!
- 加法・乗法は体の定義に含まれる!
- 逆元の存在により、減法・除法も定義される!
!
• 除法の定義 (減法についても同様の考え方ができる)
体の性質 数理
20
× … a b c …
…
a b
b
c b
…
÷ … a b c …
..
a
b c
c
…
b ÷ a = x
b = a ⇥ x = x ⇥ a
とおき
となる を選択するx
a b = a + ( b), a ÷ b = a ⇥ b 1
書籍知識マップ: 途中経過 数理
21
代数系
群
可換群 乗法群加法群
体
拡大体
有限体
ガロア拡大体
有限群
ガロア拡大体上での秘密分散実装
書籍
• が有限集合のとき、群 を有限群という!
!
• 例: 正整数 に対し、集合 を と定義し、!
に対し、 の値を!
!
と定義すると、 は有限群になる
有限群 数理
22
G (G, ⇤)
n Zn Zn = {0, 1, . . . , n 1}
a, b 2 Zn a + b
(a + b) mod n
(Zn, +)
以降、 を法とする演算を と表記するm ⇤m
書籍
• が有限集合のとき、体 を有限体という!
!
• 要素数 の有限体は と表す!
- 有限体はガロア体とも呼ばれ、GFはGalois Fieldの略である!
- 任意の素数 に対して が存在する
有限体 数理
23
GF(p)
GF(Q)
p
Q
G (G, ⇤)
書籍任意の素数pに対してGF(p)が存在する 数理
24
• 素数 に対し、 および をそれぞれ!
!
!
と定義すると、 と はいずれも有限可換群となる!
また、結合律も成り立つ!
したがって、有限群 は体の定義を満たすため有限体である
p Zp Z⇤
p
Zp = {0, 1, . . . , p 1}
Z⇤
p = {1, 2, . . . , p 1}
(Zp, +p) (Z⇤
p , ⇥p)
(Zp, ⇤)
(証明略)
書籍
• 素数 の場合を考える
有限体上での加法・乗法 数理
25
+p 0 1 2 3 4
0 0 1 2 3 4
1 1 2 3 4 0
2 2 3 4 0 1
3 3 4 0 1 2
4 4 0 1 2 3
×p 0 1 2 3 4
0 0 0 0 0 0
1 0 1 2 3 4
2 0 2 4 1 3
3 0 3 1 4 2
4 0 4 3 2 1
p = 5
Zp = {0, 1, 2, 3, 4}
行に全ての元が含まれる 列に全ての元が含まれる
書籍非素数mを法とする代数系は体にならない 数理
26
• の場合を考える
+m 0 1 2 3 4 5
0 0 1 2 3 4 5
1 1 2 3 4 5 0
2 2 3 4 5 0 1
3 3 4 5 0 1 2
4 4 5 0 1 2 3
5 5 0 1 2 3 4
×m 0 1 2 3 4 5
0 0 0 0 0 0 0
1 0 1 2 3 4 5
2 0 2 4 0 2 4
3 0 3 0 3 0 3
4 0 4 2 0 4 2
5 0 5 4 3 2 1
Zm = {0, 1, 2, 3, 4, 5}
m = 6
加法には問題がない!
→ 加法群は定義される
2, 3, 4が逆元を持たない!
→ 乗法群が定義されない!
→ 体ではない
書籍
• 秘密分散法の元論文と同じ実装!
!
1. となる素数 を用意する!
2. K-1次の多項式を生成する!
!
!
!
3. 番目のシェア を計算する
GF(p)上での秘密分散法実装 数理
27
i = 1, 2, . . . , N
S: 分散対象のシークレット
ai: 乱数値
i f(i)
f(x) = aK 1xK 1
+ · · · + a1x1
+ S mod p
(ai < p)
pmax(S, N) < p
復元段階も素数 を法とした演算に変更するだけp
書籍
• シークレットSが大きい場合、素数pも大きくなり、多倍長整数演
算のコストは課題として残る!
• SやNに対してpを大きく設定しすぎると脆弱性が生じる (詳細略)
GF(p)上での秘密分散法実装の課題 数理
28
書籍
• シークレットを小さな単位に分割し、それぞれに対して秘密分散
法を適用することで、多倍長整数の演算コストを下げられる!
- 通常、1byte単位に分割する!
!
• しかし、256が素数ではないためp > 256とする必要がある!
➡ 演算結果が1byteに収まらない!
➡ Xbyteのシークレットから2Xbyte以上のシェアが生成される
GF(p)上での秘密分散法実装の課題: 解決策① 数理
29
書籍
• シークレットSを1byte単位に分割し、!
• ガロア拡大体 上で演算する!
➡ すると、XbyteのシークレットからXbyteのシェアが生成される!
➡ また、四則演算コストが通常の計算機のものより小さくなる
GF(p)上での秘密分散法実装の課題: 解決策② 数理
30
次ページ以降で解説
GF(28
)
書籍知識マップ: 途中経過 数理
31
代数系
群
可換群 乗法群加法群
体
拡大体
有限体
ガロア拡大体
有限群
ガロア拡大体上での秘密分散実装
書籍
• 体Fにいくつかの元を添加し、Fを含む体Eを作れるとき、EをFの
拡大体という!
- 添加した元の集合をMとすると、拡大体EはF(M)と表記される!
!
• 例: 実数体Rにiを添加すると複素数体Cを作れる!
このとき、複素数体Cは実数体Rの拡大体である
拡大体 数理
32
書籍
• ガロア拡大体の構成法!
1. の元を係数とするn-1次多項式全体の集合を とする!
2. の元を係数とし 上で既約なn次多項式 を選択する!
3. に対して加法・乗法を以下のように定義する!
- 加法:!
- 乗法:!
4. すると の世界は体となり、 と表す!
!
• を の拡大体、 を基礎体と呼ぶ
ガロア拡大体 数理
33
GF(p) F[x]
GF(p) GF(p) f(x)
a(x), b(x) 2 F[x]
a(x) + b(x) mod f(x)
a(x) ⇥ b(x) mod f(x)
(F[x], +, ⇥) GF(pn
)
GF(pn
) GF(p) GF(p)
数値だけの世界ではなく「記号」の抽象世界へ入っていくため頭の整理が必要
書籍
• の拡大体 を考える!
- 多項式集合:!
- 既約多項式:
ガロア拡大体: GF(2)の拡大例 数理
34
+f(x) 0 1 x x+1
0 0 1 x x+1
1 1 0 x+1 x
x x x+1 0 1
x+1 x+1 x 1 0
×f(x) 0 1 x x+1
0 0 0 0 0
1 0 1 x x+1
x 0 x x+1 1
x+1 0 x+1 1 x
+2 0 1
0 0 1
1 1 0
×2 0 1
0 0 0
1 0 1
拡大
GF(2) GF(22
)
F[x] = {0, 1, x, x + 1}
f(x) = x2
+ x + 1
GF(2)
GF(22
)
(x + 1) ⇥ (x + 1)
= x2
+ x + x + 1
= x mod f(x)
書籍
• 計算機で扱いやすいよう、ビット列に置き換えて考える!
• 加法はXOR演算と同一であることがわかる(減法も同じ)!
• 乗法・除法については次ページで解説
GF(22
)を符号化する 数理
35
+f(x) 0 1 x x+1
0 0 1 x x+1
1 1 0 x+1 x
x x x+1 0 1
x+1 x+1 x 1 0
×f(x) 0 1 x x+1
0 0 0 0 0
1 0 1 x x+1
x 0 x x+1 1
x+1 0 x+1 1 x
+f(x) 00 01 10 11
00 00 01 10 11
01 01 00 11 10
10 10 11 00 01
11 11 10 01 00
×f(x) 00 01 10 11
00 00 00 00 00
01 00 01 10 11
10 00 10 11 01
11 00 11 01 10
符号化
書籍
• 多項式の乗法・除法は数値のものより複雑!
• 特に計算機で扱いづらいため計算結果の表を事前に用意する!
• しかし、2次元配列は巨大になるため、代わりに指数・対数の計算
結果の表を事前に用意するのが一般的!
- 指数の基底には を利用 (詳細略)!
- 指数表作成時の演算は での定義に従う!
- 対数表は指数表から生成できる(ただしlog(0) = 0とする)
GF(pn
)における乗法・除法 数理
36
a ⇥ b = log(exp(a) + exp(b))
a ÷ b = log(exp(a) exp(b))
exp(i) = xi
mod f(x)
(i = 0, . . . , 255)
GF(pn
)
x
書籍
• の拡大体 を考える!
- 多項式集合:!
- 既約多項式:!
!
• 上の元をビット列に符号化すると1byteになる!
➡ 計算機で扱いやすい
GF(28
) 数理
37
f(x) = x8
+ x4
+ x3
+ x2
+ 1
F[x] = {0, 1, x, . . . , x7
+ x6
+ · · · + x + 1}
GF(2) GF(28
)
GF(28
)
+f(x) 00000000 00000001 00000010 … 11111111
00000000 00000000 00000001 00000010 … 11111111
00000001 00000001 00000000 00000011 … 11111110
… … … … … …
11111111 11111111 11111110 11111101 … 00000000
書籍
• 四則演算を自由に行うことができる!
• 演算が高速!
- 加法・減法はXOR演算に等しい!
- 乗法・除法は表のルックアップと加法・減法だけで実現される!
• 元が1byteのビット列で表現でき、演算結果も常に1byteとなる!
!
!
• 基礎体 と比べて演算が直感的でなくなるが、計算機上での
処理が効率的になる
GF(28
)の性質 数理
38
GF(p)
書籍知識マップ: 途中経過 数理
39
代数系
群
可換群 乗法群加法群
体
拡大体
有限体
ガロア拡大体
有限群
ガロア拡大体上での秘密分散実装
書籍
• シークレットを1byteごとに分割してから分散処理を行う!
• 復元時も1byteごとに処理し、最後に結合してシークレットを得る
GF(28
)上での秘密分散法実装 数理
40
シークレットS
S1 S2
Share1
Share1
Share1
Share1
Share1
Share2
・・・
分割
・・・
分散分散
書籍
• 既約多項式を決定!
- 固定のものを利用すれば良い!
!
• 指数表、対数表を作成する!
!
• 既約多項式、指数表、対数表は変化しないため、ソースコード上
に直接書いておくのが一般的
GF(28
)上での秘密分散法実装: 前処理 数理
41
f(x) = x8
+ x4
+ x3
+ x2
+ 1
書籍GF(28
)上での秘密分散法実装: 分散段階 数理
42
1. K-1次の多項式を生成する!
!
!
!
2. 番目のシェア を計算する
f(x) = aK 1xK 1
+ · · · + a1x1
+ S
i = 1, 2, . . . , N
S: 分散対象のシークレット断片
ai: 乱数値(0∼255)
i f(i)
※ 多項式はbyteごとに異なるものを生成し利用する
(N < 256)
書籍GF(28
)上での秘密分散法実装: 復元段階 数理
43
• 上での演算になるだけで、通常の復元方法と変わらない!
• ラグランジュ補間を利用して を求める!
• シークレットのbyte数分だけ繰り返し、復元結果を結合する
S = f(0)
GF(28
)
秘密分散法の数理(番外編)
書籍
• 与えられたn個の点を通るようなn-1次多項式を求める手法!
!
!
!
!
!
• 秘密分散法においてシークレットSを求めるには とする
ラグランジュ補間 番外編
45
f(x) =
nX
i=1
f(xi)li(x)
li(x) =
nY
j=1,j6=i
x xj
xi xj
f(x) = aK 1xK 1
+ · · · + a1x1
+ S
f(0) = S
x = 0
書籍
• (K,N)-閾値秘密分散法では、Nを増やす(シェアを追加発行する)
ことが可能!
• シェアの発行に利用した多項式から生成する!
• ただし、多項式は保存しておけないため、K個以上のシェアから多
項式を復元する必要がある!
• ラグランジュ補間を利用してシークレットを復元すると多項式の
係数を知ることができないため、連立方程式を解いて全ての係数
を明らかにする
シェアの追加発行 番外編
46
書籍
• 誤り検出・訂正(QRコードなど)!
• AESなどの共通 暗号!
• 楕円曲線暗号
ガロア体の応用事例 番外編
47
書籍
• ある演算に関して結合律が成り立つ代数系を半群という!
• 半群であり、かつ単位元が存在する代数系をモノイドという!
!
!
• モノイドであり、かつ逆元が存在する代数系が群
半群・モノイド 番外編
48
書籍
• 以下の性質が成り立つ代数系をスイッチング代数という!
- 元が0と1のみ!
- 演算+と演算×が定義されている!
- 加法の単位元が0!
- 乗法の単位元が1
スイッチング代数(ブール代数) 番外編
49
+ 0 1
0 0 1
1 1 0
× 0 1
0 0 0
1 0 1
XOR演算に等しい AND演算に等しい
参考文献
書籍
• How to share a secret!
- Author: Adi Shamir (RSA暗号の”S”の人)!
- Communications of the ACM Volume 22 Issue 11, Nov. 1979
論文 参考文献
51
書籍
• 現代暗号への招待 (黒澤 馨・著、サイエンス社)!
• 情報・符号・暗号の理論入門 (守屋 悦朗・著、サイエンス社)!
• ガロア理論の頂を踏む (石井 俊全・著、ベレ出版)
書籍 参考文献
52
END

秘密分散法の数理