Разоблачение адреса блокчейн-бандита с 44 747 eth

Как создать публичный и приватный аккаунт

1. Создаем новые кошельки

Создать несколько новых адресов с помощью MetaMask или холодного кошелька не составит труда. И хотя достаточно иметь всего один публичный и один приватный Ethereum-адрес, можете создать больше, чтобы дополнительно распределить капитал и риски. А разделение приватных адресов для использования в DeFi-приложениях и просто для пассивного хранения позволит защитить деньги от вас самих.

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

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

  • 1 кошелек для ENS и криптотвиттера;
  • 2+ кошелька для развлечений и NFT-игр наподобие God’s Unchained
  • 1 кошелек для долгосрочного хранения
  • 2+ кошелька для использования в DeFi-приложениях

2. Перемещение активов

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

️Просто делать перевод со старого кошелька на новый нельзя!

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

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

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

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

3. Следите, чтобы денежные потоки не пересекались

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

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

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

Tor вкладки в Brave скрывают ваш IP-адрес

Все эти маневры могут казаться весьма раздражающими…

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

Но в действительности на организацию системы кошельков у вас уйдет пара часов, максимум — несколько дней. После этого все будет работать на автопилоте. Главное просто не сделать какую-нибудь необдуманную транзакцию.

Храните свои криптоактивы в безопасности, даже если это вас немного раздражает. Оно того стоит.

Действия:

  • создайте публичный и приватный Ethereum-адреса
  • воспользуйтесь централизованной биржей или Tornado Cash чтобы переместить средства на новые адреса
  • никогда не пересылайте деньги с публичного кошелька на приватный и наоборот напрямую

____________________

Повышайте уровень своего понимания Ethereum и DeFi. Подписывайтесь на BanklessRU в Telegram.

Оригинал: How to keep your ETH address from privacy cavities

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

Local vs Hosted Keys

An Ethereum private key is a 256-bit (32 bytes) random integer.
For each private key, you get one Ethereum address,
also known as an Externally Owned Account (EOA).

In Python, the private key is expressed as a 32-byte long Python object.
When a private key is presented to users in a hexadecimal format, it may or may
not contain a starting hexadecimal prefix.

Local Private Key

A local private key is a locally stored secret you import to your Python application.
Please read below how you can create and import a local private key
and use it to sign transactions.

Hosted Private Key

This is a legacy way to use accounts when working with unit test backends like
or Anvil.
Calling gives you a
predefined list of accounts that have been funded with test ETH.
You can use on any of these accounts
without further configuration.

In the past, around 2015, this was also a way to use private keys
in a locally hosted node, but this practice is now discouraged.

The Role of Public and Private Keys in Ethereum Transactions

When it comes to Ethereum transactions, public and private keys play a crucial role in ensuring the security of your digital assets.

Ethereum utilizes key pairs, consisting of a public key and a private key, to establish a secure connection between the sender and receiver.

The process of transaction signing and verification relies on these keys, providing a robust mechanism for authenticating and authorizing transactions on the Ethereum network.

How Ethereum Utilizes Key Pairs for Security

Using key pairs is essential for ensuring the security of Ethereum transactions. Ethereum utilizes key pairs as a fundamental component of its cryptographic security. A key pair consists of a private key and a public key.

The private key is kept secret and is used to sign transactions, while the public key is shared with others to verify the authenticity of the transactions. Ethereum employs various cryptographic techniques such as hash functions and signature schemes to ensure the integrity and security of transactions.

When a transaction is created, it’s signed using the private key, generating a unique signature. This signature is then verified using the corresponding public key, ensuring that the transaction hasn’t been tampered with.

The Process of Transaction Signing and Verification

Sign and verify Ethereum transactions by utilizing key pairs for secure transactions. In Ethereum, cryptographic algorithms play a vital role in ensuring the security of transactions.

Here is a breakdown of the process:

  • Elliptic Curve Cryptography: Ethereum employs elliptic curve cryptography to generate public and private key pairs. This mathematical framework ensures the confidentiality and authenticity of the keys.
  • Hash Functions: Ethereum uses hash functions to convert transaction data into a fixed-size string of characters. This process ensures data integrity and prevents tampering.
  • Signature Verification: To verify the authenticity of a transaction, Ethereum utilizes the public key associated with the sender’s private key. By using elliptic curve cryptography, the signature is verified, ensuring that it was indeed signed by the sender.

Как правильно хранить приватные ключи?

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

  • на бумаге (металле),
  • на электронных носителях,
  • в памяти.

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

