Shamir秘密分散(秘密の分割・復元)
テキストの秘密(パスフレーズやメモなど)を n 個のシェアに分割し、そのうち k 個以上を集めたときだけ元に戻せるようにします。k-1 個以下のシェアからは秘密について何も分かりません。GF(256) 上のShamir法を使い、乱数にはブラウザの crypto.getRandomValues を使います。処理はすべてブラウザ内で完結し、秘密やシェアがサーバーに送信されることはありません。秘密そのものをパスワードで暗号化したい場合は テキスト暗号化・復号 も使えます。
🔒 ブラウザ内で完結・入力データはサーバーに送信されません
使い方
- モードで「分割」を選び、秘密のテキストとシェアの数 n、復元に必要な数 k を入力します。
- 「シェアに分割する」を押すと、n 個のシェアが1行に1つずつ表示されます。コピーして別々の場所や人に保管します。
- 復元するときはモードで「復元」を選び、集めたシェアを1行に1つずつ貼り付けます。
- 「秘密を復元する」を押すと、k 個以上のシェアがそろっていれば元のテキストが表示されます。
注意事項
- k 個未満のシェアしか残っていないと、秘密は復元できません。シェアを紛失して k 個を下回ると、秘密は二度と取り戻せません。復元用の連絡先や保管場所を忘れないようにしてください。
- 学習・バックアップ用途のツールです。本ツールは監査された実装ではないため、実運用の重要な鍵や資産の管理には、検証済みのソフトウェアを使うことをおすすめします。
- シェアは16進文字列で、先頭の3バイトがバージョン・k・x座標です。シェアそのものは暗号化されていないため、k 個が同じ人や場所に集まると秘密が分かります。保管先は分散させてください。
- 秘密はUTF-8のテキストで扱い、復元時の取り違え検出のため末尾にCRC32を付けて分割します。このため、シェアは元の秘密より4バイト分長くなります。他のツールのシェアとは互換性がありません。
- シェアの数は2〜255、k は2以上 n 以下です。ファイルの分割には対応していません。
用語解説
Shamir秘密分散
秘密を複数のシェアに分け、しきい値以上のシェアを集めたときだけ復元できる方式です。k-1 次の多項式の定数項に秘密を置き、複数の点(シェア)から補間して取り出します。
しきい値(k)
復元に必要な最小のシェア数です。「3-of-5」なら5個に分割し、どの3個でも復元できますが、2個では何も分かりません。
GF(256)
要素が256個(1バイト分)の有限体です。バイト単位で足し算(XOR)・掛け算ができるため、1バイトずつ秘密を分割できます。
よくある質問
シェアを紛失して k 個未満になったら秘密は取り戻せますか?
取り戻せません。k 個未満のシェアからは秘密について何も分からない仕組みのため、運営者を含めて誰も復元できません。分割前に、シェアの保管先と、何個まで失っても大丈夫かを決めておいてください。
3-of-5 のような n と k はどう決めればよいですか?
n は保管先の数、k は「集まれば秘密が分かってよい人数」です。k を大きくすると漏えいに強くなりますが、紛失に弱くなります。n と k の差が、失っても復元できるシェアの数です。たとえば3-of-5なら2個まで失えます。
「シェアの形式が正しくありません」と出るのはなぜですか?
このツールで作ったシェア(16進文字列)以外が含まれているか、コピー時に文字が欠けたり余分な文字が入ったりしています。1行に1つずつ貼り付け、行数の表示を手がかりに該当行を確認してください。他のツールのシェアとは互換性がありません。
「復元できませんでした」と表示されるのはどんなときですか?
シェアが1文字でも書き換わっている場合や、別々の秘密から作ったシェアが混ざっている場合です。復元時に秘密末尾のチェックサムを照合して検出しており、間違った秘密が表示されることはありません。
同じ秘密を分割すると毎回同じシェアになりますか?
なりません。分割のたびに新しい乱数で多項式を作るため、シェアは毎回変わります。古いシェアと新しいシェアを混ぜても復元できないので、再分割したら古いものは破棄してください。
このページをシェア
