交点で追う(k=2)

知っておくべき数学的概念

この教材で使う計算:GF(p)

この教材では、素数pを決め、0からp−1までの数を使います。計算結果はpで割った余りにします。この数と計算の仕組みをGF(p)(有限体)と呼びます。p=13なら12+2=14≡1 (mod 13)です。

ある数に掛けて結果が1になる数を、その数の逆元と呼びます。GF(13)では3×9=27≡1 (mod 13)なので、3の逆元は9です。3で割るときは9を掛けて余りを求めます。pが素数なら、0以外のすべての数に逆元があります。

実数から整数、そしてmodへ

GF(13)の固定例で、実数・整数・合同式を比べます。下の実験の設定やシェア編集とは独立した教材です。

②では、各座標が0〜12の格子点のうち、等式x₁+3x₂=29を満たす4点を示します。③では合同式x₁+3x₂≡3 (mod 13)を満たす13点を、2通りの描き方で確かめます。

① 実数の直線
図を準備しています Preparing diagram
図の内容を表で見る
② 範囲内の格子点
図を準備しています Preparing diagram

図の内容を表で見る
③ 合同式を満たす点
図を準備しています Preparing diagram
点の描き方

どちらも同じ13点です。点間の線は理解のための目安で、GF(13)の連続した線ではありません。

図の内容を表で見る

最初の固定例:(k,n)=(2,4)

この例には、秘密を持ち、シェアを作って配る人(ディーラー)と、4人の受取人が登場します。

① 配る人が秘密と乱数を用意する

ディーラーは秘密s=5を持っています。秘密とは別に、0〜12から同じ確率で乱数rを選びます。この固定例ではr=8です。

ディーラーは秘密と乱数を座標として並べ、点X=(s,r)=(5,8)を作ります。この点が、これから作る4本の直線に共通する交点になります。

② 配る人が各人の式を作る

GF(13)では0〜12を使い、計算結果を13で割った余りにします。たとえば12+2≡1 (mod 13)です。

ディーラーは、秘密sや乱数rの値を見ずに、条件を満たす係数a,bを選びます。その後、c=a s+b r (mod p)を計算して1本の式を作ります。この例ではp=13です。

a x₁ + b x₂ ≡ c (mod p)

シェアには、秘密sと乱数rを混ぜて計算した値cを入れます。a,bは混ぜるときに掛ける係数で、受取人ごとに係数の組を変えます。

この固定例では、係数(a,b)を#1:(1,3)、#2:(2,5)、#3:(4,2)、#4:(5,1)と決めています。#1などはシェアの識別番号で、aやbを計算するための数ではありません。

#1のb=3は、次の2条件を4組全体で満たすように、あらかじめ選んだ値です。3だけが正解というわけではありません。ここではk=2、法p=13の場合を説明します。

  1. 各組のbを0以外にする:どの秘密候補sにも、式を満たすrが1個ずつ残ります。秘密sの値によって選び方を変えず、rを0〜12から同じ確率で選びます(rを一様ランダムに選ぶ)。これにより、1枚のシェアから秘密sを絞れなくなります。
  2. どの2組も、一方に同じ数を掛けただけの組にしない:13で割った余りで比べます。こうすると2本の式が異なる条件になり、両方を満たす点が1つに決まります。
係数の選び方を具体例と式で確かめる

たとえば#1の(1,3)に対し、次の組に(2,6)を選ぶと2倍になってしまいます。右辺cを実際に計算してみます。

点X=(s,r)=(5,8)、係数(a,b)=(2,6)なので、a×s+b×r=5a+8b=5×2+8×6=10+48=58です。58=13×4+6より、13で割った余りは6です。したがってc=6となります。

式は2x₁+6x₂≡6 (mod 13)です。これは#1の式全体を2倍しただけなので、2枚集めても新しい条件が増えません。

実際の#2は(a,b)=(2,5)です。#1を2倍した(2,6)とは一致しません。

同じX=(s,r)=(5,8)から、a×s+b×r=5a+8b=5×2+8×5=10+40=50と計算します。50=13×3+11より、13で割った余りは11なのでc=11です。#2の式は2x₁+5x₂≡11 (mod 13)となります。

2本の式から秘密sを復元する

2本の式は、#1:x₁+3x₂≡3、#2:2x₁+5x₂≡11(どちらもmod 13)です。

#1の両辺を2倍すると、2x₁+6x₂≡6 (mod 13)です。ここから#2の式を引くと、x₁の項が消え、x₂≡6−11=−5≡8 (mod 13)となります。−5に13を足すと8なので、x₂=8です。

この値を#1に代入すると、x₁+3×8≡3 (mod 13)です。両辺から24を引くと、x₁≡3−24=−21≡5 (mod 13)となります。−21に13を2回足すと5なので、秘密s=x₁=5を復元できます。

#2に代入して「2で割る」求め方

同じx₂=8を#2に代入すると、11≡2x₁+5×8=2x₁+40 (mod 13)です。両辺から40を引くと、2x₁≡11−40=−29≡−3≡10 (mod 13)となります。

2と13は互いに素(共通の正の約数が1だけ)なので、2にはmod 13での逆数があります。2×7=14≡1 (mod 13)より、その逆数は7です。

両辺に7を掛けると、x₁≡7×10=70≡5 (mod 13)となり、同じ秘密s=5を得られます。合同式で「2で割る」とは、このように2の逆数を掛ける操作です。法と互いに素な数であれば、この割り算ができます。

法を素数にする理由

法pが素数なら、1〜p−1のすべての数がpと互いに素で、逆数を持ちます。だから、連立方程式を解く途中で0以外の係数で割る操作ができます。先ほどのmod 13で「2で割る」操作も、この性質を使っています。

法が合成数だと、0以外でも逆数がない数があります。たとえばmod 12では、3にどの整数を掛けても余りは0,3,6,9のいずれかで、1にはなりません。

#1へ代入する最初の求め方では、係数が1なので逆数を求める操作は不要です。#2へ代入する別の求め方では、2の逆数を使いました。ただし、法が素数でも、同じ条件を表す2本の式からは点を1つに決められません。係数の組にも、次の条件が必要です。

一般に、2組を(a,b)と(d,e)と書くと、a e−d bがmod 13で0以外なら、2本の式から点が1つに決まります。#1と#2では1×5−2×3=−1≡12なので条件を満たします。固定例の4組では、どの2組を選んでもこの値は0以外です。

係数をランダムに選ぶ必要はありません。固定例とは別に、番号から係数を決める方法もあります。k=2なら、0以外の異なる番号iに対して(a,b)=(1,i)とします。i=1,2,3,4なら(1,1),(1,2),(1,3),(1,4)となり、同じ2条件を満たします。

この規則をk=3へ広げると、係数は(1,i,i²)になります。1,i,i²,…を並べた行を集めた表を「ヴァンデルモンド行列」と呼びます。以降の設定において、この係数の作り方を採用する場合は「番号から作る(ヴァンデルモンド)」を選んでください。

係数は秘密や乱数の値に依存させずに決め、公開したり使い回したりできます。一方、乱数rは秘密を分け直すたびに、秘密とは独立に全範囲から同じ確率で選び直します。係数を固定することと、乱数rを固定することは別です。

#1ではa=1,b=3を使います。秘密と乱数を混ぜた1×5+3×8=29を13で割り、その余りc=3を求めます。シェアの中身は(a,b,c)=(1,3,3)です。

③ 配る人がシェアを渡す

ディーラーは各人に、その人用のa,b,cの組を1枚のシェアとして渡します。全員が法p=13を知っていれば、この3つの数から式を組み立てられます。秘密sや乱数r、点Xの座標は渡しません。

4人に配る4本の式(最初の固定例)
配るシェア シェアの中身 (a,b,c) 式
#1 (1,3,3) x₁ + 3x₂ ≡ 3 (mod 13)
#2 (2,5,11) 2x₁ + 5x₂ ≡ 11 (mod 13)
#3 (4,2,10) 4x₁ + 2x₂ ≡ 10 (mod 13)
#4 (5,1,7) 5x₁ + x₂ ≡ 7 (mod 13)

