obsidenc — パラノイア級 Rust 暗号ユーティリティ
概要
obsidenc は「paranoid-grade(パラノイア級)」を謳うシンプルな暗号化ユーティリティで、ディレクトリをまず tar アーカイブ(非圧縮)にまとめ、そのバイナリをパスワードベースの鍵導出(Argon2id、READMEは RFC 9106 のガイダンスに準拠すると明示)によって生成した鍵で XChaCha20-Poly1305(AEAD)により暗号化/復号します。設計とパラメータの詳細は ANALYSIS.md にまとめられており、安全性を重視した実装選択(圧縮を避ける、メモリハードなKDFを採用する、AEADの利用など)が見られます。Rust 製であるためメモリ安全性や移植性を期待できます。
リポジトリの統計情報
- スター数: 11
- フォーク数: 0
- ウォッチャー数: 11
- コミット数: 8
- ファイル数: 7
- メインの言語: Rust
主な特徴
- ディレクトリを tar(非圧縮)にまとめてから暗号化するワークフロー。
- パスワード由来鍵の生成に Argon2id を採用(RFC 9106 のガイダンスに基づく)。
- 暗号化は XChaCha20-Poly1305(AEAD)で機密性と整合性を同時に確保。
- 設計・パラメータ検討をまとめた ANALYSIS.md を同梱し設計の透明性を重視。
技術的なポイント
obsidenc の設計は、近年のパスワードベース暗号化に対するベストプラクティスを反映しています。まず KDF に Argon2id を選んでいる点は重要です。Argon2id はメモリ集約的なアルゴリズムであり、GPU/ASIC によるブルートフォース攻撃のコストを上げられるため、パスワード強度に依存するシステムでは有効です。README は RFC 9106 に沿ったパラメータ設計を示唆しており、ANALYSIS.md により具体的なメモリ量や反復回数(time/costパラメータ)等の考察があることから、単に既定値を使うだけでなく運用リスクを考慮していることが窺えます。
暗号本体には XChaCha20-Poly1305 を使っている点も注目すべきです。XChaCha20 は拡張された 24 バイトのノンスを採用することで、ランダムノンスの生成に伴う実装ミスの余地を減らし、複数メッセージを扱う設計での安全性を高めます。Poly1305 によるタグで改ざん検出も行われるため、AEAD による機密性と整合性の同時達成が可能です。
「tar(非圧縮)」を選ぶ判断にはセキュリティ上の理由が考えられます。圧縮を暗号化前に行うと、圧縮オラクル攻撃やサイドチャネルのリスクが生じうるため、意図的に圧縮を避けることでこうした攻撃面を減らしています。一方で非圧縮のため最終的なサイズは大きくなりがちで、ストレージ・転送コストを許容する必要があります。
実装面では Rust を採用していることから、メモリ安全性や容易なクロスコンパイル、豊富な暗号ライブラリ(argon2, chacha20poly1305, aead 等)の利用が期待できます。加えて、ANALYSIS.md に設計意図やパラメータに関する考察があるため、運用者は用途に応じてパラメータ調整や追加機能(ストリーミング処理、大容量ファイルの分割、シーク可能なメタデータ形式、セキュアなメモリゼロ化など)を検討しやすい構成になっています。実装の安全性を高めるために、鍵・パスワード取り扱いやメモリのクリア、依存クレートの監査、バイナリの署名など運用面の検討も推奨されます。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- ANALYSIS.md: file
- Cargo.lock: file
- Cargo.toml: file
- README.md: file
…他 2 ファイル
まとめ
パスワードベース + AEAD を組み合わせた実用的で安全志向の暗号化ツール。設計の透明性も高い。
リポジトリ情報:
- 名前: obsidenc
- 説明: paranoid-grade rust-based encryption utility
- スター数: 11
- 言語: Rust
- URL: https://github.com/markrai/obsidenc
- オーナー: markrai
- アバター: https://avatars.githubusercontent.com/u/28987673?v=4
READMEの抜粋:
obsidenc v0.1.0
Paranoid-grade encryption utility. It tars a directory (no compression) and encrypts/decrypts it with Argon2id (RFC 9106 guidance) + XChaCha20-Poly1305. See ANALYSIS.md for full details.