Bitcoin Forum

Local => Новички => Topic started by: nusuth on February 19, 2014, 07:33:26 PM



Title: Шифрование приватного ключа простым гамм
Post by: nusuth on February 19, 2014, 07:33:26 PM
Реквестирую в тред профессиональных криптографов.
Где-то здесь на форуме поднималась уже идея криптования приватного ключа. Но в качестве инструментов предполагалось наличие шайтан-компьютера и использование с помощью оного бинарных методов шифрования нужной информации - отсюда файлы, криптоконтейнеры, и прочая неблагодатная хрень, котору нельзя заюзать с помощью каменнного топора, ручки и листа бумаги.
А если упороться до самого немогу и попытаться зашифровать так, чтобы для восстановления понадобился минимум инструментов - мозг и математика -?
Только мозг - исключается, так как запоминание в стиле brainwallet - то есть, непосредственное помещение в память исходной зубодробительной base-58 последовательности - это вам не вам не песни Киркорова, завязающие в мозгу помимо воли. Предполагается не запоминать исходный текст, а хранить в зашифрованном виде на самом виду у врага - например, в виде татуировки на правой груди, прямо под Маринкой в анфас.
Следовательно - плюс математика. Но математика такая, чтобы ее можно было просчитать, загибая пальцы - и максимум, на руках, не включая пальцы ног.
Я смог догадаться только до шифра гаммированием. Считаем исходный приватный ключ числом в base-58 и посимвольно складываем его с мастер-паролем (также в base-58) по модул 58. Операцию можно произвести буквально с помощью ручки, бумаги, и навыков сложения. С помощью тех же ручки, бумаги и навыков вычитания (и не забыв мастер-пароль)- можно расшифровать ключ. Имеем независимость от шайтан-компьютеров.
Вопрос - насколько криптостоек такой метод?
Я не криптограф. Почитал чайниковые статьи про криптографию - понял так, что идельно криптостойким является шифр с ключом (гаммой) - равным сообщению. Это позволяет нивелировать статистические особенности исходного текста, сделав его похожим на случайную последовательность.
Но истинно случайная гамма с длиной равной сообщению - это накладно и сложно (для бумаги и каменного топора точно уж не подходит), поэтому реальные шифры ее только моделируют.
Реальный потоковый шифр использует псевдослучайную бесконечную гамму, создавая ее с помощью ГСПЧ-алгоритма из начального ключа.
Реальный блочный шифр использут повторяущуюся гамму, но при этом кроме прямой замены использует перестановку внутри блока - и таким образом изменет статистические параметры исходного текста.

Я же предлагаю совсем тупо - никаких перестановок, никаких ГСПЧ-бесконечностей. Тупо повторяющаяся гамма (короче исходного текста), накладываемая на приватный ключ.
Я исхожу из того, что приватный ключ - сам по себе число случайное - следовательно, будучи зашифрованным случайной короткой гаммой - он не подвержен атаке, предполагающей, что исходный текст является осмысленным и, следовательно, имеет некие статистические особенности.
Ы?


Title: Re: Шифрование приватного ключа простым гам&#
Post by: tvv on February 19, 2014, 07:52:15 PM
Да, если

1  ключ близок к случайному
2  из него исключена контрольная информация(там вроде контрольная сумма есть)

то обычная XOR-ка с паролем вполне надежна.
(как вариант - арифметическое сложение по модулю 256, но там надо чтобы не угадали сам пароль)

Vladimir
PS  а не проще ли сам этот пароль использовать в качестве ключа и нигде не записывать?

PPS  к рейдам МВД/ФСБ за майнерами готовитесь? ;)
Это правильно, тока главное глоками не забыть запастись ;))


Title: Re: Шифрование приватного ключа простым гам&#
Post by: nusuth on February 19, 2014, 08:14:34 PM

2  из него исключена контрольная информация(там вроде контрольная сумма есть)


из исходного приватного ключа?

Судя по тому, что нашел в интернетах - приватный ключ это таки случайное число, аргумент эллиптической функции. Судя по этому, там не должно быть производной, зависимой информации. (контрольная сумма и идентификатор сети (пресловутая начальная единица, которая на самом деле ноль) - это особенности адреса Биткойн, aka хеша открытого ключа).
Тем не менее, на небезызвестном correct horse battery staple (http://brainwallet.org/)  и на усе пропало, шеу, усе пропало (http://directory.io/) - все  (вродя) приватные ключи начинаются с пятерки - нигде объяснение этой особенности не нашел. Разе что в исходные кишки протокола смотреть, но я не умею.


Title: Re: Шифрование приватного ключа простым гам&#
Post by: tvv on February 19, 2014, 08:24:09 PM

2  из него исключена контрольная информация(там вроде контрольная сумма есть)


из исходного приватного ключа?

Судя по тому, что нашел в интернетах - приватный ключ это таки случайное число, аргумент эллиптической функции. Судя по этому, там не должно быть производной, зависимой информации.

да


(контрольная сумма и идентификатор сети (пресловутая начальная единица, которая на самом деле ноль) - это особенности адреса Биткойн, aka хеша открытого ключа).

такие постоянные числа должны быть тоже исключены - иначе вычислят как миниум 1 букву приватного ключа,
а запоминающихся фраз не так уже и много...

Vladimir


Title: Re: Шифрование приватного ключа простым гам&#
Post by: nusuth on March 01, 2014, 07:45:57 AM
Работа над ошибками.
То, что я упорно называл здесь "приватным ключом" - на самом деле - WIF, Wallet Import Format, один из форматов представления реального приватного ключа. И он действительно содержит в себе служебную информацию: спереди добавляется идентификатор сети, сзади - контрольное число, производное от хэша ключа. Поскольку служебная информация добавляется к шестнадцатеричному представлению ключа, и лишь затем полученное значение конвертируется в Base58, невозможно точное вычленение служебной информации на уровне отсечения Base58-символов.
С идентификатором сети попроще. В исходном виде это - байт, приписываемый спереди, то есть ооооочень большое круглое шестнадцатричное число. В Base58 приписывание этого байта выглядит, как прибавление к исходному числу (приватный ключ) бОльшего числа с ничем не примечательным (некруглым) набором Base58 цифр. Однако на практике достаточно отсечь первый символ из base58 записи числа- пятерку. Остальные цифры представляют константу. Прибавление константы к случайному числу дает в итоге случайное число. Тут все в порядке. WIF-запись приватного ключа без пятерки - случайное число, можно гаммировать.
С контрольным числом в конце - сложнее. Хотя хэш от случайного числа сам по себе практически случаен и итоговый текст не имеет статистических особенностей, облегчающих его дешифровку - это именно то, чем оно является - контрольная информация. То есть, позволяет легко проверить, правильно ли дешифрован весь текст.
Отсюда мысль - либо использовать гамму, равную по длине всей WIF-записи, либо все-таки шифровать сам исходный ключ. Второе сложно осуествить ручным методом, а в качестве программного метода существует BIP38 - предложенный формат представления в зашифрованном виде.
Буду луркать дальше.