Pages:
Author

Topic: 2 ^ 256 закрытых ключей - page 2. (Read 753 times)

legendary
Activity: 2310
Merit: 2295
December 10, 2019, 10:03:55 AM
#10
Ок, я понимаю, что 20-байтный хеш в P2PKH и P2WPKH одинаковый, можно ли после преобразования в удобный формат считать их одним адресом хотя бы в контексте расчетов в первом посте? Я думаю, что нет. Ведь при кодировании в base58check еще два SHA256 считать приходится, так что конвертация из bech32 в base58check проходит лишь в два раза быстрее, чем полная генерация P2PKH-адреса из ключа (про скорость кодирования в bech32 не знаю, чек-сумма как-то хитро там считается и, кажется, без хешей).

Когда я захотел просканировать пространство приватных ключей в диапазоне:
от 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001
до 00000000 00000000 00000000 00000000 00000000 00000000 00000000 FFFFFFFF
на наличие транзакций, содержащих адреса, соответствующие этим приватным ключам, я сделал это так:

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

Далее просканировал все выходы транзакций блокчейна и выцарапал из них хеши публичных ключей в виде, опять же, 20-байтных последовательностей, записав их в два файла: один - для P2PKH-выходов, второй - для P2WPKH-выходов.

Ну, и наконец, проверил наличие хешей из двух последних файлов в первом файле. Заметьте, мне ни разу не понадобились преобразования в base58check и bech32. Для каких задач, по-вашему, нужны эти преобразования?
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
December 10, 2019, 09:27:56 AM
#9
[...]
Ок, я понимаю, что 20-байтный хеш в P2PKH и P2WPKH одинаковый, можно ли после преобразования в удобный формат считать их одним адресом хотя бы в контексте расчетов в первом посте? Я думаю, что нет. Ведь при кодировании в base58check еще два SHA256 считать приходится, так что конвертация из bech32 в base58check проходит лишь в два раза быстрее, чем полная генерация P2PKH-адреса из ключа (про скорость кодирования в bech32 не знаю, чек-сумма как-то хитро там считается и, кажется, без хешей).
legendary
Activity: 3108
Merit: 1358
December 10, 2019, 07:37:12 AM
#8
Но это же разные адреса? А то получается, что как-будто 3 адреса из одного публичного ключа  - это один и тот же адрес, но тогда они могли бы конвертироваться друг в друга (как, скажем, в лайткоине адреса на 3 и M).
Они и могут. Лайткойн плохой пример, это копипастный шиткойн, который не принёс и никогда не принесёт ничего нового.

Да, но я говорил про количество всех возможных биткоин-адресов (не обязательно полученных из ключа). P2WSH-адрес тоже является биткоин-адресом, не так ли?
Да, но функционально не эквивалентен и потому этот вариант не имеет смысла учитывать наравне с остальными
legendary
Activity: 2310
Merit: 2295
December 10, 2019, 05:51:35 AM
#7
Но это же разные адреса? А то получается, что как-будто 3 адреса из одного публичного ключа  - это один и тот же адрес, но тогда они могли бы конвертироваться друг в друга (как, скажем, в лайткоине адреса на 3 и M).

По крайней мере, адрес P2PKH (1...) и P2PWKH (bc1...) - это один и тот же хеш публичного ключа RIPEMD160(SHA256(pubKey)), только первый преобразуется в base58check, а второй - в bech32, исключительно для человекочитаемого отображения. Внутри выхода транзакции этот хеш в виде 20-байтной последовательности будет выглядеть одинаково и для P2PKH-выхода, и для P2WPKH-выхода.

Совместимые SegWit-адреса (P2PWKH-P2SH) создаются следующим образом:
1. Берётся хеш приватного ключа RIPEMD160(SHA256(pubKey))
2. К нему спереди добавляются два байта 0014(HEX)
3. Над полученной последовательностью из 22 байт снова выполняется операция хеширования RIPEMD160(SHA256(0014))
4. Результат хеширования представляется в кодировке base58check c версией 05.

