Реальная история.
Я читаю через оба этих кодовые базы в первый раз. То, что я написал здесь, просто мой взгляд на то, что происходит.
Используют ли bitaddress.org тот же метод, чтобы создать кошелек мозга как электрумОни не используют один и тот же метод для создания закрытых ключей от семени.
bitaddress.org -
https://github.com/pointbiz/bitaddress.org/blob/master/bitaddress.org.html#L3724Электрум -
https://github.com/spesmilo/electrum/blob/master/lib/wallet.py#L272С bitaddress.org, семя, которое вы вводите пробежать SHA256 для генерации секретного ключа.
вар байт = Crypto.SHA256 (ключ, {asBytes: истинный});
вар btcKey = новый Bitcoin.ECKey (байт);
В отличие от этого, Электрум использует генератор случайных чисел, чтобы выбрать семена для вас.
семя = "% 032x"% Ecdsa.util.randrange (POW (2128))
Семя затем проходит через 100000 циклов SHA256 сцепленных с собой для создания закрытого ключа.
Олдсид = семян
для г в диапазоне (100000):
семена = hashlib.sha256 (семена + Олдсид) .digest ()
Кто-нибудь знает, как электрум делает это?Электрум генерирует несколько адресов из одного семени путем конкатенации предыдущего закрытого ключа с двойным SHA256 хэшем порядкового номера адреса генерируется.
secexp = (secexp + self.get_sequence (п, for_change))% заказ
Защиту get_sequence (я, п, for_change):
вернуться string_to_number (Hash ( "% D:% d:"% (П, for_change) + self.master_public_key))
Защиту Hash (данные):
вернуть hashlib.sha256 (hashlib.sha256 (данные) .digest ()). переваривать ()
- secexp является секретом показатель, то есть секретный ключ
- п порядковый номер адреса (1, 2, 3 и т.д.) генерируется
- for_change это значение 1 или 0, что указывает, является ли или нет это адрес изменения
- заказ число дискретных точек на эллиптической кривой, и моддинг сохраняет закрытый ключ в диапазоне
- Насколько я могу сказать из кода, self.master_public_key всегда будет пустая строка
Кто-нибудь видит проблемы с приведенной выше схемой?Я не специалист по криптографии, так что я ничего не могу сказать окончательно. Учитывая, что bitaddress.org использует только один SHA256 проход для шифрования парольной фразы, я бы сказал, есть хороший шанс, что это плохая идея просто добавить номер к семени.
Вы можете сделать что-то вроде того, что Электрум делает - сцепить закрытый ключ предыдущего адреса с хэш на основе номера последовательности (например, SHA256 строка «2» для второго адреса) и мод результат по максимальному значению для закрытый ключ.