Gerador de Endereços Bitcoin com BIP39 em Python
Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
Gerador de Endereços Bitcoin com BIP39 em Python
Este artigo apresenta um script avançado em Python que utiliza o padrão BIP39 para gerar endereços Bitcoin a partir de frases mnemônicas. A geração é feita com base na lista oficial de palavras BIP39 e pode ser utilizada para fins educacionais, auditoria e testes de segurança. O conteúdo é voltado para desenvolvedores, especialistas em segurança digital e entusiastas de criptografia.
O que é BIP39?
O BIP39 (Bitcoin Improvement Proposal 39) é um padrão que define como converter uma frase mnemônica de 12, 18 ou 24 palavras em uma chave criptográfica usada por carteiras de Bitcoin. Essa técnica facilita o backup e a recuperação de carteiras.
Objetivo do Script
O script abaixo automatiza a geração de combinações de palavras mnemônicas, converte as frases válidas em entropia, depois em chaves privadas e finalmente em endereços Bitcoin. Ele ainda salva o progresso para retomada em caso de interrupção.
Pré-requisitos
Antes de executar o script, instale as dependências necessárias com os comandos abaixo:
pip install mnemonic bit
Script Completo em Python
import gc
import time
from mnemonic import Mnemonic
from itertools import product
from bit import Key
import sys
def gerar_entropia_hex(mnemonic_phrase):
mnemo = Mnemonic("english")
mnemonic_phrase = mnemonic_phrase.replace(';', '').strip()
if not mnemo.check(mnemonic_phrase):
return None
entropy = mnemo.to_entropy(mnemonic_phrase)
return entropy.hex()
mnemo = Mnemonic("english")
elementos = mnemo.wordlist
def salvar_estado(ultimo_item):
with open('estado_lista.txt', 'w') as f:
f.write(str(ultimo_item) + '\n')
def carregar_estado():
try:
with open('estado_lista.txt', 'r') as f:
return int(f.readline().strip())
except (FileNotFoundError, ValueError):
return 0
def processar_par(indices):
return " ".join([elementos[i] for i in indices])
def index_to_combination(index, num_words=24):
base = len(elementos)
indices = []
for _ in range(num_words):
indices.append(index % base)
index //= base
return indices[::-1]
def hex_to_wif(entropia_hex):
private_key = bytes.fromhex(entropia_hex)
return Key.from_bytes(private_key).to_wif()
ultimo_item = carregar_estado()
print("Exemplo: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon length abandon abandon abandon abandon abandon bacon")
for index in range(ultimo_item, 2048 ** 24):
indices = index_to_combination(index)
par_atual = processar_par(indices)
try:
entropia_hex = gerar_entropia_hex(par_atual)
if entropia_hex is None:
continue
wif = hex_to_wif(entropia_hex)
key = Key(wif)
bitcoin_address = key.address
print(f'{par_atual[143:]} \t\t{entropia_hex}\t{bitcoin_address}')
if bitcoin_address == "19vkiEajfhuZ8bs8Zu2jgmC6oqZbWqhxhG ":
sys.exit(1)
except Exception as e:
print(f"Erro ao gerar entropia para o par {par_atual}: {e}")
continue
if index % 10000 == 0:
salvar_estado(index)
gc.collect()
print("Execução finalizada. O estado foi salvo.")
Sobre o Processo
O código gera combinações com base no número total de palavras (2048) e itera através de todas as combinações possíveis para frases mnemônicas de 24 palavras. Embora o total de possibilidades seja astronomicamente grande (204824), esse tipo de script serve como prova de conceito ou para auditoria de segurança, não devendo ser utilizado para fins maliciosos ou tentativas de quebra de carteiras reais.
Considerações Éticas e Legais
Aviso: Este conteúdo é fornecido apenas para fins educacionais e de pesquisa. Você é responsável por avaliar individualmente o propósito e as implicações do uso deste código. Não utilize estas ferramentas para invadir, explorar ou acessar dados de terceiros sem autorização explícita.
Fontes Oficiais
- Padrão BIP39: github.com/bitcoin/bips
- Biblioteca mnemonic: pypi.org/project/mnemonic
- Biblioteca bit: ofek.dev/bit

Comentários
Comente só assim vamos crescer juntos!