Безопасность децентрализованных систем
Небольшая дискуссия начатая постом @eee и комментарии @on1x как разработчика одного из клиентов голоса навела на некоторые мысли по поводу безопасности.
Если кратко по поводу текущей ситуации на голосе: все плохо. Спойлер: решение есть и оно немного ниже.
Всё плохо
- Кто угодно может сделать собственного клиента к блокчейну голоса. Найти хороший предлог, чтобы пользователь воспользовался своим главным паролем - не слишком сложная задача, несмотря на любые предупреждения от исходной команды.
- Нисколько не сомневаясь в честности @on1x, я все-таки могу представить себе ситуацию когда у него возникнет повод поменять скрипт и украсть пароли пользователей. Ну например после визита сотрудников ФСБ с ректальным криптоанализатором. Фантастическая ситуация? А, ну тогда спите спокойно, ваши пароли в безопасности
- Ситуация будет ухудшаться с каждым новым клиентом. Чем их больше - тем выше вероятность что кто-то из них скурвится. Из 1000 один, но легче ли от этого инвестору у которого увели кошелёк
- Всем плевать, отдал свой пароль мошенникам - сам виноват. Ибо нефиг было уходить со стандартного клиента.
Есть одна хорошая новость. Она же, как ни странно - отвратительная. Вы помните недавний скандал вокруг смены паролей нескольким растяпам, путем модифицирования кода? Так вот, если вы матерый китяра, то прогнуть разработчиков чтобы они откатили обратно перевод украденных у вас денег - можно.
Почему она хорошая понятно. Отвратительная она потому, что если разработчики готовы прогибаться перед кем бы то ни было, то тропинка протоптана и всем понятно что это принципиально возможно. И в следующий раз прогнуть их будет легче. Тем более ФСБ с ректальным...
А как можно исправить ситуацию, не уповая на сознательность тварей дрожащих обычных пользователей? Это в общем-то не так и сложно.
Как сделать хорошо
- Главный ключ не должен вводиться нигде. Вообще нигде. Ни на одном из клиентов. Он хранится только у пользователя, вплоть до того, что "в холодную" - на отключенном от интернета компе.
- Создается оффлайн-приложение, в котором на основе главного ключа формируются и подписываются важные транзакции (например перевод денег). Поскольку приложение хранится на компе у пользователя - ему не нужно каждый раз убеждаться что никто не внес в код изменений. Можно запускать это приложение в "песочнице" с заблокированным интернетом.
- Ctrl-C, Ctrl-V. Сформированная транзакция вводится на любом из клиентов. Вообще любом - см. п4
- Клиент может только выполнить ее или отказаться - изменить в ней что-то он уже не может, она подписана. И украсть ничего не может - пароля он не знает. Фишинг становится невозможен.
Телемаркет! Могут расцветать все цветы, можно пользоваться хоть 100500 клиентами не парясь о фишинге. И не читать пользователям нотации вида:
Надо взрослеть и привыкать к ответственности за свои действия. В распределённом мире иначе никак.
(с) @eee
Как видите, иначе - очень даже как. Криптография умеет много гитик. А уж такие тривиальные задачки она научилась щелкать задолго до появления блокчейна и даже интернета.