А теперь расскажем, какие есть варианты хранения:

  • На бумаге или металле. Этот способ больше всего актуален для бумажных кошельков, однако так можно хранить приватный ключ, созданный любым методом — нужно просто переписать его. Однако такое хранение не безопасно: вы можете потерять лист, он может сгореть или размокнуть. Для большей прочности его можно заламинировать или сделать копию из металла.      
  • На флешке. Это один из самых надежных способов. Нужно использовать отдельную флешку (желательно новую и проверенную на отсутствие вирусов) и выполнять все операции в оффлайн-режиме. Есть несколько вариантов хранения: в виде текстового документа, скриншота или оригинального файла в формате wallet.dat. Также обязательно нужно поставить на флешку пароль.  
  • На компьютере. Это также достаточно надежный вариант хранения, если устройство не подключено к интернету и исправно работает. В противном случае он или может стать жертвой злоумышленников, или «полететь». Также рекомендуется поставить надежный пароль на сам файл с ключом и на компьютер.
  • В памяти. Это, пожалуй, самый безопасный способ хранения приватного ключа. Однако он подойдет только в том случае, если вы использовали мнемоническую фразу в качестве приватного ключа. Потому что запомнить набор из рандомных чисел и букв просто нереально.  

Generating account address from private key for Solana

How an account address is generated from a private key on Solana

Step 0: Generating a private key on Solana

Same as Ethereum, Solana’s private key is 32 bytes, but it is usually represented as an array of 32 8-bit unsigned integers(Uint8). Solana supports seed/mnemonic phrases too.

Step 1: Hashing the private key with SHA512

Solana’s private key is first hashed with the SHA-512 function, converting the private key into 64 bytes of hashed data.

Step 2: Pruning

From the result, the second half of the hash output is discarded. Only the first 32 bytes is used to generate its public key.

Step 3: Calculating the public key

Solana uses Ed25519 for cryptography. Same as ECDSA, Ed25519 is an Elliptical signature algorithm.

From this step, 32 bytes of data are generated. It is both the public key and the account address. Solana’s account address is usually converted to base58.

Результаты

Мы обнаружили 49 060 транзакций на общую сумму 32 ETH, распределенных по 732 открытым ключам, для которых мы нашли закрытый ключ. Текущее балансы по этим ключам составляли 0 ETH, однако эти балансы непостоянны, поскольку на адреса периодически поступает эфир.

Большинство ключей было обнаружено в группе A — 464 секретных ключа. Общая стоимость транзакций с использованием этих слабых закрытых ключей составила 28,9456 ETH (при текущем балансе 0 ETH). Интересно, что один ключ в группе B имел исходящую транзакцию на адрес, который в настоящее время содержит 44 744 ETH (подробнее об этом ниже).

К счастью, использование слабых закрытых ключей не является широко распространенной проблемой. Однако было удивительно встретить 732 активных ключа, к которым мы могли получить доступ. Также нас удивил большой совокупный объем транзакций.

Общее время вычислений для сканирования 8 групп на 256-битном пространстве ключей через 32-битные окна составило около 128 часов работы ЦП на группу (всего 1024 часа). К счастью, эту задачу можно выполнять параллельно, и мы смогли разделить все 8 групп и отсканировать их за 8 часов. Таким образом, можно проводить периодические проверки для выявления новых слабых закрытых ключей.

Расчет контрольной суммы

Следующим шагом является вычисление контрольной суммы полученного ключа mainnet. Контрольная сумма гарантирует, что ключ все еще сохраняет свою целостность во время процесса. Если контрольная сумма не совпадает, адрес будет помечен как недействительный.

Чтобы сгенерировать контрольную сумму ключа, необходимо дважды применить хэш-функцию SHA-256, а затем взять первые 4 байта из этого результата. Имейте в виду, что 4 байта представляют 8 шестнадцатеричных цифр.

Код, необходимый для расчета контрольной суммы адреса:

# Двойной SHA256, чтобы получить контрольную сумму

sha256_nbpk = hashlib.sha256 (network_bitcoin_public_key_bytes)

sha256_nbpk_digest = sha256_nbpk.digest ()

sha256_2_nbpk = hashlib.sha256 (sha256_nbpk_digest)

sha256_2_nbpk_digest = sha256_2_nbpk.digest ()

sha256_2_hex = codecs.encode (sha256_2_nbpk_digest, ‘hex’)

контрольная сумма = sha256_2_hex

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

Закрытые ключи эфириума

Проект эфириум использует криптографию на основе эллиптических кривых для генерации пары открытых/закрытых ключей. 256-битный закрытый ключ используется для вычисления точки на кривой secp256k1 для генерации открытого ключа. Затем открытый ключ хешируется с помощью алгоритма keccak256. Этот хеш усекается 160 бит, чтобы получить публичный адрес. Адрес эфириума не может быть реверсирован или использован каким-либо другим образом для получения закрытого ключа, который использовался для его генерации.

Учитывая случайно сгенерированный закрытый ключ, то есть в пределах допустимого диапазона от одного до максимального значения, определенного кривой secp256k1, мы можем получить открытый адрес, взяв самые правые 160 бит хеша открытого ключа keccack256. На рисунке ниже показан процесс для получения адреса эфириума из случайно сгенерированного 256-битного закрытого ключа.

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

Блокчейн эфириума позволяет любому запрашивать адрес для получения информации о нём. Это делается путем запроса в ноду эфириума, которая может быть запущена локально или удаленно. Несколько онлайн-сервисов предоставляют базовые данные о адресах — к примеру, Etherscan, который может использоваться для запроса публичного адреса эфириума из приведенного выше примера: A99FDD90FF61DD08CF049155D18E086F7806641B. Можно найти этот адрес на Etherscan и увидеть, что адрес получил 0 транзакций.

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

0x47579DA2BEA463533DBFAD6FCF8E90876C2FE9760DC1162ACC4059EE37BDDB5C

Если обрезать до 32 бит, получится следующий ключ:

0x0000000000000000000000000000000000000000000000000000000037BDDB5C

В эксперименте мы выбрали закрытый ключ, равный 1, только по той причине, что он является нижней границей возможного закрытого ключа для secp256k1. Таким образом, мы используем закрытый ключ

0x0000000000000000000000000000000000000000000000000000000000000001

для получения публичного адреса 0x7e5f4552091a69125d5dfcb7b8c2659029395bdf.

Как говорилось ранее, крайне маловероятно то, что два пользователя эфириума сгенерируют один и тот же закрытый ключ — при условии, что по крайней мере один пользователь генерирует его случайным образом. Не имеет значения, исследуем ли мы ключи полным перебором, начиная от нижних или верхних значений, или ключей, которые используют цифры числа «пи», случайно сгенерированных и т. д. — в любом случае не должно быть совпадений со случайно сгенерированным ключом другого пользователя эфириума.

Мы обнаружили, что адрес, полученный из закрытого ключа 0x01, имеет 679 транзакций (хотя в настоящее время на этом адресе эфир не хранится). Мы можем предположить, что закрытый ключ 0x01 было выбран специально или из-за ошибки. Следующие разделы детализируют наш поиск, чтобы понять и изучить, как широко распространено создание слабых ключей в блокчейне эфириума.

Generating and Managing Ethereum Key Pairs

When it comes to generating Ethereum key pairs, following best practices is crucial for ensuring security. This includes using a random number generator and avoiding any predictable patterns in key generation.

Additionally, managing private keys is of utmost importance to safeguard against unauthorized access or loss. Implementing strategies such as offline storage and multi-signature wallets can help protect your Ethereum key pairs.

Best Practices for Secure Key Generation

To ensure the security of your Ethereum key pairs, it’s crucial to regularly and securely generate and manage them. Here are some best practices to follow:

  • Use strong cryptographic algorithms: When generating your Ethereum key pairs, make sure to use well-established and secure cryptographic algorithms. This will help protect your keys from being compromised.
  • Be aware of Ethereum cryptography challenges: Ethereum’s unique decentralized nature and complex smart contract ecosystem present specific challenges for cryptography. Stay informed about the latest developments and advancements in Ethereum cryptographic innovations to address these challenges effectively.
  • Stay updated on best practices: As the Ethereum protocol evolves, so do the best practices for key generation and management. Stay informed and regularly review the latest research and recommendations to ensure your keys are protected.

Strategies for Safeguarding Private Keys

To ensure the security of your Ethereum key pairs, it is crucial to implement robust strategies for generating and managing them effectively. Safeguarding your private keys is of utmost importance to protect your ether and maintain control over your account. Here are some strategies to consider:

Strategy Description
Use a Hardware Wallet Hardware wallets are physical devices that store your private keys offline, making them less vulnerable to hacking. They provide an extra layer of security and are often recommended for long-term storage.
Enable Two-Factor Authentication By enabling two-factor authentication (2FA) on your accounts, you add an extra layer of security. This typically involves entering a verification code sent to your mobile device in addition to your password.
Store Offline Backups Keep offline backups of your private keys in a secure location, such as a hardware wallet or a piece of paper stored in a safe. This protects your keys from being accessed by hackers online.
Regularly Update Software Stay up to date with the latest software updates for your Ethereum wallet. These updates often include security patches and enhancements that can help protect your keys from potential vulnerabilities.

Elliptic Curve Cryptography Explained

Elliptic curve cryptography is a type of asymmetric or public key cryptography based on the discrete logarithm problem as expressed by addition and multiplication on the points of an elliptic curve.

is an example of an elliptic curve, similar to that used by Ethereum.

Note

Ethereum uses the exact same elliptic curve, called , as Bitcoin. That makes it possible to reuse many of the elliptic curve libraries and tools from Bitcoin.

Figure 4-1. A visualization of an elliptic curve

Ethereum uses a specific elliptic curve and set of mathematical constants, as defined in a standard called , established by the US National Institute of Standards and Technology (NIST). The curve is defined by the following function, which produces an elliptic curve:

y2=(x3+7)over(𝔽p)

or:

y2modp=(x3+7)modp

The mod p (modulo prime number p) indicates that this curve is over a finite field of prime order p, also written as 𝔽p, where p = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1, which is a very large prime number.

Because this curve is defined over a finite field of prime order instead of over the real numbers, it looks like a pattern of dots scattered in two dimensions, which makes it difficult to visualize. However, the math is identical to that of an elliptic curve over real numbers. As an example, shows the same elliptic curve over a much smaller finite field of prime order 17, showing a pattern of dots on a grid. The Ethereum elliptic curve can be thought of as a much more complex pattern of dots on an unfathomably large grid.

Figure 4-2. Elliptic curve cryptography: visualizing an elliptic curve over F(p), with p=17

So, for example, the following is a point Q with coordinates (x,y) that is a point on the curve:

Q =
(49790390825249384486033144355916864607616083520101638681403973749255924539515,
59574132161899900045862086493921015780032175291755807399284007721050341297360)

shows how you can check this yourself using Python. The variables and are the coordinates of the point Q, as in the preceding example. The variable is the prime order of the elliptic curve (the prime that is used for all the modulo operations). The last line of Python is the elliptic curve equation (the operator in Python is the modulo operator). If and are indeed the coordinates of a point on the elliptic curve, then they satisfy the equation and the result is zero ( is a long integer with value zero). Try it yourself, by typing on a command line and copying each line (after the prompt ) from the listing.

Introduction:

This paper focuses on our discovery of private keys used to commit Ethereum
blockchain transactions. The probability of encountering a private key that
corresponds to someone else’s Ethereum address is around 1 in 2256. To
cover just 1% of that key space, even if we used computing resources that would
allow us to generate 100 trillion keys per second, it would take us roughly  years.
However, instead of attempting to brute force search random private keys, we devised
ways to discover keys that may have been generated using faulty code, faulty random
number generators, or a combination of both. The following sections outline how an
Ethereum address is generated and our approach to discover those private keys that
were generated in suboptimal ways.

Определение

Приватный (закрытый) ключ Эфира:

  1. Конфиденциальный код, который доступен только хозяину бумажника и предназначен для подписи транзакций криптовалюты. В отличие от общедоступного адреса, закрытый хранится вдали от посторонних глаз и используется только для оформления переводов владельцем.
  2. Криптограмма со сложной структурой, обеспечивающая идентификацию хозяина хранилища и открывающая доступ к накопленной криптовалюте. Специальный код применяется в качестве индивидуальной подписи при оформлении исходящих операций.
  3. Набор символов, кодируемых в разных форматах, в зависимости от типа применяемого бумажника.

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

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

На базе приватного кода Ethereum создается цифровая подпись, которая в дальнейшем применяется в виде доказательства и подтверждения валидности операции. Система получает подтверждение отправки Эфира собственником общедоступного ключа. После отправки перевода в сеть происходит совмещение private и public key. Значение первого параметра остается скрытым от других участников сети. Как только прошло необходимое число подтверждений, а валидность подтверждена, операция признается действительной и добавляется к блокчейну Ethereum. Такая система гарантирует надежность криптовалютной сети от постороннего вмешательства.

Базовые параметры private key:

Функция — обеспечение доступа к бумажнику, подтверждение валидности транзакции, гарантирование безопасности переводов.

Вид — наличие в составе 64 элементов (цифр от нуля до десяти и латинских букв от A до F).
Получение. Персональный код Ethereum создается при регистрации бумажника и считается индивидуальным для пользователя.

Хранение. Информация о private key находится в распоряжении хозяина хранилища

Приватные ключи Ethereum важно хранить вдали от посторонних глаз во избежание кражи криптовалюты.

Безопасность. Получение информации о private key путем проведения математических операций исключено

Наличие публичного адреса или цифровой подписи недостаточно. Секретный код не фигурирует в транзакциях и хранится лично пользователем.

Наличие рассмотренных функций гарантирует сохранность монет и подтверждение валидности операций в сети Ethereum при условии внимания владельца и сохранения private key в надежном месте.

Понравилась статья? Поделиться с друзьями: