dotMage 1.4.0 — ротация ключа, для всех
С первого дня в threat model dotMage жила честная сноска: «если Account Key утёк, вся
историческая переписка скомпрометирована — ротация AK потребовала бы перешифровки всех
блобов». Сегодня сноски больше нет. dmage rotate-key перешифровывает всё — и потеря
ноутбука больше не означает, что история ваших секретов читаема навсегда.
Как это работает
$ dmage rotate-key
Master password: ********
re-encrypted 51/51 revisions
✓ Key rotated to generation 2 (51 revision(s) re-encrypted).
Сервер не видит ваших ключей и потому не может ничего перешифровать — обход делает CLI:
скачать ревизию, расшифровать старым ключом, зашифровать новым, загрузить. Каждый блоб
несёт номер поколения ключа, что делает процесс возобновляемым по построению: убейте
его на 20-й ревизии из 51 (мы так и сделали — kill -9, в рамках релизных тестов),
запустите снова — он дожмёт оставшиеся. Восстановление бэкапа, снятого посреди ротации,
тоже даёт возобновляемое состояние — это специфицированное поведение, а не везение.
Пока идёт ротация, push вежливо отклоняется, чтение работает. Устройства, пропустившие
ротацию, получают понятную ошибку и лечение одной командой: dmage auth.
Что это значит для ваших процессов
- Украденное/списанное устройство с кэшем ключа не прочитает ничего запушенного после ротации.
- CI-токены содержат ключ — перегенерируйте их после ротации (CLI напомнит).
- Бэкапы, снятые до ротации, по-прежнему расшифровываются старым ключом. Ротация не дотягивается в прошлое: если ротируете из-за компрометации — уничтожьте или перешифруйте доротационные бэкапы. В доке это теперь прописано.
Чейнджлог
Добавлено
dmage rotate-key— клиентская возобновляемая перешифровка всех ревизий с поколениями ключа на каждом блобе. Требует обновлённый dotmage-server (фичаrotation).
Безопасность
- Закрыт документированный пробел v1 «утёкший Account Key расшифровывает всю историю навсегда».
Скачать
Бинарники и SHA256SUMS: github.com/dotMage/dotmage/releases/tag/v1.4.0
dmage upgrade # самообновление
brew upgrade dotmage # Homebrew