本文へスキップ
にゃんこツール

Shamir秘密分散(秘密の分割・復元)

テキストの秘密(パスフレーズやメモなど)を n 個のシェアに分割し、そのうち k 個以上を集めたときだけ元に戻せるようにします。k-1 個以下のシェアからは秘密について何も分かりません。GF(256) 上のShamir法を使い、乱数にはブラウザの crypto.getRandomValues を使います。処理はすべてブラウザ内で完結し、秘密やシェアがサーバーに送信されることはありません。秘密そのものをパスワードで暗号化したい場合は テキスト暗号化・復号 も使えます。

🔒 ブラウザ内で完結・入力データはサーバーに送信されません

使い方

  1. モードで「分割」を選び、秘密のテキストとシェアの数 n、復元に必要な数 k を入力します。
  2. 「シェアに分割する」を押すと、n 個のシェアが1行に1つずつ表示されます。コピーして別々の場所や人に保管します。
  3. 復元するときはモードで「復元」を選び、集めたシェアを1行に1つずつ貼り付けます。
  4. 「秘密を復元する」を押すと、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文字でも書き換わっている場合や、別々の秘密から作ったシェアが混ざっている場合です。復元時に秘密末尾のチェックサムを照合して検出しており、間違った秘密が表示されることはありません。

同じ秘密を分割すると毎回同じシェアになりますか?

なりません。分割のたびに新しい乱数で多項式を作るため、シェアは毎回変わります。古いシェアと新しいシェアを混ぜても復元できないので、再分割したら古いものは破棄してください。

このページをシェア

↑↓ 選択 Enter 開く Esc 閉じる