Поиск закрытoго ключа любого счета Etherum

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

▶ Как работает ключ?

Что такое закрытый ключ Etherum?

Шаг 1: Проще говоря, это случайное число от 0 до 2²⁵⁶ (на самом деле это немного меньше, чем 2²⁵⁶, но это не имеет значения.) и не более того.

так:

  • 1 — закрытый ключ Etherum
  • 2 — закрытый ключ Ethereum
  • и то же самое для 3,4,10,10000,99999,1011091910190…

Чтобы убедиться в этом, можете попробовать импортировать: 0000000000000000000000000000000000000000000000000000000000000001 на metamask. (Формат должен быть шестнадцатеричным числом, закодированным 64 шестнадцатеричными числами.)

Шаг 2. С помощью этого закрытого ключа определяется открытый ключ. (с помощью умножения эллиптических кривых)

Шаг 3. Хэш получается из открытого ключа, 40 первых шестнадцатеричных цифр — это публичный адрес.

Например, публичный адрес 0000….001 (импортированный закрытый ключ) — 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf.

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

▶ Слишком простой закрытый ключ…

Как было сказано ранее, вы можете легко выбрать свой закрытый ключ, это всего лишь случайное число. Вам просто нужно нажать кнопку импорта на метамаске.

Хорошо, мне нравится число 7, поэтому я выберу 00000 ….000007 в качестве закрытого ключа. В результате мне не нужно будет запоминать свои 12 слов. Какая гениальная идея!!

Но вы не единственный, у кого такая же идея…

Существует несколько тысяч ботов, которые постоянно отслеживают эти «легко угадываемые» закрытые ключи, чтобы украсть средства, если кто-то отправит им ETH.

Как вы можете видеть на изображении, каждый раз, когда на этот адрес отправляют несколько ETH, бот мгновенно выводит деньги.

▶ Слишком простые семенные слова…

Знаете ли вы, что такое HD-кошелек?

HD расшифровывается как иерархический детерминированный кошелек.

  1. Вы создаете случайное число (мастер-ключ) и получаете все адреса из главного ключа с помощью серии хеширования только с помощью этого случайного числа.
  2. Таким образом, каждый раз, когда вы используете это случайное число для получения новых адресов, вы каждый раз получаете одно и то же.

Вот как работает metamask, вы можете проверить, записав свои слова (если вы никогда этого не делали), удалив свою учетную запись metamask и снова введя свои слова.

Вы должны увидеть все те же учетные записи, что и раньше, в том же порядке.

Чтобы помочь вам запомнить мастер-ключ, можно преобразовать эти 132 бита энтропии в 12 групп по 11 бит.

И каждая группа битов может быть представлена словом на английском языке.

Но некоторым людям пришла в голову гениальная идея выбрать «легко угадываемые» начальные слова, такие как:

  • Тест тест
  • Раз, два, три, один, два, три, один, два, три, один, два, три
  • Вы видите закономерность…

Вот полный список возможных начальных слов Ethereum: https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

Что касается закрытого ключа, то существует большое количество ботов, которые постоянно следят за сетью, чтобы угадать такие парольные фразы…

▶ Слабые параметры/повторное использование Nounce

Для подписания сделки необходимо:

  • Закрытый ключ (d)
  • Хэш сообщения (h)
  • Одноразовый номер, который должен отличаться между подписями (k)

Подпись (r,s) может быть рассчитана следующим образом:

  • R = G*k (G — постоянное число, используемое для всех подписей)
  • S = (h + d*r)/k

Примечание: * — это умножение в поле эллиптической кривой.

Если один и тот же одноразовый номер (число k) повторно используется между 2 подписями одного и того же закрытого ключа, число R будет одинаковым.

И самое главное, учитывая, что ДВЕ подписи A = (r,s) и B = (r,s’) повторно используют одно и то же k (поэтому r одно и то же), вы можете пересчитать полный закрытый ключ.

Некоторые кошельки имеют эту уязвимость, и в результате было украдено много эфиров.

Capture the Ether сделал CTF, если вы хотите применить эту уязвимость на практике: https://capturetheether.com/challenges/accounts/account-takeover/

▶ Извлечение закрытого ключа

В metamask вы можете извлечь закрытый ключ, который использовался для генерации адреса открытого ключа. (и так для подписания транзакций)

Перейдите в меню metamask > > данные учетной записи и нажмите «экспортировать закрытый ключ».

▶ Использование слишком старой версии метамаски.

До версии 10.11.3 metamask вы, возможно, подвергались уязвимостям, при соблюдении некоторых условий metamask можно было взломать. Поэтому, если ваша версия слишком старая, вам нужно обновить свой кошелек…

https://cointelegraph.com/news/metamask-warns-of-security-vulnerability-from-older-versions-of-popular-crypto-wallet

▶ Хранение закрытого ключа в виде обычного текста

Допустим, у вас есть hardhat-проект, и вы храните всю информацию о своем адресе в конфигурационном файле hardhat. (hardhat.config.js)

Когда вы загружаете свой код на github, закрытый ключ все еще здесь и может быть раскрыт остальному миру.

Что касается генерации случайных закрытых ключей / начальных фраз, то также есть boot, которые отслеживают учетные записи github, чтобы украсть у вас ETH.

▶ Атака грубой силой?

Если все предыдущие способы не помогли, вы все равно можете переборщить, выбрав случайные закрытые ключи (случайные числа), получить открытый ключ и хешировать открытый ключ, чтобы получить адрес.

Но насколько маловероятно найти секретный ключ, содержащий какие-то средства?

В них около 50 000 000 счетов с ETH (допустим 10⁸)

Адрес Ethereum имеет длину 40 шестнадцатеричных чисел, это означает, что существует 16⁴⁰ возможного адреса.

Таким образом, разделив количество возможных адресов и адреса, содержащие деньги, вы получите 16⁴⁰ / 10⁸ = 10⁴⁵.

Каждый раз, когда вы генерируете адрес, есть 1/10⁴⁵ шанс что-то получить, этого в значительной степени достаточно, чтобы сказать, что при создании 1 миллиарда адресов в секунду (или более) вероятность найти что-то интересное ничтожно мала.

Это гарантирует вам (даже при использовании юбилейной атаки), что если вы создадите случайное число (от 1 до 2²⁵⁶), которое является вашим закрытым ключом.

Вы не получите тот же адрес Ethereum, что и другой, который сгенерировал.

Тем не менее, вы все равно можете попробовать сгенерировать случайные ключи здесь: https://keys.lol/ethereum/

▶ Заключение

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

Источник