id: Гость   вход   регистрация
текущее время 15:46 27/04/2024
Автор темы: Гость, тема открыта 26/12/2013 18:11 Печать
Категории: криптография, криптоанализ, инфобезопасность, атаки
создать
просмотр
ссылки

Bitcoin protected paper backup


Дано: приватный ключ от адреса bitcoin, base58.
Надо: зашифрованную "бумажную" резервную копию (то есть хранить ключ в читаемом, но не в открытом виде).


Как лучше сделать?


На ум приходит:
1) key xor base58(password) – стойко ли? Еще где-то реализацию base58 найти надо.
2) hex от aes(key, sha2(password)) – сложнее, тоже нужно искать приемлемый софт.


 
На страницу: 1, 2 След.
Комментарии
— unknown (26/12/2013 21:06)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Кошелёк в bitcoin шифруется паролем. Погуглите paper bitcoin wallet, найдёте много интересного. Даже в гуглокартинках посмотрите. Некая часть народа помешалась на печатании их в виде купюр с QR-кодами. Только не доверяйте сторонним сервисам.

Основная идея, как я понял, такая — заводится отдельный кошелёк, куда переводится некая (обычно круглая в BTC) сумма. Он и распечатывается в виде QR-кода.

При желании считывается обратно. Есть и мысленные кошельки — пара «закрытый-открытый» ключ выводится из пароля (главное не забыть его вовремя завещать потомкам).

Проблема со всем этим — штатно в стандартном клиенте такие операции не предусмотрены и надо в нём вызывать консоль, где проделывать массу неочевидных команд, в ходе которых есть шанс расстаться с деньгами по ошибке. Или нужно установить неофициальный навороченный глючный и тормозной клиент типа Armory.
— Гость (26/12/2013 21:42)   <#>
unknown, я спрашивал про защиту того, что распечатывается на бумаге. Мне не нравится, что приватный ключ печатается в открытом виде и в случае умыкания 'paper' (и qr-кодов тоже) сразу дает возможность увести средства.
Armory делает свой собственный, т.н. root ключ, который выступает как некое зерно для генератора адресов, уникального для его (armory) кошелька – один такой ключ дает доступ ко всем адресам, сгенерированным и тем, которые будут сгенерированы в будущем. Он тоже в открытом виде.
Нативный клиент, действительно, через консоль нормально экспортирует ключи, так что зачем armory вообще нужен и чем он так уж защищенней, я не понял.

Вопрос не про биткоин вовсе, а про то, как технически проще зашифровать уже данный ключ парольной фразой и поместить на неэлектронный носитель (вдруг опыт у кого был). Так, что бы это потом можно было вручную перебить и расшифровать обратно. В том то и дело, что начиная искать "aes text encryption implementation", находятся либо какие-то школоподелки, либо проприетарщина, либо онлайн сервисы, которые оффлайн запустить не получится, либо реализации aes, в которых, хоть убейся, не получается воссоздать test vectors, а я не хочу шифровать непонятно чем. Так что простая, казалось бы, задача, растягивается во времени. =)

Сейчас я остановился на aes(key, sha2(password)) и стремительном дописывании маленького консольного интерфейса к openssh, дабы в состоянии это осилить. То есть шифруем key как он есть (в виде строки текста) хэшем парольной фразы, байты в виде 11 EE 22 печатаем на бумажку.
— unknown (26/12/2013 22:19, исправлен 26/12/2013 22:30)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664

Выбирайте, что удобнее:






Если xxd -p, то


Обратно в бинарник через xxd -r. Т.е. распечатываете для наглядности как в примере выше, а набираете в формате xxd -p, убрав все пробелы и выровняв в строку. После того, как сделаете xxd -r, то визуально будет легко сравнить, где ошиблись и поправить перед расшифровкой.


Наконец, codegroup — там вроде даже встроенная коррекция ошибок есть:

