背景
いや、ちょっとこれも恥ずかしい話なんですがね。 僕は長いこと、「自作パスワード管理システム」的なものを運用していました。
どうやっていたかというと、 自前ホストしているRocket.Chat に、自分専用のチャンネルをひっそり立てて、 誰も入れないように鍵をかけて、 そのスレッドに “ログイン情報をラベル付きで投稿する” という、 ある意味 究極のアナログ DX をやっていたわけです。
もちろん一応、安全面は全く考えてなかったわけではなくて、
- Rocket.Chat のデータは gocryptfs で暗号化されたストレージに保存
- 通信経路は https で暗号化
- サーバは自分の管理下
- チャンネルは自分しかアクセスできない
と、一応「最低限の安全性」は確保しているつもりでした。 だけど、世の中ではみんな LastPass だの 1Password だの Bitwarden だのと言っているじゃないですか。 僕はこういう “流行り物” に疎いところがちょっとあって、 「パスワード管理ツールって本当に必要?」 と長年スルーしていたんですよね。 そんなとき、エンジニアの先輩から 「Bitwarden の OSS クローンで Vaultwarden っていうのがあって、自前ホストも簡単で、めっちゃ良いよ」 とすすめられました。
で、触ってみたら、UI も綺麗だし、ストレージ管理もラクだし、 正直「これはかなりイケてるな」と感じたわけです。
しかし、ここから僕の悪い癖が発動します。
“仕組みが分かっていないものに重要な情報を預けるのが嫌”
これは性格なんですが、 ブラックボックスは信用できない。 暗号化の仕組みがわからないと不安になる。
果たして、 自前のサーバ(しかもレンタル)に Vaultwarden を置いて、 そこに人生の全パスワードをぶち込んで大丈夫なのか? という疑念がどうしても消えない。
結論から言うと: Vaultwarden(Bitwarden)は、むしろ「Rocket.Chatにパスワードを書いてた頃の比じゃないほど安全」だった。
調べれば調べるほど「これは信頼できる暗号設計だな」と感じたので、 今回はその 安全性の仕組み をブログとしてまとめたいと思う。
安全性の評価
Bitwarden / Vaultwarden が扱う暗号モデルは、 いわゆる ゼロ知識暗号(Zero-Knowledge Encryption) である。
つまり:
- サーバはユーザーのパスワードを一切知らない
- サーバは復号に必要な鍵も持っていない
- 復号はすべてクライアント側で行う
その結果、サーバに保存されているのは 暗号化されたゴミの山 だけ。
サーバには暗号化されたものしか送られないので、 たとえ僕の Vaultwarden サーバが、 乗っ取られても、データが盗まれても、ハッキングされても 攻撃者は「マスターパスワード」が分からない限り絶対に復号できない。
じゃあマスターパスワードはどう管理してるの?
これが面白くて、
- マスターパスワードの “ログイン判定用ハッシュ値” はサーバに保存される
- けど、これは復号鍵とは関係ない
- 復号鍵(MasterKey)はクライアント側で Argon2 から毎回作る
- サーバに鍵は送られない
- 暗号化処理も復号処理も全部クライアント側で完結
という 二重構造になっている。
結果として: サーバが知っているのは「暗号化されたデータ」と「ログイン判定用のハッシュ値」だけ 復号に必要な鍵は一切サーバに存在しない という強力な仕組みが成立しているわけ。
Rocket.Chat の頃と比べると、 「セキュリティの構造が根本的に違う」ことに気づいて震えた。
懸念点
もちろん弱点がないわけではない。
ただ1つ、Vaultwarden の最大の弱点は:ストレージが壊れたら終わり
Bitwarden は暗号化データと鍵の保存をすべてサーバ側に依存しているので、 サーバの /data ディレクトリが消える=復元不可 となる。 つまり:
- ストレージ障害
- ディスク破損
- rm -rf 誤爆
- コンテナ破損
- VPS 消滅(あるある)
こういうのが発生すると、 マスターパスワードを知っていても データは戻ってこない。 だから俺みたいに 「サーバを DIY で運用している人間」ほど、 必ず冗長化・バックアップを考える必要がある。
これを甘く見ると、本当に全データが消える。
まとめ
まとめ文章(最後に入れると締まる)
Vaultwarden は OSS でありながら、 商用パスワード管理アプリと同等、 もしくはそれ以上に強固な暗号モデルを備えている。
Rocket.Chat にパスワードを書いていた頃と比べると、 安全性は天と地ほど違った。
そして唯一の弱点である 「ストレージ障害が即詰み」 という部分も、冗長化を組めば十分対策できる。
安心して自前ホストできるパスワード管理ツールとして、 Vaultwarden はかなり優秀だった。