извлекаем приватный ключ из хэша транзакции

В этой теме можно использовать автоматический гарант!

Статус
Закрыто для дальнейших ответов.

dobush

floppy-диск
Пользователь
Регистрация
17.03.2022
Сообщения
5
Реакции
0
RU -> ENG below



Прочитав достаточно статей на английском и русском языке про извлечение приватного ключа из слабых подписей в сети Биткоин и не найдя что-то подобное на этом форуме,я решил написать практический скрипт для восстановления приватного ключа в сетях ETH, BSC, Polygon и тп.

(тестировал только в этих,но суть атаки одна во всех подобных сетях)



Скрипт сравнивает все пары транзакций от одного адреса и проверяет: есть ли одинаковое r

Восстановление возможно только в том случае если с адреса отправлено как минимум 2 транзакции.

Должен отметить что поиск таких подписей занимает очень мого времени и ресурсов.

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


Скрипт протестирован,работает.

Если вам интересен этот скрипт или у вас дополнительные вопросы по работе скрипта,предложения или идеи,то пишите в ЛС.

Желательно чтобы у вас были познания в установке и запуске Nodejs если захотите протестировать,или же базовые знания как пользоваться windows PowerShell чтобы запустить скрипт на удаленном CPU сервере.


scvr.png





English



After reading many articles in both English and Russian about extracting private keys from weak signatures on the Bitcoin network — and not finding anything similar on this forum — I decided to write a practical script for recovering private keys on networks like ETH, BSC, Polygon, etc.

(I’ve only tested it on these networks, but the essence of the attack is the same across all ECDSA-based blockchains.)



The script compares all pairs of transactions from the same address and checks if they share the same r value.

Recovery is only possible if at least two transactions have been sent from the address.

I should note that searching for such signatures takes a lot of time and resources.

That’s why I wrote a separate script that sends two transactions with a weak signature (same r) to the network — so that I could later extract the necessary data from them.
To connect and call the necessary functions, I used the free version of Infura (though I don’t recommend it — it’s better to buy a paid subscription for faster requests and less downtime, or even better — run your own full node).

The script has been tested and works.

If you’re interested in the script, or if you have any questions, suggestions, or ideas, feel free to message me directly.

It’s preferable that you have some experience with installing and running Node.js, if you want to test it — or at least basic knowledge of Windows PowerShell to launch the script on a remote CPU server.
 
Атака называется "Nonce reuse". Не обязательно, чтобы были транзы от одного адреса, можно взять две транзы с разных адресов и если у них одинаковый Nonce, то узнать приватники обоих. Громкие атаки на этот счет уже были лет 12-13 назад и люди чему-то научились, так что интересно, но, скорее всего, неприменимо в жизни.
 
люди чему-то научились,
разработчики. Не люди. Чтобы вытащить приватник две транзы с одного кошелька (то есть один приваткей) должны иметь один nonce. Вот эту лазейку прикрыли на серьезных блокчейнах и кошельках.
Однако, говорят что (я не утверждаю):
  • одинаковый nonce якобы был присущ даже ledger, а это 2018+ - да, прикрыли, но...
  • есть шансы поймать этот эффект на отдельных новодельных кошельках, возможно в молодых блокчейнах - то есть ловить глюк либо в инкременте nonce +1, либо в синхронизации кошелька с блокчейнами,
  • косяки с синхронизаций могут выплыть у импортированных аккаунтах в кошельках вроде Guarda,
  • подобные уязвимости общеизвестны и якобы все транзации по мере появления в мемпулах мониторятся как раз на "слабость".

То есть, на мой взгляд, основная проблема - ниша с меньшей конкурентностью, а не математика как таковая...
 
разработчики. Не люди.
кек. А разработчики - не люди?)))

По сабжу, из супер свежей инфы, которую я раскапывал сам чуть ли не на днях, в блокчейне TRON это сработает с одним nonce для разных адресов с разными приватниками.

Всё что было с ледгером уже давно перелопатили люди со своими локальными нодами.

Думаю что даже у кого-то такой мониторинг реализован just-in-time, так что больших надежд не питаем, увы :С
 
"Найденному" кошельку 8 дней от роду. И с вероятностью 99% он принадлежит автору темы и схемы развода.
Схема такова:

1. Создается кошелек. Туда закачивается 4 бакса. Пруфлинки:

/bscscan.com/txs?a=0x202068f630f8271041ce4a084ca818cc80390dc8

2. Ряд транзакций для тестирования скрипта. С заявленным функционалом, или другим - не знаю.
3. Программно дублируется nonce - генерируется "слабая" транзакция
4. Скрипт "находит" совпадение
Не удивлюсь, если скрипт написан ИИ - например, Qwen любит втыкать в консольный вывод иконки.
5. создается тема по форумам - "есть скрипт". Для привлечения внимания публикуется в Криптовалютах, а не в коммерческом разделе
6. Цель автора - продать скрипт, как минимум, как максимум- что угодно, если формат exe, поэтому он не собирается участвовать в каких-то обсуждениях и обсуждать по ЛС "идеи".

появляются первые интерессанты (мульты и рили юзеры).
процесс пошел.

snakey
в блокчейне TRON это сработает с одним nonce для разных адресов с разными приватниками.
странно, утверждается что нет (поэтому сеть официально допускает одинаковые nonce)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Так и где сам скрипт? Если это ты так пытаешься его продать, то это не верный раздел.
 
