Web Crypto によりブラウザ内で 100% 実行されます — 秘密とシェアが端末の外に出ることはありません。
Write a Python implementation of Shamir's Secret Sharing over GF(256) that interoperates with these share strings: each share is the two-digit hex x-coordinate, a dash, then one hex byte per secret byte (e.g. "01-a3b2c1"). It must split a secret into 5 shares with threshold 3, and reconstruct from any 3 of them. Use the AES reduction polynomial 0x11B and rejection-free crypto-random coefficients.
機能の説明
シャミアの秘密分散(Shamir’s Secret Sharing)は、秘密を N 個のシェアに分割し、そのうち任意の K 個があれば復元できるようにします。K 個に満たなければ何も明かしません — 部分的なヒントすら漏れません。暗号ウォレットのシードフレーズ、マスターパスワード、暗号鍵を複数の人や場所に分散させ、単独の保持者(そして K に満たない連合)が誰も単独で行動できないようにするための数学的基盤です。現実の用途には、暗号通貨のカストディ(マルチパーティのウォレットバックアップ)、キーエスクロー、核発射コード、相続計画(弁護士 + 配偶者 + 銀行貸金庫)、災害復旧用の封筒などがあります。
このツールはスキーム全体をブラウザー内の GF(256) — AES と同じガロア体 — 上で実行し、多項式の係数は Web Crypto から供給します。入力した内容も、貼り付けたシェアも、デバイスの外に出ることは一切ありません。
使い方
- 上部の Split / Reconstruct トグルでモードを選びます。
- Split: 秘密を入力し、Total shares (N)(2〜255)と Threshold (K)(2〜N、復元に必要な最小数)を設定して、Split secret を押します。
- 番号付きの各シェアをその保有者へコピーします(各シェアに専用の Copy ボタンがあり、Copy all shares で一括取得できます)。シールドの注記が思い出させてくれます: N 個のうち任意の K 個で秘密が復元され、K-1 個では何も分かりません。
- Reconstruct: フィールドごとに 1 つのシェアを貼り付け(追加は Add share)、Reconstruct secret を押します。復元された秘密はコピーボタン付きの緑色の出力欄に表示されます。不正または不整合のシェアは明確なエラーになります。
例
シードフレーズを 3-of-5 で分割
秘密: river vacuum lamp fiber quiz noise border mind smile crouch tuna — N=5、K=3 とすると、次のような 5 つのシェアが得られます:
01-9f3ac27e1b84d05c…
02-4b19e7a2c83f5d16…
03-c7e02f9a45b6138d…
04-2ad673f1e09b85c4…
05-85d31c6b7a49f0e2…
(値は毎回異なります — 多項式の係数は分割のたびに新しくランダム生成されるため、同じ秘密の 2 回の分割が同じ見た目になることはありません。)
5 個のうち任意の 3 個から復元
シェア 01-…、03-…、05-… を 3 つのフィールドに貼り付けて Reconstruct secret を押すと、元のシードフレーズが正確に戻ってきます。1+2、2+4+5 など、3 つの組み合わせならどれでも機能します。シェア 2 つだけではゴミしか再構成できません。
誤った組み合わせは派手に失敗する
2 つの異なる分割由来のシェアを混ぜる(または同じ位置を主張する 2 つのシェアを混ぜる)と、黙って間違った秘密を返すのではなく Two different shares both claim x=01 - they cannot come from the same split と表示されます。
補足事項
- K-1 個のシェアが何も明かさない理由: 秘密の各バイトはランダムな (K-1) 次多項式の定数項になります。K-1 個の点は あらゆる 可能な定数項と両立します — 秘密は情報理論的に隠されており、計算量的に困難なだけではありません。これは無限の計算能力に対しても成り立ちます。
- 一行でいうと: シェアは GF(256) 上の多項式の評価値 f(1)…f(N) であり、復元は x=0 におけるラグランジュ補間です。加算は XOR、乗算は AES の簡約多項式(0x11B)を使います。
- 分割のたびに新しいランダム性: 同じ秘密を 2 回分割すると完全に異なるシェアになります。どちらの組も独立に復元できます。
- シェアは鍵と同じ扱いで: シェアは秘密の半分(または 3 分の 1、5 分の 1)です。別々の場所に保管してください — 攻撃者が K 個を集めれば、秘密を手中に収められます。
- プライベート: 100% クライアント側で動作します。共有リンクが運ぶのは N/K の設定だけで、秘密は決して含まれません。
- 関連ツール: Password Strength Analyser、Secure Token Generator、HMAC Generator。