Skip to content

feat(atuin): E2E 暗号鍵を sops に入れる - #400

Merged
gapul merged 2 commits into
mainfrom
feat/atuin-key-sops
Aug 21, 2026
Merged

feat(atuin): E2E 暗号鍵を sops に入れる#400
gapul merged 2 commits into
mainfrom
feat/atuin-key-sops

Conversation

@gapul

@gapul gapul commented Aug 21, 2026

Copy link
Copy Markdown
Owner

「Bitwarden じゃなくて sops じゃない?」の指摘どおりでした。#399 のコメントで Bitwarden と書いたのは間違いです。

なぜ sops なのか

atuin の鍵は人間が打つものではなく、atuin が決まったパスから読むファイルです。これは sops-nix の担当で、載せておけば新しい端末でも rebuild だけで ~/.local/share/atuin/key に materialise されます。手でコピーする手順が消える。

既に同じ形の前例がありました。

# nix/home/restic-backup.nix
sops.secrets."unified_calendar/ntfy_url".path = "${home}/.config/ntfy/url";

Bitwarden が要るのは atuin のパスワードのほうで、あれは atuin login で人間が打つものです。別物なのを混ぜていました。cli.nix のコメントも直しました。

背景

この鍵は 2025-06-24 作成の76バイトで、ローカルに1部しかありませんでした。失われると api.atuin.sh に同期済みの履歴が復号できなくなります。cli.nix のコメントには前から「Bitwarden に退避しておくこと」と書いてありましたが、実際には退避されていませんでした。

自前サーバーへの移行とは独立に、今の時点で単一障害点だったので、そこも同時に埋まります。

mode について

0400 ではなく 0600 にしてあります。0400 だと atuin login が書き戻そうとして permission denied になるためです。

sops が正なので、login が別の鍵を書いても次の activation で戻ります。鍵を変えるときは secrets/common.yaml を更新するのが正しい手順になります。

検証

値を出さずにハッシュだけで往復を確認しました。

元の鍵     : 9a6d96cf449423d3…
復号した鍵 : 9a6d96cf449423d3…
✅ 一致

sops.secrets."atuin/key"{path: ~/.local/share/atuin/key, mode: 0600} で eval されることも確認済みです。

gapul added 2 commits August 21, 2026 13:48
~/.local/share/atuin/key はどこにもバックアップされていなかった (2025-06-24
作成、76バイト、ローカルに1部だけ)。これが失われると同期済みの履歴を復号できない。

置き場所は Bitwarden ではなく sops。人間が打つものではなく atuin が決まった
パスから読むファイルなので、sops-nix の担当。載せておけば新しい端末でも
rebuild だけで正しい場所に置かれ、手でコピーする手順が消える。既に
unified_calendar/ntfy_url が ~/.config/ntfy/url に対して同じことをしている。

Bitwarden 側に要るのは atuin の**パスワード**のほうで、あれは login のときに
人間が打つもの。混ぜていたので cli.nix のコメントも直した。

mode は 0400 ではなく 0600。0400 だと atuin login が書き戻そうとして失敗する。
sops が正なので、login が別の鍵を書いても次の activation で戻る。

値は出さずにハッシュだけで往復を検証済み (元の鍵と sops から復号した鍵が一致)。
atuin login で使うもの。鍵と違ってファイルとして読まれるわけではないので
path は指定していない。Bitwarden にも入れておくと母艦が壊れているとき手で
打てるが、正は sops。
@gapul
gapul merged commit 45b5231 into main Aug 21, 2026
5 checks passed
@gapul
gapul deleted the feat/atuin-key-sops branch August 21, 2026 04:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant