世界を動かす技術を、日本語で。

HNに表示: 記憶を失った場合、コンピュータへのアクセスを取り戻す方法は?

概要

  • Shamir's Secret Sharingage暗号化 を組み合わせたファイル暗号化・復号ツール
  • 復号キーを 信頼できる友人 に分割配布し、閾値以上の協力でのみ復元可能
  • 完全オフライン動作 ・自己完結型バンドル、サーバーやインターネット不要
  • オープンソース で、コードと設計思想はGitHubで公開
  • デモバンドルを使った 2分間体験 が可能

Shamir's Secret Sharingベースのファイル暗号分割ツール

  • ファイルを 暗号化 し、復号キーを 複数の友人 に分割配布
  • 例:5人に分割、うち3人が協力すれば復号可能な設定
  • 単独の友人 ではデータにアクセス不可
  • それぞれの友人には recover.html を含む自己完結型バンドルを配布
    • recover.htmlは ブラウザでオフライン実行、インターネット不要
    • サイトが消滅しても 復元機能 は維持
  • ファイル暗号化 → キーを5分割 → 友人に配布
    • 任意の3人が シェアを結合 → 復号 → ファイル復元
  • 組み合わせ自由な 復号プロセス (例:5人中3人)

本ツールの特徴と非対応事項

  • 特徴

    • ブラウザ上で動作する完全オフラインツール
    • リカバリーキーを友人間で分割管理 可能
    • オープンソース (Apache-2.0ライセンス)
    • 自己完結型 バンドルで、サイト不要で復元可能
  • 非対応事項

    • サービスや企業 ではない
    • アカウントシステムやクラウド製品 ではない
    • データ保存機能 は持たない
    • 単体でバックアップソリューション にはならない

2分で体験できるデモ手順

  • デモバンドル (3つのサンプルバンドル)をダウンロード
  • bundle-alice/recover.html をブラウザで開く
  • BobとCarolのREADME.txt をページにドラッグ&ドロップ
  • 閾値到達で自動復号 の動作確認
  • 友人による 実際の復元体験 をシミュレーション可能

信頼性・検証性・技術的背景

  • オープンソースコード はGitHubで公開
  • 暗号設計の自己監査ドキュメント を同梱
  • すべてローカル実行、ファイルは端末から出ない
  • まずデモバンドルで挙動確認 を推奨
  • age を暗号化エンジンに採用(現代的・高評価)

開発背景

  • 事故や記憶喪失時 も大切なデータにアクセスできる仕組みの必要性
  • 単独の人やサービス に全てを委ねない設計思想
  • Shamir's Secret Sharing の利点活用
  • 友人が協力して簡単に復元できる自己完結型ツール がなかったため自作
  • 同様のニーズを持つ他者の役にも立つ ことを期待し公開

個人的な動機と実装技術

  • 自転車事故による脳震盪 でログイン情報喪失リスクを実感
  • Hashicorp Vault実装のShamir's Secret Sharingage暗号化 の組み合わせ
  • WASMパッケージ でオフライン・ブラウザUX実現
  • 5人中3人や7人中5人 など、柔軟な閾値設定
  • 家族や友人が協力して重要データを復元 できる安心感
  • デモはウェブサイトで即体験可能、全てブラウザ内動作

Hackerたちの意見

ローテクだけど、秘密のパスワードは物理的なジャーナルに書いてるんだ。それを耐火・防水の金庫に入れて、パートナーと私だけが知ってる場所に隠してる。パスワードマネージャーも使ってるよ。他のことは全部パスワードマネージャーに入れてる。

一般的に、死んだときのバックアッププランはこのシナリオにも使えるかもしれないね。死んだときに明かしたくないことについて、もうちょっと考える必要があるかも。

代替案として、パートナーと私(あと2人の親しい友人も)でお互いの秘密を含むパスワードマネージャーを持ってる。これは記憶喪失のシナリオを助けるためというより、死後のサービスへのアクセス(特にサブスクリプションの停止とか)を考えた結果だね。信頼度が低い場合は、弁護士を秘密の仲介者として使うのもアリかも(遺言の一部として)。

これだね。物理的な金庫はデジタルではできないことを提供してくれる。認証情報なしで入るのは難しいけど、不可能ではない。インターネットでは、誰でもアクセスできるか、何かがうまくいかないと復元不可能になるかのどっちかだよね。

俺もそうしてるけど、「耐火性」には注意が必要だよ。家が全焼するような火事だと、耐火の銃器保管庫や小さい耐火ロックボックスも壊れちゃうし、壊れなくても中身が熱くなりすぎて燃えちゃうからね。銀行の貸金庫は、火事に対してもっと頑丈なセキュリティを提供してくれるかも。銀行は家より燃えることが少ないからね。火に対して本当に頑丈にするには、数フィート埋めるくらいじゃないと実現できないかも。

確かに、シンプルな方がいいこともあるよね。俺はいつも動き回ってるから、金庫はあまり合わないんだ。何かが起こることが心配でもあるしね。一つのバスケットに全ての卵を入れないっていう原則でやってるんだ。

ああ、友達が昔これを作ったんだよね。 https://michael-solomon.net/keybearer https://github.com/msolomon/keybearer

まじで!?こんな解決策を探してたんだ。多くはシャミールを使って暗号化できるけど、実際にブラウザからファイルをアップロードできて、使いやすいUXを持ってるのはなかったんだよね。14年前?ほんとにすごいよ、友達。俺のZIPバンドルはWASMのせいで1-2メガバイトなんだけど、君はこんな少ないサイズで達成したんだね。素晴らしい仕事だよ!俺のについても聞きたいな。違いの一つは、リカバリーアプリを含むZIPファイルを作成して、技術に詳しくない友達向けの説明書もPDFで用意してることなんだ。全体的に、リカバリー体験をできるだけスムーズにしようとしてるんだ。でも、君のバージョンは俺が見つけた中で唯一、基本的に俺のやってることを実現してるものだよ。他はどこかで足りてないんだ。

いいね!私の変なアイデアを使ってみるのもいいかも。パスワードの一部を送信する前に捨てたり変更したりできるんだ。ログインするとき、サーバーはその欠けた部分を総当たりで探すことになる。ペットや車の数とか、2024年の車の色みたいなセキュリティ質問を追加することもできる。これを使って総当たりを助ける。目標は、5つ未満のシャードで復号できるようにすることだけど、計算負荷は好きなだけ重くできる。もし誰もピンクの車を覚えてなかったら、x時間余計にかかるよ。

おお、それは厳しいね(笑)!一応、私のアプリは完全にクライアントサイドで動いてるけど、面白いアイデアだね…

「キー強化」や「ペッパリング」についての面白い考え方だね。

それはセキュリティ質問を回りくどくやる方法みたいだね…。

これ、あんまり意味ないと思うな。情報は情報だし、PKBDFの反復回数をめっちゃ高くした短いパスフレーズと何が違うの?シャミールで秘密を分割して、BIP32の単語の改良版でエンコードするのもアリだと思う。

パスワード以外にも、家にはSynology NAS、メールサーバー、いくつかのウェブサイトを運営してるVPS(自分の、家族の、妻の)、Home Assistant、バックアップ付きの家族の写真とかもあるんだ。誰がパスワードだけじゃなくて、全体を管理するノウハウも持ってるんだろう…もっと管理されたサービスに移行するために。

誰でもできると思わない方がいいよ。もし自分がいなくなった後に誰かにアクセスしてもらいたいなら、1000BTCを入れるか、指示を残しておくべきだね。物理的な耐火金庫に紙の指示を入れておく方が、ヒントなしのデジタル暗号化よりもずっと扱いやすいよ。

その通りだね!アプリはそのあたりをガイドしてくれるし、ドキュメントに何を書くべきかアドバイスをくれるREADMEを生成してくれる。でも、ここでは慎重になりすぎることはないと思う。パスワードだけじゃ足りないよ。人に「地図」を渡して、どこに何があるかを教えてあげる必要があるね。

俺もそうだよ。自分と家族のために、ますます多くのサービスをセルフホストし始めてるんだけど、もしバスに正面からぶつかったらどうなるんだろうって考えちゃう。

結局、遺言書にチェックリストを追加することが大事だと思う。アカウントやデータを救出するためのアウトラインみたいなやつ。

「記憶を失った」シナリオは、死や相続計画とはちょっと違って、バイオメトリクスを使えるからね。でも、個人的には後者に直接飛び込んで、一石二鳥を狙った方がいいと思う。

7人中5人ってことは、例えば車の事故で2人以上が同時に乗ってると、全員が生き残れない可能性があるってことだよね。俺はもっと現実的に考えてて、単なる記憶喪失以上の責任があると思う。例えば、昏睡状態になったり、長期間入院したりした場合、信頼できる第三者がアカウントにアクセスする必要があるかもしれないし、請求書や家賃、クラウドサービスの支払いみたいな簡単なことでもね。

TouchIDはいいスタートだと思うけど、毎週パスワードを確認するんだよね。ちょっと冗談っぽいけど、もし記憶を失ったら、どうやってパスワードを持ってる7人(または5人)の友達を思い出すの?もう少し真面目に言うと、友達が今パスワードを出せないようにしたいなら、互いに知らない知り合いだけにした方がいいよね。Facebookの友達全員じゃなくて。そうなると、友達リストはパスワードと同じくらい重要になって、じゃあそのリストをどこに保管したかどうやって思い出すの?実際には、マスターパスワードを一番信頼できる家族(配偶者、親、大人の子供)に預けられればいいけど、彼らが銀行口座を勝手に使ったり、プライベートなデジタル日記を読んだりしない前提でね。

未来の自分を見知らぬ人のように扱おう。見知らぬ人のために書けば、未来の自分が感謝するよ。自分は覚えてると思っても、実際は覚えてないからね。だから、自分に厳しくしすぎず、未来の自分のために楽にしてあげて。もしその見知らぬ人が楽に感じられれば、他の人たち、親戚や子供たちにも良い影響があるはず。仕事や生活がすごく秘密主義でない限り、個人的には電子機器やインターネットなしで機能するシンプルな印刷物や手書きの形式がいいと思う。もちろん、印刷した内容には簡単な暗号化を施して、家族や友達が日常のちょっとしたヒントで解読できるようにすればいい。例えば、家族の秘密コードや、育った町のペットの名前、曾祖父の話に出てくるミドルネームとかね。少し前、義理の母(元教師)と私の名付け親(ビジネスウーマン)がいろいろ忘れ始めたんだ。子供たちはいくつかのアプリを試してみたけど、結局、2つのことを徹底することを提案した。家の中にたくさんのバレットボウルを置くこと(全ての部屋の共通の場所に)と、ペン付きのポケットノートを用意すること。彼女たちはお金からキッチンのアイテム、何でも書き留める。もし何かを忘れたら、そのノートを見ればいいし、鍵を失くしたらバレットボウルを試せばいい。今の計画は、彼女たちの筋肉記憶を鍛えて、ボウルから出し入れすることを覚えさせること(思い出そうとしない)と、書き留めること。

このコメントのこと? https://news.ycombinator.com/item?id=41220059 (何ヶ月も前のこのコメントを覚えてるのに、ボウルを実装してないからか、今は車の鍵がどこにあるか思い出せないのが面白いね。ボウルを実装しておくべきだったな…)

Bitwardenの緊急アクセスを見てみて: https://bitwarden.com/help/emergency-access/ 銀行の詳細や他に入れたいものもカバーされるよ。

信頼できる緊急連絡先は、既存のBitwardenユーザーでなければならないんだよね。 動機は似てるけど、これで機能がほぼ死んじゃうよ。友達がアカウントを使い続ける必要があるからね。OPの実装を理解する限り、完全オフラインならUSBや何かのファイルストレージに鍵を保管しておけばいいだけだと思う。個人的には、最も堅牢な解決策は単一の鍵アクセス(緊急キットみたいなやつ)で、冗長性のために1つ以上の安全な銀行の金庫に分散させるのがいいと思う(多くの銀行はまだ小さなボックスを無料または安く提供してるし)。指示を遺言に書いておけば完了だね。

面白いアプローチだね。暗号だけで災害を解決するふりをするんじゃなくて、人間の回復に明確に焦点を当ててるのがいいと思う。ただ、これと俺のような完全にステートレスなシステム(決定論的導出、エスクローなし)は、逆の失敗モードを解決してるんだ。シャミールベースのソーシャルリカバリーは、信頼できる第三者が連絡可能で、協力する意志があり、回復が特別な出来事であることを前提にしてる。一方、ステートレスシステムは逆を前提にしていて、誰も信頼できず、回復は設計上不可能で、主な脅威はサイレントな妥協だ。どちらが「良い」ということはないし、価値判断だと思う。ここで評価したいのは、トレードオフがユーザーエクスペリエンスの裏に隠されるんじゃなくて、明示的にされていること。興味があるオープンクエスチョンが一つあるんだけど、時間の経過とともに強制のリスクをどう考えるか(友達は変わるし、インセンティブも変わる)、そしてこれをユーザーが関係性の進化に応じて定期的に再分割するべきだと思うかどうか。