Horcrux:ファイルを暗号化された断片に分割
(github.com/jesseduffield)- Horcrux は、ファイルを暗号化された Horcrux の断片に分割し、パスワードを覚えていなくても元のファイルを復元できるようにする CLI ツール
- 大きな機密ファイルを暗号化する必要があるが、数年後にパスワードを覚えていない可能性があるユーザーや、複数のチャネルでファイルを送信して攻撃者に傍受される可能性を大幅に下げたいユーザー向け
splitはファイルを分割する際に、生成する断片数と元のファイルの復元に必要な断片数を入力する方式で、例では 5 個の断片のうち任意の 3 個で復元できる構成bindは Horcrux の断片があるディレクトリで元のファイルを再結合するコマンドで、ディレクトリを引数として渡すことも可能- 内部方式は Shamir Secret Sharing Scheme により暗号鍵を複数の部分に分割し、所定の**しきい値(threshold)**以上の断片があるときに元の鍵を再構成する仕組み
- 鍵生成には Go 標準ライブラリの
crypto/randRead関数を使用し、Shamir の実装は Hashicorp の vault repo の実装をアレンジしたもの - インストールは Homebrew の
brew install jesseduffield/horcrux/horcrux、scoop のscoop bucket add extras; scoop install horcrux、または binary release で可能 - 代替として挙げられている
ssssは鍵には動作するがファイル自体には動作しないと記載されており、他のhorcruxとHaystackは Horcrux のしきい値に対応していない点が異なる
1件のコメント
Hacker News のコメント
注意すべき点は、このツールがファイルの暗号化・復号に AES OFB モードを使っており、暗号文の完全性保証、つまり MAC がないことです
[0]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation...
紙ベースのバックアップツールの中に、Shamir の秘密分散を使って紙のコピーを複数枚友人に配り、あとで光学的に読み取ってファイルを復元できるようにする、すばらしいプロジェクトがある
https://github.com/cyphar/paperback
今は機能自体はすべて動くが、QR コードの内容をコマンドラインにコピー&ペーストする必要があり、ディスク上、いや紙上の形式も固定しなければならない
https://github.com/paritytech/banana_split
最近 Levchin が、Shamir の秘密分散と、それが PayPal で引き起こした混乱について書いた記事があった: https://max.levch.in/post/724289457144070144/shamir-secret-s...
これは自分の最も好きなアルゴリズムの一つだが、正直なところ最近は、自分が学術的な意味でだけ魅力を感じているのか、それとも実際のユースケースは思ったより限られているのか、疑問に思い始めている
暗号学の背景や高度な数学がほとんどなくても理解できるほど単純で、実際には代数を少し知っていれば足りる。それが可能であること自体が驚きで、少なくとも最初は具体的なユースケースもはっきり見え、自分で実装してみることもできる。もちろん、それでも落とし穴はある
だから議論掲示板だけでなく、産業向けソリューションでも過剰に頻繁に登場しているのだと思う
両者の間に因果関係を置いているのかは分からないが、問題はアルゴリズムそのものではなく、そのアルゴリズムにアクセスするためのインターフェースだった
FAQ によると、このツールはShamir の秘密分散方式で暗号化鍵を分割する。しかし実は、Reed-Solomon 方式を使えば暗号化鍵なしでも同じ目的を達成できる
まず入力データを All-or-Nothing Transform(AONT)で処理し、その後 Reed-Solomon の断片に分ければよい。Reed-Solomon は識別攻撃に弱く、入力情報が漏れる可能性が高いため、AONT が必要になる
[1] <https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_cor...>
[2] <https://en.wikipedia.org/wiki/All-or-nothing_transform>
[3] <https://en.wikipedia.org/wiki/Distinguishing_attack>
厳密に言えば、Shamir でも暗号化の段階は必須ではない。ただし秘密そのものを暗号化し、SSS は鍵だけに使うことには利点がある。Horcrux がそう動作するのかは分からないが、自分の似たツールである Paperback はそうしている
[1]: https://github.com/cyphar/paperback
論文: <https://www.usenix.org/legacy/event/fast11/tech/full_papers/...>
「パスワードで暗号化されたファイルを、一部の断片がなくても再構成できるように分割する」方法はいくつか思いつくが、パスワードなしでそれができる点に興味を引かれた
セキュリティの話題やアルゴリズムが好きな立場からすると、かなり面白いものだ。どう実装しているのか知りたくて、ソースコードを掘り、関連手法を読んでみることになりそう。ただ、こういうものがどこで役に立つのかはよく分からない。機密データを保護する「タマネギの皮」の一層として意味のある脅威モデルがあるのか、それとも既に別の方法でよりうまく解決されているユースケースより優れている点があるのか、考えてしまう
作者も、古い日記帳のパスワードと十分な隠し場所を覚えておく問題を冗談めかして比較しているが、個人的には後者のほうがはるかに大きな問題になりそうだ。断片の数を減らし、隠す場所は増やす必要があるだろうが、そうすると提供されるセキュリティは削られる[0]
マルチシグを思い出しはするが、自分が触れたことがあるのは「アップデートを1つ配布するためにUSBキーを挿し、同僚2人と一緒にプログラムを実行しなければならなかった」程度だった。全員がキーを提供する必要があり、「自分が病欠ならアップデートは出せない」状態だったが、それがツールの限界だったのか、当時アルファ版だったのでそう設定していただけなのかは分からない
それでも非常に興味深い
[0] ただし「マットレスの下」は、パスワードを「password」に設定するのと同じくらいのセキュリティレベルだと思う
実際の安全装置は既存の物理的アクセス制御になる。泥棒がデータを得るには3つの場所に侵入しなければならない
データを暗号化してからパスワードを3つの断片に分け、別々の場所に保存することもできるが、その場合はデータとパスワードの両方を保管しなければならない
名前から関連がありそうなものたち。おそらくプロジェクトが1つ以上あるようだ。他に何があるだろう?
Horcrux: Split your file into encrypted fragments - https://news.ycombinator.com/item?id=29395575 - 2021年11月、コメント11件
Show HN: Horcrux, a Playground for Shamir Secret Sharing - https://news.ycombinator.com/item?id=26256726 - 2021年2月、コメント40件
Horcrux Encrypted Messaging - https://news.ycombinator.com/item?id=24322069 - 2020年8月、コメント93件
I made an app that lets you split a file into horcruxes - https://news.ycombinator.com/item?id=24026445 - 2020年8月、コメント80件
You can now make horcruxes out of your confidential files - https://news.ycombinator.com/item?id=21933983 - 2020年1月、コメント17件
Usenetのパリティファイルを思い出す。大きなアーカイブを小さなファイル複数と一定数のパリティファイルに分けて投稿し、例えばn個中n-3個だけあれば元のアーカイブを再生成できた
https://en.wikipedia.org/wiki/Parchive
最近、ClevisもShamirの秘密分散をサポートしていることを知った。実のところ、同じタイプと権限のピンであっても複数設定する唯一の方法だ。いわばSSSのRAID0のようなものだ
https://github.com/latchset/clevis#pin-shamir-secret-sharing
これをすっきりしていると思ってリポジトリを見に行ったら、作った人がlazygit/lazydockerの作者だった。多作ぶりが見ていて気持ちいい
FAQで「これはHarry Potter世界のホークラックスとは違うのでは?」という質問に、「かなり似ている。ホークラックス1つだけで元のファイルを復活させられてはいけないが、2つなら可能にできるので、違いは1つだけ。チェックメイト、Harry Potterファンたち」と答えている
しかしホークラックスの核心は、複数の場所にバックアップを置くことだ。バックアップを複数の場所にバックアップするこのツールのほうが、名前の使い方としてはずっと適切な例だ: https://github.com/chrispoole643/horcrux。チェックメイト、jesseduffield ;)
部分バックアップのほうが、そのアイデアの精神にはより合っている
付け加えると、自分はその概念を乱交性への攻撃として読んだ。「Whore crux」のように。逆にLord of the Ringsは結婚への攻撃と見ることもできる。指輪をはめると見えなくなり、「多すぎるパンに薄く塗られたバター」のように、徐々に何者でもない存在へと消えていくからだ