Предлагаю обсудить простой способ шифрования своими силами, что называется на коленке. Вопрос безопасного хранения приватных ключей обсуждается на форуме постоянно. Предлагается много разных вариантов чаще всего это флешка и бумага.
Что будет если они попадут в чужие руки? К вам домой зашли знакомые, родственники, сантехник, полиция с обыском и т.д. Флешку можно зашифровать разными программами, но не каждому человеку такой вариант подходит по разным причинам. Судя по форуму большинство людей не доверяет программам даже с открытым исходным кодом.
С бумажным вариантом еще сложнее. Я видел предложения каким-либо образом модифицировать ключ, например заменить один символ другим или поменять их местами. Проблема в том, что выполнять эти манипуляции вручную довольно не удобно и велика вероятность ошибиться при вводе такого количества символов.
Тогда я подумал, может это можно как-нибудь автоматизировать и вспомнил про JavaScript. Идея состоит в том, что создается простой HTML файл с JavaScript кодом который хранится на компьютере и в пару кликом мышью позволяет преобразовывать приватный ключ в соответствии с заданным алгоритмом. Тогда можно не просто изменить один символ, а "перетрясти" ключ до неузнаваемости и все это за несколько секунд. Все преобразования происходят внутри вашего браузера и никакие данные никуда не отправляются, вы можете даже отключить интернет в этот момент.
Преимущества:- Нет необходимости доверять чужому программному обеспечению, вы точно знаете, что ваши пароли никуда не отсылаются
- Зашифровка и расшифровка выполняется легко и быстро
- Невозможно ошибиться как при ручном вводе
- Каждый может сам придумать свой алгоритм в соответствие со степенью паранойи. Даже если вы совсем не знаете JavaScript потратив немного времени или попросив помощи у других людей вы сможете это сделать.
- Чувство гордости, что вы что сделали сами.
- Не нужно запоминать и хранить пароль как при классическом шифровании, достаточно помнить алгоритм конвертации
- Утрата файла с алгоритмом не ведет к катастрофе, если вы помните использованный алгоритм. Его всегда можно создать заново или расшифровать используя только ручку и бумагу.
- Укравший ваш приватный ключ увидит пустой кошелек и не факт, что догадается, что вы зашифровали свой ключ
- Скрытность. В отличие от программ шифрования, наш файл спрятанный на компьютере очень трудно обнаружить, особенно если не знать о его существовании. Его можно назвать index.html и спрятать где-нибудь в недрах компьютера в папке какой-нибудь программы или служебных папках операционной системы, где он будет выглядеть как служебный файл. Можно пойти еще дальше и изменить расширение файла с .html на любое другое например .dat сделав его еще более неприметным и он все равно будет работать, только придется указать, что открыть его надо именно в браузере. Впрочем никто не запрещает хранить его на съемном носителе, но только обязательно отдельно от приватного ключа.
Недостатки:- Нарушен принцип открытости системы, секретом является сам алгоритм, а пароль совсем отсутствует. Думаю в нашем случае это не критично. Хотя при желании можно дополнить систему и классическим паролем.
- Любой человек получивший доступ к вашему файлу сможет расшифровать ваши ключи. Хотя тоже можно сказать про пароль, но файл думаю обнаружить даже сложнее.
- Придется потратить время на создание файла или просить других людей сделать его.
- Перемешивание символов не спасет от простого перебора всех комбинаций. Другое дело, что учитывая длину приватных ключей это не получится сделать за приемлемый период времени.
- Хакер может не брутфорсить в лоб, а попытаться угадать использованный вами алгоритм шифрования, поэтому необходимо проявить фантазию и придумать что-нибудь менее тривиальное чем отзеркаливание текста. Хватит ли знаний и упорства у среднестатистического хакера укравшего ваши ключи взломать их большой вопрос, ведь зачастую он даже не будет знать сколько криптовалюты на этом кошельке.
Я подготовил несколько очень простых вариантов, чтобы любой мог попробовать этот способ на практике.1) Отзеркаливает текст: 123456789 - 987654321
2) Меняет местами соседние символы 1 со 2, 3 с 4, 5 с 6 и так далее: 123456789 - 214365879
3) Делит текст на N частей и отзеркаливает их, например 3 части: 123456789 - 789456123
4) Меняет местами 3 и 6 символы: 123456789 - 126453789
5) Добавляет в 3 и 6 позицию случайные числа от 0 до 9: 123456789 - 12634576789
6) Способы можно комбинировать между собой, все зависит только от вашей фантазии и уровня знаний. В качестве примера: делит текст на части по 3 символа, меняет порядок символов и добавляет 4 случайное число: 123456789 - 321965419879
Архив с готовыми файлами этих примеров можно скачать здесь.❕ | | Приведенные примеры сделаны с целью демонстрации, вы можете придумать свой алгоритм Код примеров возможно не оптимален, я знаю JavaScript очень поверхностно. Использованный алгоритм выбора случайного числа не всегда работает хорошо, порой генерируя однотипные значения. Приведенные примеры не являются криптографически стойкими. Это хорошо видно на осмысленном тексте, например "ентзидпре". Можно без всяких программ догадаться, что здесь зашифровано слово "президент". Для случайных комбинаций какими являются пароли и приватные ключи, так уже не получится, только перебирать все варианты.
|
Так же при желании можно реализовать различные модификации шифра Цезаря, хэширование и фактически все что угодно. Хотя шифр Цезаря давно не стойкий мы имеем дело не с текстом, а со случайным набором символов и значит частотный анализ для его расшифровки не поможет.
Интересно ваше мнение о данном способе дополнительной защиты приватной информации. Особенно людей разбирающихся в криптографии.