Пустая трата вычислительных ресурсов. Все транзакции которые генерировались с слабым ГСЧ уже давным давно перепробованы и просчитаны. Для работы такой программы нужна полная нода Битка ( весом почти 800гб ) и нормальные познания в криптографии чтобы хотяб понимать как это устроено и сделано. Если софт для продажи - то покупать строго через гаранта. Рациональность покупки на мой взгляд - 0%.
Уже лет пять идут по совсем другому пути. Информации по этой уязвимости валом в инете и нет никакого приватного "прорыва". А подобный скрипт любой ИИ напишет за 15-30 минут.
 
Возражу, исключительно ради справедливости\истины:

Все транзакции которые генерировались с слабым ГСЧ уже давным давно перепробованы и просчитаны.
речь не о слабом генераторе случайных чисел. Упомянутый выше nonce - количество транзакций в эфире, с инкрементом: n=0,1,2....45, 46
если натуральный ряд дает сбой: две транзакции обрели одинаковый n, то тогда можно вычислить приватник.
Нормальные кошельки проверяют Nonce (ну так считается). Откуда могут быть такие кривые транзы? С самописных скриптов, например.

еще раз - в данном случае ГСЧ ни при чем.
Для работы такой программы нужна полная нода Битка
речь об эфире и L2
Уже лет пять идут по совсем другому пути.
Идут разными путями.
А подобный скрипт любой ИИ напишет за 15-30 минут.
От 10-20 сек, до 2-3 мин. За 30 мин ChatGPT напишет сервис с админкой и биллингом. - это, конечно, неважно.

Если я ошибаюсь - пусть ТС хоть что-то прокомментирует =)
 
Не с целью докапаться. Разве nonce не слуайное число? Касаемо битка да, проглядел что там адреса Эфира. Ну и настолько соблюсти тайминг - мое почтение.
 
"Найденному" кошельку 8 дней от роду. И с вероятностью 99% он принадлежит автору темы и схемы развода.
Схема такова:

1. Создается кошелек. Туда закачивается 4 бакса. Пруфлинки:

/bscscan.com/txs?a=0x202068f630f8271041ce4a084ca818cc80390dc8

2. Ряд транзакций для тестирования скрипта. С заявленным функционалом, или другим - не знаю.
3. Программно дублируется nonce - генерируется "слабая" транзакция
4. Скрипт "находит" совпадение
Не удивлюсь, если скрипт написан ИИ - например, Qwen любит втыкать в консольный вывод иконки.
5. создается тема по форумам - "есть скрипт". Для привлечения внимания публикуется в Криптовалютах, а не в коммерческом разделе
6. Цель автора - продать скрипт, как минимум, как максимум- что угодно, если формат exe, поэтому он не собирается участвовать в каких-то обсуждениях и обсуждать по ЛС "идеи".

появляются первые интерессанты (мульты и рили юзеры).
процесс пошел.

snakey

странно, утверждается что нет (поэтому сеть официально допускает одинаковые nonce)

на каком основании вы называете мою тему разводом?
я указал что найти подобные транзакции это долгий процесс, и для прува что мой скрипт работает я сделал отдельный скрипт чтобы выслать слабую транзакцию с повторяющимся значеним 'r' с моего собственного адреса.
скрипт конечно я продам томy кто заинтересуется. никакого EXE файла нет,все написано на чистом JS.

я не понимаю чем мой пост вызвал у вас такую реакцию? что конкретно плохого я сделал? можете разъяснить?
 
Возражу, исключительно ради справедливости\истины:


речь не о слабом генераторе случайных чисел. Упомянутый выше nonce - количество транзакций в эфире, с инкрементом: n=0,1,2....45, 46
если натуральный ряд дает сбой: две транзакции обрели одинаковый n, то тогда можно вычислить приватник.
Нормальные кошельки проверяют Nonce (ну так считается). Откуда могут быть такие кривые транзы? С самописных скриптов, например.

еще раз - в данном случае ГСЧ ни при чем.

речь об эфире и L2

Идут разными путями.

От 10-20 сек, до 2-3 мин. За 30 мин ChatGPT напишет сервис с админкой и биллингом. - это, конечно, неважно.

Если я ошибаюсь - пусть ТС хоть что-то прокомментирует =)
если уж вопрос зашел настолько глубоко,то уязвимость не в повторяющемся nonce как вы пишите "Упомянутый выше nonce - количество транзакций в эфире",а в значении r который генерируется из рандомного значения К.
вот код для нужного значения К

тут его создаем вручную
const FIXED_K = Buffer.from("873de3e77432aac15c88b1c64f318df0760f4305f6de7727294ddcc90a459fa9", "hex");

а тут его пользуем
const key = ec.keyFromPrivate(PRIVATE_KEY, 'hex');
const sig = key.sign(msgHash, {
k: () => new BN(FIXED_K),
canonical: true
});

в итоге получаем значение r, которое и будет одинаковым в двух разных транзакциях и в последствии даст нам возможность раскрыть ключ
const r = sig.r.toArrayLike(Buffer, "be", 32);
const s = sig.s.toArrayLike(Buffer, "be", 32);
const recid = sig.recoveryParam;
const v = unsignedTx.chainId * 2 + 35 + recid;

насчет ИИ даже комментировать не буду. попробуйте без знания программирования попросить ИИ написать вам полноценный скрипт. застрянете на пару недель и в итоге все равно обратитесь за помощю к программисту
 
Так ты сам уже реши, скрипт ты даешь, продаешь, понтуешься или что? Создать топик без какого либо назначения флудом называется. Непонятно твое намерение.
 
продам. цена 1100$. сделка через гаранта
selling 1100 USDT. guarant deal
Пора на форум добавлять четвертую реакцию с клоуном
 
Статус
Закрыто для дальнейших ответов.
Верх