Таким образом, получается, что из legacy-адреса можно получить bech32-адрес, и наоборот.
Из legacy-адреса или bech32-адреса можно получить P2PWKH-P2SH-адрес, а наоборот не получится.
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
December 10, 2019, 03:00:14 AM
#6
Значение HASH160 для всех типов адресов (legacy, P2WPKH-in-p2sh, bc1-P2WPKH) вычисляется одинаково, поэтому формат адреса не имеет никакого значения. Это просто разные способы записи одного и того же хэша в "человекопонятном" виде, и не более того.
Но это же разные адреса? А то получается, что как-будто 3 адреса из одного публичного ключа  - это один и тот же адрес, но тогда они могли бы конвертироваться друг в друга (как, скажем, в лайткоине адреса на 3 и M).
Quote
Дело в том, что публичный ключ может быть записан в двух формах - сжатой и несжатой.
Точно! Про несжатые P2PKH вылетело из головы.
Quote
Итого, на 2^160 закрытых ключей получается:
Почему на 2^160? На 2^256, в среднем 2^96 закрытых ключа будут давать одинаковый адрес.
Quote
P2WSH адреса совсем другая степь, для них никакого соответствия не будет. Равно как и для обычных P2SH адресов, не сегвитных.
Да, но я говорил про количество всех возможных биткоин-адресов (не обязательно полученных из ключа). P2WSH-адрес тоже является биткоин-адресом, не так ли?
legendary
Activity: 3108
Merit: 1358
December 09, 2019, 07:21:23 PM
#5
Закрытых ключей меньше 2^256 штук. Если точнее, то твердолобая реализация конечно же может использовать можно любое число на отрезке [0, 2^256 - 1], но безопасными в качестве ключей являются только числа меньше 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141. Потому что бОльшие значения могут иметь соответствие более чем одному публичному ключу. Поэтому, практически все библиотеки при загрузке ключа первым делом проверяют, чтобы загруженное значение было меньше 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141.

Количество адресов биткойнов: 2160
Побольше, по-моему:
2160 адресов на "1" (P2PKH)
2160 адресов на "3" (P2SH)
2160 адресов на "bc1" (42 символа) (P2WPKH)
2256 адресов на "bc1" (62 символа) (P2WSH)
Значение HASH160 для всех типов адресов (legacy, P2WPKH-in-p2sh, bc1-P2WPKH) вычисляется одинаково, поэтому формат адреса не имеет никакого значения. Это просто разные способы записи одного и того же хэша в "человекопонятном" виде, и не более того.

Но адресов действительно больше, хотя и не поэтому. Дело в том, что публичный ключ может быть записан в двух формах - сжатой и несжатой. По этой причине для легаси адресов, тех что начинаются с 1, каждому приватному ключу гарантированно соответствует по крайней мере два возможных адреса. Для сегвит адресов (как нативных bc1, так и P2SH) есть обязательное требование использовать именно сжатый ключ, поэтому такой неопределенности уже нет.

Итого, на 2^160 закрытых ключей получается:

2161 адресов на "1" (P2PKH)
2160 адресов на "3" (P2WPKH-in-P2SH)
2160 адресов на "bc1" (42 символа) (P2WPKH)

Где 2160 легаси адресов будет использовать тот же самый хэш, что и сгенерированные из того же приватного ключа P2WPKH-in-P2SH и P2WPKH адреса, а для оставшихся 2160 легаси адресов не будет соответствия среди новых.

P2WSH адреса совсем другая степь, для них никакого соответствия не будет. Равно как и для обычных P2SH адресов, не сегвитных.
legendary
Activity: 1820
Merit: 1972
Crypto Swap Exchange
December 09, 2019, 06:25:25 PM
#4
Количество адресов биткойнов: 2160
Побольше, по-моему:
2160 адресов на "1" (P2PKH)
2160 адресов на "3" (P2SH)
2160 адресов на "bc1" (42 символа) (P2WPKH)
2256 адресов на "bc1" (62 символа) (P2WSH)
legendary
Activity: 1736
Merit: 4269
December 09, 2019, 10:14:41 AM
#3
любителям прочитать про приватные ключи возможно заинтересует также этот пост

Визуальный генератор приватных ключей
https://bitcointalksearch.org/topic/--5188860
legendary
Activity: 2114
Merit: 15144
Fully fledged Merit Cycler - Golden Feather 22-23
December 09, 2019, 08:26:31 AM
#2
это была хорошая статья для написания, еще веселее было читать перевод на русском форуме.
Спасибо за приятные слова.
legendary
Activity: 1736
Merit: 4269
December 09, 2019, 07:28:06 AM
#1
Это перевод, оригинал статьи принадлежит fillippone. Спасибо за полезную информацию!

2256 закрытых ключей: насколько велико это число?

Вчера, просматривая bitcoinrabbithole.org, я наткнулся на печально известный веб-сайт https://keys.lol

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

Вот Это Да!
Если вы обнаружите положительный баланс на этих страницах,то вы фактически являетесь владельцем закрытых ключей, поэтому у вас есть доступ к средствам, и ничто не мешает вам перевести их на свой собственный кошелек.

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

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

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

В ожидании решения от @babo, я подумал про себя: «Fillippone - единственная пешка в игре жизни"...почему никто никогда не думал об этом?

Вернувшись на bitcoinrabbithole.org, я быстро обнаружил Большой биткойн коллайдер.

https://lbc.cryptoguru.org/abow

Круто, это серьезный проект.
В основном тысячи распределенных серверов ежедневно генерируют и проверяют 26 триллионов (!!!) закрытых ключей.
За первые три года им удалось найти 7 закрытых ключей. Это много! Я предположил, что шансы были намного ниже, но, вероятно, в каком-то кошельке есть какая-то ошибка, использующая неоптимальный генератор случайных чисел для создания ключей. (Здесь необходимы дальнейшие исследования!)


Давайте быстро рассмотрим несколько цифр:
Количество закрытых ключей, теоретически возможно: 2256 или примерно 1077
Количество адресов биткойнов: 2160
Количество закрытых ключей, которые ищет биткойн-коллайдер: 2160
Количество атомов во вселенной: от 1078 до 1082
Количество использованных адресов Биткойн : 18 000 000

Количество закрытых ключей, которое В действительности возможно, немного меньше, чем 2256, как указано здесь

Давайте рассмотрим несколько примеров.
Предположим, у нас есть миллиард активных адресов, каждый с положительным балансом: мы знаем, что это примерно на 103 больше, чем фактическое число.
Вероятно, число атомов во вселенной в 103 раза больше, чем количество адресов, поэтому справедливо сказать, что найти закрытый ключ с положительным количеством примерно так же вероятно, как найти один из этих атомов, разбросанных по всей  видимой вселенной.
Насколько велики миллиарды атомов? Согласно этому ответу Quora, он меньше, чем бактерия E. Coli. Так что догадайтесь взять эту бактерию, измельчить на атомном уровне, распределить ее по вселенной и попытаться найти один из этих атомов. Довольно сложно, не так ли?

Второй пример из этой статьи.  Предположим, мы хотим сканировать все закрытые ключи в поисках положительного баланса и предположим, что каждый житель Земли имеет скорость сканирования в миллиард раз выше, чем двойная текущая вычислительная мощность сети Биткойн, таким образом:
* 10 миллиардов человек;
* умноженный на один миллиард;
* умноженнаяна 2  вычислительная мощность биткойна, около 100 тысяч терахеш в секунду;
получаем: 1 000 000 000 000 * 1 000 000 000 * 100 000 * 100 0000 000 000 = 1010 * 109 * 105 * 1012 = 1036
Для простоты мы округлили '115,792,089,237,316,195,423,570,985,008,687,907,852,837,564,279,074,904,382,605,163,141,518,161,494,336' до 1077,и мы получили, что, если мы проверим каждый отдельный закрытый ключ в поисках положительного баланса, это займет  1077/1036 = сколько лет это будет?
Поскольку в году около 31557600 секунд, это соответствует примерно 1041/31557600 = 3133 годам, что более или менее в 1023 раза превышает предполагаемый возраст Вселенной (в настоящее время оценивается в 13,82 миллиарда лет), короче говоря
100,000,000,000,000,000,000, то есть примерно в 100 миллиардов миллиардов раз больше возраста Вселенной.

Это видео о том, насколько безопасен алгоритм SHA 256.
 https://youtu.be/S9JGmA5_unY

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




Reddit

Другие примеры того, сколько потребуется, чтобы случайным образом угадать закрытый ключ:
Reddit: время и энергия, необходимые для грубого шифрования AES-256


Дальнейшие ссылки:

Тема Bitcointalk о возможном количестве адресов биткойнов
Освоение Биткоина: Ключи, Адреса

Другие очень большие цифры:

52!: Начинается с простой колоды игральных карт

Вот лишь несколько примеров, если у вас есть дополнительные ресурсы или комментарии, не стесняйтесь размещать свои ниже, и я добавлю в список!


_______________________________________________________________________________ ___________________
От меня.  Легендарная статья
Кто найдет кошелек с баллансом на сайте https://keys.lol/  обязательно напишите Grin

Даже есть люди, которые годами вычисляют https://lbc.cryptoguru.org/stats    Grin

Pages:
Jump to: