147 / 736SSS

Shamir Secret Sharing

シャミアのしきい値秘密分散

バックアップを分け、その一部がそろえば復元できるようにする方法です。ただし、持ち主の許可なく必要な分を入手した人にも、同じルールが働きます。

Shamir Secret Sharing は、一つの秘密から複数の異なるシェアを作る数学的な方法です。あらかじめ決めた数があれば秘密を復元でき、理想的な方式では、それ未満からは秘密の一部さえ分かりません。Adi Shamir が1979年に発表しました。Bitcoinでは、ウォレットを復元するための情報が秘密に当たる場合があります。Seed Phraseを切り分けることではありません。シェアは計算で作られ、それぞれ対応する方式の中で意味を持ちます。

ウォレットは、ビットコインを受け取ったり送ったりするためのアプリや機器です。アンナは、記録の一部をなくしても使えるバックアップを望んでいます。五つのうち三つという設定を選ぶと、異なる五つのシェアが作られ、同じ組の有効な三つがそろえば秘密を復元できます。二つはなくせますが、三つはなくせません。必要な数をしきい値と呼び、一般にn個中k個なら、作ったn個のうちk個が必要で、n−k個まで失えます。ただし、しきい値はアンナの同意を判断しません。他人が三つを入手したり、保管者同士が協力したりしても、同じ秘密を復元できます。しきい値を下げると復元は楽になりますが、アンナ抜きで復元できる人数も少なくなります。 [1] [6]

五つのファイルを一つのクラウドアカウントに保存しても、効果は限られます。そのアカウントを失ったり侵害されたりすると、すべてが同時に影響を受けるからです。適切に分散して保管し、方式と設定値を記録し、信頼できる機器で復元を確認する必要があります。相続人も使う計画なら、何を探し、どう安全に扱うかが分かるようにします。同じ秘密Sを新しい乱数で分け直すと、新しい組になります。新旧のシェアは混ぜません。しかし、古い組も必要数があればSを復元できます。分け直すだけでは、流出した有効なバックアップを無効にすることも、秘密自体を変えることもできません。 [1] [4]

通常の復元では、秘密全体が一台の機器に再び現れます。その機器が侵害されていれば、その瞬間に秘密を奪われる可能性があります。秘密がPrivate Key、つまり資金の支出を承認するデジタル署名を作るための秘密の数値なら、入手した人はその後シェアを集め直さずに署名できます。一方、Multisigは、その支出条件に従って複数の署名を要求します。しきい値署名という仕組みもあります。複数の参加者が安全に共同計算する追加のMPCプロトコルを使えば、鍵全体を組み立てず、シェアから署名を作れます。NISTはこれらを区別しています。Shamirのシェアだけで、この署名プロトコルまで備わるわけではありません。 [3] [5] [6]

名前にShamirとある二つのソフトでも、互いのシェアを読めるとは限りません。数学的な演算、値の符号化、シェアの識別子、どの組に属するかが一致する必要があります。SLIP-39は、この方法に基づく具体的な標準です。シェアを書き表す単語リスト、補助情報であるメタデータ、グループ、暗号化、エラー検査を加えています。したがって、一般原理は既存のSeed Phraseを手作業で分割する手順ではありません。ウォレットをそのバックアップに託す前に、対応形式を把握し、予定する方法で本当に復元できることを確かめます。 [2]

五つのうち三つなら、二つをなくした場合の結果は明確です。しかし、破損や偽造されたシェアがあると、基本の計算は不足を知らせる代わりに、別の秘密を返すことがあります。方式そのものは、シェアの出所や作成者の誠実さを証明しません。エラー検出や訂正、分散が正しく行われたかを確認するverifiable secret sharingは、それぞれ前提条件を持つ追加の仕組みです。例えばSLIP-39はチェックサムと、digestと呼ばれる検証値を加えています。どのShamir Secret Sharingアプリにも同じ検査があるわけではなく、チェックサムが正しくても出所を信頼できる証明にはなりません。 [2] [5]

理想的な方式では、完全なシェアがk個未満なら、攻撃者は計算能力が無限でもSについて新しい情報を得られません。シェアは元の単語の三分の一が見える断片ではありません。ただし、分散に使う数が独立かつ等確率で選ばれる、適切なランダム性が前提です。予測できる数、数の再利用、機器のメモリからの漏えいがあれば事情は変わります。SLIP-39のdigestなど、追加の検証データも別途評価する必要があります。また、元のパスワードが弱ければ、バックアップを分けても、別の方法で推測される可能性は残ります。 [1] [2]

小さな秘密S=5と、式f(x)=5+3*x mod 17を考えます。mod 17は17で割った余りを取るという意味です。三つのシェアは(1,8)、(2,11)、(3,14)という組で、最初の数が位置、次の数が計算した値です。最初の二点から増分3が分かり、元の秘密は8−3=5と求められます。三通りの点の組合せのどれでも、元の秘密を復元できます。一方、点(1,8)だけなら、増分をa=8−S mod 17と選ぶことで、0から16までのどのSとも整合します。この小さな計算は説明用であり、実際のウォレットのバックアップ設計ではありません。 [1]

一般式はf(x)=S+a1*x+…+a(k−1)*x^(k−1)です。この式を多項式と呼びます。Sが秘密で、他の係数は有限体から独立かつ一様ランダムに選ぶ要素です。有限体とは、加算や乗算に明確な規則がある数学的な環境です。シェアは(x,f(x))であり、xは互いに異なる非ゼロ値にします。x=0ならSがそのまま分かるためです。k個の点からラグランジュ補間でf(0)、つまり秘密を計算します。同じ点のコピーを二つ持っても情報は増えません。素体GF(p)では、通常の割り算の代わりに、除数との積が1になるモジュラ逆元を掛けます。また、GF(256)での計算は、単に256で割った余りを取る計算とは違います。両者を混同してはいけません。 [1]

理解を深めるには、この項目とあわせて次もお読みください SLIP-39, Multisig, Seed Phrase, Private Key, Bitcoin Inheritance Plan. 次の項目からも参照されています SLIP-39, FROST.

DOC · 001Adi Shamir — How to Share a Secret (1979)一次資料 DOC · 002SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes仕様 DOC · 003NIST — Multi-Party Threshold Cryptography一次資料 DOC · 004Trezor — Multi-share Backup文書 DOC · 005NISTIR 8214 — Threshold Schemes for Cryptographic Primitives一次資料 DOC · 006Bitcoin Developer Guide — Wallets文書
改訂日: 一次資料を優先 · 投資助言ではありません