④ 受取人がシェアを持ち寄る

受取人が任意の2枚以上を持ち寄ると、式をすべて満たす点X=(5,8)が求まります。その第1座標が秘密s=5です。1枚だけではsの13候補がすべて残ります。

1枚では秘密を絞れない理由

#1のシェアからわかるのはs+3r≡3 (mod 13)です。(s,r)=(5,8)だけでなく、(0,1)でも(2,9)でもこの式を満たします。13個のどのsにも、式を満たすrがちょうど1個あります。

rを0〜12から同じ確率で選ぶと、どのsでも右辺c=3になる確率は1/13です。そのため、このシェアを受け取っても、どのsが選ばれた可能性が高いかは変わりません。s自体の選ばれ方を一様に変えるという意味ではありません。

ここでは法が13で、rに掛ける3が0以外なので、この対応が成り立ちます。たとえばrの係数が0の式x₁≡cなら、cから秘密sがわかります。秘密を隠せるかどうかは、式の形と乱数の選び方の両方に依存します。

この画面では、仕組みを学ぶためにディーラーの答えも示します。受取人にわかる範囲は、集めたシェアから残る候補として示します。

下の図は、現在配っているシェア#1の式を満たす格子点です。

横軸x₁は秘密sの候補、縦軸x₂は乱数rの候補です。1つの点は、このシェアの式を満たす(s,r)の組を表します。

図を準備しています Preparing diagram

このように各sにrが1個ずつ対応するとき、rを秘密とは別に全範囲から同じ確率で選べば、シェアを受け取っても各sの選ばれやすさは変わりません。s自体を同じ確率で選ぶという意味ではありません。

図の内容を表で見る

1本から、2本で1点、3本目も同じ点へ

シェアのボタンを押すと、集めた式に追加したり、外したりできます。1枚ずつ増やし、すべての式を満たす点がどう減るかを見てください。図の点に付いた数字は、そこで重なる式の数です。

図の内容を表で見る

ディーラーの設定・計算・配布(答えを含む)

ここはシェアを作る側の画面です。kは交点のタブで2、平面のタブで3に固定しています。p・n・sを変えるとシェアを作り直します。「新しい乱数で作る」はsを保ち、乱数の座標を選び直します。下には配る側の答えも表示します。

点Xの第1座標が秘密s、残りの座標が乱数です。ここで乱数の座標を手入力すると、sと係数を保って各シェアの右辺cを計算し直します。下の配布表でcの変化を比べてください。手入力では、一様な乱数を選んだ保証にはなりません。

秘密を分け直すたびに、補助の数を0〜p−1から同じ確率で選び直します。狭い範囲に限ったり、前の値を使い回したりすると、情報が漏れる場合があります。

係数の組を「法線」と呼びます。検査は係数の組だけを見ます。

x₂…x_k は GF(p) 全体(0を含む)から一様に、秘密ごとに新しく、法線とは別に選ぶ。

法線は公開・使い回してよい。使い回してはならないのは x₂…x_k。

各行が1人に渡す1枚です。括弧には式の係数を順に並べ、最後に右辺cを入れます。法pは全員で共通です。

詳しく

係数の作り方を2種類から選べます。「乱数+検査」は、条件を満たす候補から係数の組を1組ずつランダムに選びます。途中で候補がなくなれば最初から選び直します。

「番号から作る」は、各人に0以外の異なる番号iを割り当て、1,i,i²,…をk個並べて係数にします。k=2なら(1,i)、k=3なら(1,i,i²)です。各人の係数を行として集めた表がヴァンデルモンド行列です。計算はmod pで行います。

どちらの方法でも、点Xの乱数の座標は、係数とは別に選びます。

係数の組を検査する

(i)はどのk枚も1点に決まるか、(ii)はk−1枚からsを絞らない係数かを調べます。(ii)に加えて、乱数を全体から一様に選ぶ前提も必要です。

検査 (i):k 本の式で点が1つに決まる

検査 (ii):秘密 s を決めると、残りの未知数(x₂…x_k)の式に、いつもちょうど1つの解がある

検査の一覧

検査は係数の組だけを見るので、通るまで引き直しても秘密は漏れない。ただし乱数の座標 x₂…x_k が一様であることが前提。

ヘルプと座学

初めて読むとき

最初は「交点で追う(k=2)」で、1枚では候補が残り、必要な枚数で1点になることを試してください。用語は下の一覧、計算の前提は画面冒頭の「知っておくべき数学的概念」で確認できます。

タブは左右矢印・Home・Endで切り替えられます。ヘルプはEscで閉じられます。

この教材の用語

シェア
秘密から作り、各人に配る情報です。この教材のBlakleyでは、係数と右辺で表す1本の式に当たります。
秘密 s
必要な枚数を集めて求めたい元の値です。この教材では点Xの第1座標に置きます。
しきい値 k と総数 n
nは配る枚数、kは復元に必要な最小枚数です。正しく作ったシェアなら、任意のk枚以上で復元できます。
候補
集めたシェアと、わかっている生成条件に矛盾しない値や点です。候補を選ぶ操作は、答えの入力ではありません。
乱数
秘密と別に選ぶ補助の数です。全体から同じ確率で選ぶことを「一様に選ぶ」と呼びます。
有限体 GF(p)
この教材ではpを素数とし、0〜p−1を使って、pで割った余りで計算します。0以外の数での割り算も定義できます。
式と係数
式は座標が満たす条件です。a x₁+b x₂≡cでは、a,bが座標に掛ける係数、cが右辺の値です。
法線(係数の組)
式の係数を並べた組です。x₁+3x₂≡3なら(1,3)が法線です。右辺cも付けた(1,3,3)が、この教材で配るシェアになります。
超平面
2座標では直線、3座標では平面に当たる、1本の一次式が表す点の集まりです。有限体では飛び飛びの点として扱います。

実務用のバックアップツール

Day124 Scatter Seedsは、パスワード・復旧キー・シードなどを複数のシェアに分け、紙に印刷して別々に保管するためのツールです。

復元時は、必要な枚数のシェアをQRまたは文字列で読み込みます。

採用方式はShamir(シャミア)の秘密分散法です。この教材で扱うBlakley式の実用版ではありません。

Day124 Scatter Seedsを開く

座学は1→4→7の順で、方式・候補数・乱数の範囲を読むと進めやすくなります。2は証明、3は原論文、5・6・8は発展事項です。9は改ざん検査の限界、10は関連ツールを扱います。

x₂…x_k は GF(p) 全体(0を含む)から一様に、秘密ごとに新しく、法線とは別に選ぶ。

法線は公開・使い回してよい。使い回してはならないのは x₂…x_k。

1. しきい値法と1979年の2つの提案

秘密分散では、秘密から複数のシェアを作ります。(k,n) しきい値法では、n枚のうち任意のk枚以上で秘密を戻せます。

完全な秘密分散では、k枚未満を見ても秘密についての確率は変わりません。候補が複数残るだけでは、この性質を示したことにはなりません。

ShamirとBlakleyは1979年に、しきい値法を独立に提案しました。このツールでは、有限体での超平面の交点を使う形を学びます。

秘密とシェアの見せ方
方式 学習用の表し方 k枚以上を集めたとき
Shamir 秘密は多項式の定数項。シェアは曲線上の点 多項式を定めて定数項を読む
このツールのBlakley 秘密は交点の第1座標。シェアは超平面 交点を定めて第1座標を読む

Blakleyの1979年の原論文は射影空間を使う形です。このツールの式との違いは第3節で説明します。

出典:原論文2件は一次資料です。Blakleyは本文を確認しました。Shamirは書誌確認で、ここでの調査では本文未確認です。独立の提案という位置づけは、HACなどの二次資料でも確認しています。

BlakleyのDOI 10.1109/AFIPS.1979.98も同じ論文を指します。ここではDOI 10.1109/MARK.1979.8817296へのリンクを使います。

2. 第1座標を秘密にする条件

この節は「k枚なら復元、k−1枚なら情報が増えない」を証明します。一様な乱数の下で、どの秘密にも同じ数の乱数の組が対応することが要点です。下の行列はその確認に使います。

F=GF(p) とし、点をX=(s,r₂,…,rₖ) とします。秘密はs=x₁ だけで、シェアiは公開の法線aᵢ と右辺cᵢ=aᵢ·Xです。

x₂…x_k は GF(p) 全体(0を含む)から一様に、秘密ごとに新しく、法線とは別に選ぶ。法線は公開・使い回してよい。使い回してはならないのは x₂…x_k

乱数の座標同士も独立に選びます。法線の選び方も秘密に依存させません。法線を再利用しても、この前提と次の2つの検査を満たす必要があります。

法線に対する2つの検査
検査 行列で書いた条件 保証すること
(i) どのk本の法線も独立 どのk枚からもXを1点に定められる
(ii) どのk−1本もe₁=(1,0,…,0) を加えると独立 k−1枚以下では、秘密sの確率分布が変わらない

選んだシェアの法線を並べた行列をA_Tとします。e₁ がその行空間に入れば、行の線形結合からsが求まります。入らなければ、sの情報は増えません。

後者ではA_T w=0、w₁=1となるwが存在します。秘密sの解Xに (s′−s)wを足すと、同じシェアを持つ秘密s′ の解になります。

この対応は逆にも戻せます。一様な乱数のもとでは、同じシェアが現れる確率はsに依存しません。これが「全部か無か」の理由です。

証明の筋はBeimel 2011のClaim 2と同じです。サーベイは二次資料・本文確認済みで、このツールの記号への対応づけは、このツールでの整理です。

3. Blakley 1979の原文の形

1979年の論文と、この教材の有限体の式は同じ書き方ではありません。原文の記述と、教材で置いた条件を分けて読みます。原資料を詳しく確認したい人のための節です。

原論文では、ベクトルfの無作為な位置に鍵を置き、別の無作為な位置の成分を1にします。fを含む原点を通る超平面をシェアにします。

復元する対象は、原点を通る直線です。これは射影空間の1点に当たります。このツールが扱う、秘密を固定の第1座標に置く形とは異なります。

原文とこのツールの記号
項目 1979年の原文 このツールとの対応
しきい値 b+1 k=b+1
シェア総数 a+b+1 n=a+b+1
原文のベクトル空間の次元 b+2 k+1
しきい値ぶんの交わり 原点を通る直線 このツールではk次元空間の1点
1枚不足での交わり 2次元部分空間 このツールではアフィン直線

原論文では直線を復元したあとも、鍵の候補を試します。既知の平文と暗号文などにより、正しい鍵を認識できることを前提にしています。

原文にある候補数の記載
場所 記載された候補数
p.316 b+2
p.317 (b+1)(b+2)

上の2つの数え方は原文でそろっていません。ここでは数値を訂正せず、その不一致を示しています。

安全性は “unproven but plausible” とする仮定Hypothesis 1・2に依存します。このツールの第2節の完全性の証明を、原論文の証明と読み替えることはできません。

原文の「第1検査・第2検査」は行列Mの成分や小行列式に対する検査です。このツールの法線に対する「検査 (i)(ii)」とは別の検査です。

補足:原文の記述だけでは、同じ追加行を含む行集合の組が除かれません。そのような組では直線を一意に定めない場合があります。これはこのツールの調査での計算です。

出典:Blakley 1979、pp.313–317(一次・本文確認)。原文の方式は紹介のみで、このツールには実装していません。

4. 点全体と第1座標では候補数が違う

点全体を秘密にすると、独立なシェアを1枚追加するたび、点の候補がp分の1になります。第1座標だけを秘密にする場合は、検査 (ii) と一様な乱数が必要です。

固定教材例の候補数
設定 選んだ枚数 点全体の候補 秘密sの候補
k=2、p=13 0 → 1 → 2 169 → 13 → 1 13 → 13 → 1
k=3、p=11 0 → 1 → 2 → 3 1331 → 121 → 11 → 1 11 → 11 → 11 → 1

表は検査 (i)(ii) を通る教材例です。独立なm枚で、点の候補数はp^(k−m) です。m<kのとき、秘密sの候補はp個のままです。

HAC §12.10 Notes、pp.538–539の原文です。HACが参照するのは、1979年の原論文の射影による方式です。

While Shamir's threshold scheme is perfect, Blakley's vector scheme is not (the set of possible values of the shared secret narrows as subsequent shares are added).

この記述は、点全体の版で起きる候補の減少と合います。これはこのツールでの読みであり、HACが第1座標版の条件を説明しているという意味ではありません。

Wikipediaの「1座標だけなら内部の者は外部の者と同じ」という説明も、検査 (ii) なしには成り立ちません。1枚の式だけでsが定まる法線も存在します。

HACはMenezes・van Oorschot・Vanstone著、1996年(二次・本文確認)。Wikipediaも二次資料として扱い、確認した版はrevid 1379678799です。

5. シェアの大きさとShamirとの対応

1枚にいくつの数を入れる必要があるかを比べます。係数を毎回渡すか、番号から決めるかで量が変わります。表の単位は有限体の数1個で、保存容量のバイト数ではありません。

多項式f(i)=s+a₁i+…+aₖ₋₁i^(k−1) の係数を点X=(s,a₁,…,aₖ₋₁) とします。シェアyᵢ=f(i) は、次の超平面の式になります。

(1,i,i²,…,i^(k−1))·X=yᵢ

法線はヴァンデルモンド行列の1行です。e₁ はi=0の行に当たり、シェアの番号iを0以外で互いに異なる値にすれば、検査 (i)(ii) を満たします。

この式でShamirとBlakleyを対応づけることを明示した一次資料は、今回の調査では見つかっていません。ここはこのツールでの整理です。

m個の体の要素を分けるときの1人ぶんのシェア
法線の扱い 体の要素数 k=3、m=1 k=3、m=16
要素ごとに法線も渡す mk 3 48
1組の法線を再利用して渡す m+k−1 3 18
公開の番号から法線を決める m 1 16

表は正規化した超平面を表す、概念上の体の要素数です。公開の番号と、正規化で1にした成分の位置を示す情報は除いています。保存するバイト数の比較ではありません。

法線を再利用しても、各要素の乱数の座標は新しく選びます。公開の番号から法線を決める場合は、配る値が右辺だけになり、秘密と同じ大きさになります。

HACは情報レート1の方式をidealと呼びます。完全な方式ではシェアを秘密より小さくできず、公開の法線を使う形はこの下限に達します。

近い記述はWikipedia、UIC CS594第8回の講義資料、darrelllong/secret-sharingのREADMEにあります。いずれもこの関係の説明では二次資料として扱います。

Kothariの “Generalized Linear Threshold Scheme” はCRYPTO ’84、LNCS 196、pp.231–241(1985年刊)です。書誌のみ確認し、本文・要旨は未確認です。

6. 一般の位置を保証する作り方

任意のk枚以上で復元し、k−1枚では秘密を絞らないように、式の係数を選ぶ必要があります。ここでは実装済みの2つの作り方と、関連する別の構成・上限を分けて説明します。

法線が乱数でも、検査 (i)(ii) が自動的に成り立つわけではありません。このツールでは、乱数を引いて検査する方法と、ヴァンデルモンドによる構成を選べます。

法線の構成と条件
方法 作り方 条件・実装範囲
乱数+検査 すべての対象の組で (i)(ii) を確かめ、不合格なら引き直す 検査は法線だけ。Xと右辺を判定に使わない
ヴァンデルモンド (1,i,…,i^(k−1))。iは0以外で互いに異なる n≤p−1。このツールで使用
コーシー行列 Cᵢⱼ=1/(xᵢ−yⱼ)。xᵢ とyⱼ はすべて互いに異なる このn+1行の構成はn≤p−k−1。ここでは紹介のみ

コーシー行列は、どの正方の部分行列も正則です。n+1行を用意し、先頭行をe₁ に写す正則行列を右から掛けると、残りを法線にできます。

この基底変換は行の独立性を保ちます。残りのn行が検査 (i)(ii) を満たすという対応は、このツールでの整理です。

[e₁;A] のどのk行も独立という条件は、最大距離分離符号(MDS符号)に対応します。射影空間では、これらの行は弧を作ります。

有限体とシェア数の上限
範囲 上限の根拠 確認状況
k=2 射影直線の点はp+1個。e₁ を除きn≤p このツールでの数え上げ
k=3、pは奇素数 Bose 1947によるp+1の上限からn≤p 書誌は二次資料で確認。原論文本文は未確認
2≤k≤p、pは素数 Ball 2012の上限p+1からn≤p 一次・要旨と冒頭確認。証明本文は未精査
このツールの選択範囲 n≤min(8,p−1) ヴァンデルモンドにそろえた設計上の制限

n=pが数学的に不可能という意味ではありません。Ballの結果をここで使う範囲は、pが素数で2≤k≤pの場合です。

Boseの書誌:R. C. Bose, 1947, Sankhyā 8, pp.107–166。原論文本文を読んだ資料としては扱っていません。

構成の計算はこのツールでの整理です。コーシー行列の性質はWikipedia(二次)、上限はBallの一次資料を参照しています。

7. 実数・整数と乱数の範囲

実数・整数の全体には、一様な確率分布を置けません。乱数の範囲を限ると、シェアの式と範囲の条件から秘密の候補が減ることがあります。

最初の教材例X=(5,8)の法線を使った整数の実験です。mod 13を取らずに計算し、sとx₂は0〜12の整数に限ります。

整数の式1本から残る秘密の候補
シェア 整数の右辺 残るs
#1 29 {2,5,8,11}
#2 50 {0,5,10}
#3 36 {3,4,5,6,7,8,9}
#4 33 {5,6}

有限体を使っても、乱数の座標を0〜3だけから選べば同じ問題が起きます。「確かめる」の狭い乱数の例は、その範囲から作った別の固定教材例です。

範囲の制限がなくても、乱数の分布が一様でなければ候補の確率が偏る場合があります。候補の個数と、それぞれの確率を分けて考える必要があります。

実数の図とmod pの計算
整数の行列式 実数での独立性 mod pでの独立性
0 独立でない 必ず独立でない
0でないpの倍数 独立 独立でない
pの倍数でない 独立 独立

p=13、法線 (1,3) と (6,5) の整数の行列式は −13です。実数では独立でも、mod 13では独立ではありません。交わりの有無は右辺にも依存します。

3Dの実数の図は導入図です。同じsの切り口を選んでも、実数の交点の座標とGF(p) の点は一般には一致しません。有限体の候補数はGF(p) の計算で読みます。

pyquorumの作者は、0.3.0より前に、2^127−1の体で座標を64ビットの範囲に限っていた問題を公表しています。格子基底簡約(LLL)による復元の報告です。

数値表と行列式は、画面の固定教材例と同じです。pyquorumは作者自身の公表を確認した一次資料で、現在の版への攻撃結果を主張するものではありません。

8. 線形秘密分散とスパン・プログラム

線形とは、秘密と乱数をそれぞれ決まった数倍して足す形です。この見方を広げると、人数だけでなく「誰と誰がそろえば戻せるか」も表せます。下はそのための発展事項です。

行列Mの各行を参加者に割り当て、X=(s,r₂,…,rₖ) からM Xを配ると、線形秘密分散になります。一般には、参加者1人に複数の行を割り当てることもできます。

誰が集まれば復元できるかは、その人たちの行の線形結合でe₁=(1,0,…,0) を作れるかで決まります。人数だけで決めない参加条件も表せます。

このツールと一般の線形秘密分散
このツールの量 一般の枠組み 役割
法線aᵢ 参加者に割り当てた行 シェアを計算する係数
点X=(s,r₂,…,rₖ) 秘密と一様な乱数のベクトル 行列を掛ける入力
右辺cᵢ M Xの成分 参加者が持つ値
e₁ を作れる集合 資格のある集合 線形結合でsを復元
e₁ を作れない集合 資格のない集合 第2節の乱数の前提で、sの情報が増えない

検査 (ii) は、k−1枚のどの集合もe₁ を作れないことを保証します。検査 (i) と合わせると、任意のk枚以上で復元できるしきい値の参加条件になります。

行に参加者名を付け、目標ベクトルを作れるかで受理を決める表現を、モノトーン・スパン・プログラム(MSP)と呼びます。

BeimelのRemark 2は、Brickellが1989年に1人1行の場合を暗黙に定義し、Karchmer–Wigdersonが1993年にスパン・プログラムを明示的に定義したと説明しています。

この説明はBeimelのClaim 2・Remark 2(二次・本文確認)に基づきます。BrickellとKarchmer–Wigdersonの原論文は書誌を確認しましたが、本文は未確認です。

9. 改ざんの検出と、誤りのあるシェアの特定

枚数を増やすと、式の答えが合わないことや、一定の条件でどの1枚が合わないかを調べられます。これは秘密を隠す性質とも、送信者を確かめる認証とも別の話です。

秘密分散の完全性は、シェアの改ざんを防ぐ性質ではありません。ちょうどk枚で式が解けても、その答えが元の秘密かどうかは、それだけではわかりません。

最初の教材例で、#2の右辺を11から12へ変えます。法線はそのままにして、#1・#2の2枚で計算すると(8,7)となり、計算された秘密の値は5から8へ変わります。元の秘密は5のままです。

1枚を書き換えた固定教材例
集める枚数 得られる結果 わかる範囲
k=2:#1・#2 (8,7) 誤った1点が出る。2枚だけでは気づけない
k+1=3:#1・#2・#3 (8,7)、(5,8)、(0,5) 不一致には気づくが、1枚を特定できない
k+2=4:#1〜#4 (5,8) が3回、ほかの点は各1回 真の点を通らない #2を特定

表の条件は、改ざんが1枚で、すべてのk枚の部分集合を調べ、書き換えた超平面が元のXを通らないことです。正しい法線は検査 (i) を満たす必要があります。

同じ条件を一般化すると、最大t枚の誤りを特定して訂正するにはk+2t枚あれば足ります。正しいシェアの法線は一般の位置にあり、全対象の組を調べるという条件つきです。

書き換えても元のXを通る超平面なら、この一致の検査では改ざんとして検出できません。送信者の認証や、暗号学的な改ざん防止を提供する説明ではありません。

Shamirとこの形はどちらも線形です。選んだk枚についてs=u·cと書けるので、右辺の1つをδずらすと、計算される第1座標も対応する係数のδ倍だけずれます。

#1・#2ではu=(8,3)です。#2の右辺を+1ずらすと、計算値sは5→8となります。Blakleyの素朴な形はシェアに法線も含むため、その成分を書き換える余地もあります。

数値は画面の固定教材例と同じです。検出・訂正の説明は、正しい法線の独立性からこのツールで整理したものです。Shamirの多項式による方式の一次資料を下に示します。

10. 関連ツール

次に学ぶ内容と、実用のバックアップを扱うツールを選ぶ案内です。表で、目的と操作の違いを確認してください。

このツールは、小さな有限体で秘密分散の式と候補を学ぶ教材です。パスワード・シード・鍵などの本物の秘密は入力しないでください。

目的に合わせた4つの関連ツール
ツール 扱う内容 Day126との関係
Day123 ShamirSharing CipherLab GF(p)・GF(2⁸) で学ぶ多項式の秘密分散 係数を点、シェアを超平面と読む対応を学べる
Day070 VisualCryptography CipherLab 2枚の画像を重ねる視覚暗号 数式で交点を求める方式との違いを比べる
Day124 Scatter Seeds Shamirの秘密分散で紙に分け、保管・復元する Blakley式の実用版ではなく、方式が異なる別ツール
Day125 Overlay QR Shares 視覚暗号とQRの重ね合わせ 画像を重ねる復元と、有限体の求解を比べる

出典は、作者による各ツールの公開説明です。下のリンクから、それぞれのツールを開けます。