Немного скомкано, записал чтобы не забыть. Должны быть интересны комментарии хабракриптосообщества.
Решил проверить, насколько криптоустойчиа Brainwallet система резервного копирования мультивалютного кошелька Jaxx и что означают секретные слова на уровне кода.
Для начала сделал копию свежеустановленного Google extension кошелька себе в рабочую папку. Подправил файлы для получения возможности редактирования.
В Notepad++ есть замечательные функции для поиска в файлах и плагины для форматирования кода, так что поиски и добавление строчек вида console.warn(«bits=» + bits) помоголо быстро разобраться что происходит при генерации и восстановлении кошелька. Также обнаружен скрытый от пользователя функционал, вероятно позволяющий поднять уровень криптостойкости до параноидального.
Итак, при создании кошелька:
1. Генерируесся 128 псевдослучайных бит с помощью rng:
2. Рассчитывается 4х битная контрольная сумма
3. Суммарный битовый массив разбивается на куски по 12 бит, и конвертируется в Integer. Получаем 12 индексов для кодовой таблицы.
4. Из кодовой таблицы размером 2225 слов собирается строка из слов для бэкапа кошелька.
5. На основании выбора создаются разные кошельки путём применения к 128 битному seed различных хеширующих алгоритмов.
Внутренности thirdparty содержат реализации множества различных алгоритмов, можно перекраивать jaxx под свои нужды.
И массу интересного кода, в котором я продолжаю копаться.
При восстановлении кошелька, найденные в кодовой таблице индексы дополняются не значащим 0 до 12 бит, проверяется контрольная сумма, из полученного seed сразу генерируются ключи и запускается синхронизация с блокчейном.
Для меня весь этот опыт оказался любопытным материалом для углубления знакомства с крипто.
P.S. И да, к чему это я:
Как вы считаете, если нейрокриптоанализ применить к этому алгоритму, получится ли ускорить взлом кошелька, private key которого закодирован детерминистически из массива bits и использован как seed для екскольких кошельков.
Буду рад и признателен примерам кода на python, любопытно измерить скорость подбора ключа на разном железе.
Решил проверить, насколько криптоустойчиа Brainwallet система резервного копирования мультивалютного кошелька Jaxx и что означают секретные слова на уровне кода.
Для начала сделал копию свежеустановленного Google extension кошелька себе в рабочую папку. Подправил файлы для получения возможности редактирования.
В Notepad++ есть замечательные функции для поиска в файлах и плагины для форматирования кода, так что поиски и добавление строчек вида console.warn(«bits=» + bits) помоголо быстро разобраться что происходит при генерации и восстановлении кошелька. Также обнаружен скрытый от пользователя функционал, вероятно позволяющий поднять уровень криптостойкости до параноидального.
Итак, при создании кошелька:
1. Генерируесся 128 псевдослучайных бит с помощью rng:
function generateMnemonic(strength, rng, wordlist) { strength = strength || 128 rng = rng || randomBytes var hex = rng(strength / 8).toString('hex') console.warn('hex=' + hex) return entropyToMnemonic(hex, wordlist) }
2. Рассчитывается 4х битная контрольная сумма
3. Суммарный битовый массив разбивается на куски по 12 бит, и конвертируется в Integer. Получаем 12 индексов для кодовой таблицы.
4. Из кодовой таблицы размером 2225 слов собирается строка из слов для бэкапа кошелька.
5. На основании выбора создаются разные кошельки путём применения к 128 битному seed различных хеширующих алгоритмов.
var jaxx; (function (jaxx) { var Seed = /** @class */ (function () { function Seed() { } Seed.generateMnemonic = function () { return thirdparty.bip39.generateMnemonic(); }; Seed.validateSeed = function (seed) { return (thirdparty.bip39.validateMnemonic(seed)) ? true : false; };
Внутренности thirdparty содержат реализации множества различных алгоритмов, можно перекраивать jaxx под свои нужды.
hash160: hash160, hash256: hash256, ripemd160: ripemd160, sha1: sha1, sha256: sha256
И массу интересного кода, в котором я продолжаю копаться.
При восстановлении кошелька, найденные в кодовой таблице индексы дополняются не значащим 0 до 12 бит, проверяется контрольная сумма, из полученного seed сразу генерируются ключи и запускается синхронизация с блокчейном.
words=boil,matter,crawl,clean,choice,gasp,clay,defy,crew,amount,cushion,pretty
chunks=00011001000,10001001010,00110010101,00101010010,00101000001,01100000001,00101010001,00111001101,00110011010,00001000000,00110110011,10101010001
bits=000110010001000100101000110010101001010100100010100000101100000001001010100010011100110100110011010000010000000011011001110101010001
checksum=0001Для меня весь этот опыт оказался любопытным материалом для углубления знакомства с крипто.
P.S. И да, к чему это я:
Как вы считаете, если нейрокриптоанализ применить к этому алгоритму, получится ли ускорить взлом кошелька, private key которого закодирован детерминистически из массива bits и использован как seed для екскольких кошельков.
Буду рад и признателен примерам кода на python, любопытно измерить скорость подбора ключа на разном железе.
Only registered users can participate in poll. Log in, please.
Писать про крипто алгоритмы еще?
50%продолжай!8
50%ерунда ненужная8
16 users voted. 11 users abstained.