Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Operações com Chaves Bitcoin em Python: Keymath e Modmath Explicados

#Bitcoin; #Python; #Criptografia

@CanalQb

Mini-biblioteca keymath e modmath em Python puro


Se a gente pensar no que os utilitários keymath e modmath fazem — basicamente operações matemáticas com pontos em curvas elípticas e aritmética modular — dá pra fazer muita coisa com Python! 🐍

Abaixo, te mostro o que dá pra fazer com Python, imitando ou até expandindo o que keymath e modmath fazem:

🔑 1. keymath (operações com chaves públicas e privadas)

Com keymath é possível:

  • Multiplicação de ponto: private_key * G → gera a public key
  • Adição e subtração de pontos
  • Divisão por escalar (com inverso modular)
  • Verificação se o ponto está na curva
  • Conversão entre formatos comprimido e não comprimido

💡 Exemplo em Python com ecdsa:

from ecdsa import SECP256k1, SigningKey

sk = SigningKey.generate(curve=SECP256k1)
vk = sk.verifying_key

print("PrivKey:", sk.to_string().hex())
print("PubKey:", vk.to_string("compressed").hex())

🔁 2. modmath (operações modulares)

  • Multiplicações/divisões mod n (ordem da curva)
  • Inversos modulares
  • Operações aritméticas em espaços modulares

💡 Exemplo em Python puro:

a = 123456789
b = 987654321
mod = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

inv = pow(a, -1, mod)
res = (a * b) % mod

print("Inverso:", inv)
print("Resultado mod:", res)

🛠️ O que podemos criar com isso?

  1. Simular puzzles de Bitcoin
  2. Gerar endereços (p2pkh, p2wpkh)
  3. Estudar algoritmos como BSGS e Pollard's Kangaroo
  4. Detectar e analisar vulnerabilidades em CTFs

👾 Exemplo completo: gerar endereço Bitcoin

import hashlib
import base58
from ecdsa import SigningKey, SECP256k1

def priv_to_pub(privkey_bytes):
    sk = SigningKey.from_string(privkey_bytes, curve=SECP256k1)
    vk = sk.verifying_key
    prefix = b'\x03' if vk.pubkey.point.y() & 1 else b'\x02'
    return prefix + vk.to_string()[:32]

def pub_to_address(pubkey_bytes):
    sha = hashlib.sha256(pubkey_bytes).digest()
    rip = hashlib.new('ripemd160', sha).digest()
    prefix = b'\x00' + rip
    checksum = hashlib.sha256(hashlib.sha256(prefix).digest()).digest()[:4]
    return base58.b58encode(prefix + checksum)

priv = bytes.fromhex("b40e7d34265ab9533a64622bd1a188fb8abb8829af545169abad49b46be5fe56")
pub = priv_to_pub(priv)
addr = pub_to_address(pub)

print("Bitcoin Address:", addr.decode())

⚠️ Investimentos, mineração ou experimentos com chaves e criptomoedas exigem conhecimento técnico. Faça sempre sua própria análise antes de colocar dinheiro ou expor ativos reais em testes e códigos.

Quer montar comigo uma mini-biblioteca estilo keymath/modmath em Python puro para entender melhor esses conceitos? Me avise! 😎


#python; #criptografia; #bitcoin

Postar um comentário

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo