Бэкап последней надежды

Я как-то задумался о том что делать в ситуации, если я потеряю все свои устройства. Вероятность такого для всех нас не нулевая и хотелось бы спокойно продумать план действий на этот случай, чтобы потом не кричать "всё пропало".

Идеальным вариантом было бы помнить один пароль и, используя его, восстановить все свои данные и доступы из любой точки мира с интернетом. Я придумал одно из решений и мне оно даже кажется довольно элегантным :)

Я делаю бэкапы всех своих данных, которые не хотелось бы потерять. Один раз в неделю на внешний HDD, а другой бэкап идёт непрерывно через Syncthing на мой сервер. В нашем сценарии HDD будет утерян, а для доступа к данным на сервере нужно иметь доступ к хостинг провайдеру или SSH. Это уже не один пароль.

В качестве менеджера паролей я использую Bitwarden вместе с 2FA, а для 2FA у меня Aegis. Последний может делать зашифрованные бэкапы на диск, эти файлы у меня также сохраняются на сервере. В Bitwarden при этом есть возможность один раз обойти 2FA, через код восстановления, который представляет собой набор из 32-х букв и цифр.

Ок, я знаю мастер-пароль от Bitwarden, но для доступа мне нужен также Aegis или код восстановления. Первый способ опять отпадает, а вот код восстановления мне запомнить сложно, тем более если не пользоваться регулярно.

И вот тут можно вспомнить о неизменяемом, децентрализованном и устойчивым к цензуре "вечном" хранилище — блокчейне :) Если записать данные в тот же Ethereum, то они будут храниться на миллионах компьютерах (нодах) по всему миру, тебе нужен только доступ в интернет.

Так почему бы не записать туда мой код восстановления от Bitwarden? Или любые другие данные. Это можно сделать, так как транзакции в EVM блокчейнах поддерживают передачу произвольных данных (calldata). Их можно передать в том числе в обычной транзакции перевода средств, а перевод можно сделать даже самому себе, и, если транзакция прошла успешно, то данные намертво запишутся в блокчейн. Данных у меня совсем немного и стоимость такой транзакции будет небольшой даже на Ethereum, и совсем небольшой на таких сетях как Polygon или Base.

Конечно свой код восстановления (или любые другие данные) я в начале шифрую, лучше несколькими методами, и чтобы один из них был устойчив против квантовых компьютеров (посылка в будущее).

Чтобы потом найти эту транзакцию, необходимы какие-то маркеры. Например можно отправить её Виталику на vitalik.eth в день своего рождения :), или записать в сумму перевода какое-то памятное число (опять день рождения!).

И что получается в итоге. Произошла катастрофа и я потерял все свои девайсы. Я вспоминаю, что отправлял Виталику свой зашифрованный код восстановления от Bitwarden. Нахожу эту транзакцию, процедура шифрования мне известна, пароль я помню, а значит, после некоторых манипуляций, получаю назад свой код. Дальше я иду в Bitwarden, ввожу свой мастер-пароль (который может быть точно такой же!), ввожу свой код и — вуаля — получаю доступы ко всему остальному.

При этой схеме, если кто-то узнает мой мастер-пароль от Bitwarden, то не сможет войти туда без кода восстановления. А если кто-то, каким-то чудом получит мой код восстановления из блокчейна, то тоже не сможет войти, не зная мастер-пароля. Если пароли одинаковы, то взломщик должен: a) узнать каким-то чудом, что я сохранил код восстановления в блокчейне b) найти эту транзакцию c) узнать методы и последовательность шифрования. Каждый из этих барьеров значительно усложняет атаку.

Мне это кажется довольно интересной и элегантной идеей, где блокчейн используется по своему прямому назначению. Конечно нужные данные можно запомнить, если их немного (или у тебя отличная память). Или часто их советуют хранить только на физическом носителе, по типу бумажки в банковской ячейке, но тогда ты привязан к местонахождению этого носителя, теряя мобильность.

Реализацию такой штуки я пока не искал, но скорее всего сделаю сам и обновлю статью.