— Гость (27/12/2013 13:24)   <#>
Спасибо, не знал, что gpg умеет так делать.
— Гость (11/01/2014 01:19)   <#>
Дело не в gpg, просто задача разделяется на две:
  1. Зашифровать чем-нибудь стандартным (можно чем угодно, хоть openssl'ем).
  2. Вывести результат в baseX-формат (помимо xxd и codegroup ещё есть широко известный hexdump -Cv).
— Гость (11/01/2014 01:23)   <#>

Всё-таки лучше gpg -c --cipher-algo AESgpg -c --cipher-algo rijndael256, а то вдруг он AES-128 берёт, который в КК превратится в AES-64 и, вполне вероятно, может быть сломан перебором.
— sentaus (11/01/2014 01:29, исправлен 24/03/2014 23:41)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32
gpg -c --cipher-algo rijndael256

Надо gpg -c --cipher-algo aes256, rijndael256 там вроде нет и никогда не было.


а то вдруг он AES-128 берёт

Не вдруг, а точно :)

— Гость (11/01/2014 01:30)   <#>

Дайте угадаю: вы активный пользователь хабра или ЛОРа. Кулхацкеры не знают матчасти, но любят кодить. Вместо того, чтобы воспользоваться стандартным инструментом, можно поступить более TRUEшно: написать свою поделку-велосипед. Кстати, прежде чем рожать потуги типа aes(key, sha2(password)), почему бы не узнать хотя бы про KDF, PBKDF2 и scrypt?
— Гость (11/01/2014 01:31)   <#>
Sentaus, правило двух кавычкек знаете? :) При наборе команд с двумя минусами помогает.
— Гость (11/01/2014 01:36)   <#>

Перед тем, как написать, я проверяю то, что пишу:
$ echo "test" | gpg -c --cipher-algo rijndael256
Enter passphrase:
Можете подставить вместо rijndael256 какое-нибудь blablabla, чтобы убедиться, что название имеет значение.
— sentaus (11/01/2014 01:41, исправлен 11/01/2014 01:43)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32
Sentaus, правило двух кавычкек знаете? :) При наборе команд с двумя минусами помогает.

Ага, как раз когда исправлял, появился новый коммент :)
А не, rijndael256 таки есть.

— Гость (11/01/2014 01:49)   <#>
Правда, отличие между aes128 и aes256 имеет смысл только тогда, когда у пассфразы есть хотя бы 128 бит энтропии.


Судя по pgpru-поиску, это древние рекомендации, которые ссылаются на ещё более античные.
— Гость (11/01/2014 11:52)   <#>
Кулхацкеры не знают матчасти, но любят кодить. Вместо того, чтобы воспользоваться стандартным инструментом

Если вы прочитаете более внимательно, то заметите, что его вопрос был о том, какой стандартный инструмент лучше выбрать, а не как что-то накодить. Вполне логично задать его здесь, дабы те, кто знает матчасть, сообщили наилучшее решение.
— unknown (11/01/2014 16:44)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
а то вдруг он AES-128 берёт, который в КК превратится в AES-64 и, вполне вероятно, может быть сломан перебором.

Название топика почитайте.
— Гость (11/01/2014 23:09)   <#>

Ничего не имею против, но человек всё же проговорился:

Сейчас я остановился на aes(key, sha2(password)) и стремительном дописывании маленького консольного интерфейса к openssh, дабы в состоянии это осилить. То есть шифруем key как он есть (в виде строки текста) хэшем парольной фразы, байты в виде 11 EE 22 печатаем на бумажку.

поэтому имело смысл указать на то, что он не только технически, но и концептуально далёк от того, что нужно. Ну, и всё же сначала находят ответы на вопросы, а только потом начинают кодить. Тут же человек всё решил, уже клепает на коленке решение, а потом бац — и засомневался, пошёл спрашивать. Хорошо, что хоть на этой стадии пошёл.


Имеется в виду, что «приватный ключ от адреса bitcoin» протоколом защищён посредством AES-128, поэтому не имеет смысла усиливать шифр?
На страницу: 1, 2 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3