Saltar al contenido principal

Seguridad y Criptografía

La seguridad no es una característica en Bitcoin — es la base. Los desarrolladores de protocolo deben pensar de forma adversarial en cada nivel, desde las primitivas criptográficas hasta los ataques a nivel de red.

Modelo de Amenazas

El modelo de seguridad de Bitcoin asume:

  • Los mineros pueden ser adversarios — El sistema debe permanecer seguro incluso si una minoría de mineros es maliciosa
  • La red puede ser poco confiable — Los nodos pueden perder conectividad, recibir mensajes retrasados o estar particionados
  • Los peers pueden mentir — Nunca confíes en datos de un peer sin verificación independiente
  • El hardware puede fallar — El software debe manejar crashes y corrupción de forma graceful

Vectores de Ataque Comunes

AtaqueDescripciónMitigación
Ataque del 51%Hashpower mayoritario reescribe el historialCosto económico, consenso social
Ataque EclipseAislar un nodo de la red realMúltiples conexiones de peers, fuentes diversas
Ataque SybilCrear muchos peers falsosLímites de conexión, gestión de direcciones
Maleabilidad de transaccionesModificar txid sin invalidarSegWit (separación de witness)
Ataque Time-warpManipular timestamps para bajar dificultadReglas de median-time-past
Minería egoístaRetener bloques para obtener ventajaMejoras al protocolo, monitoreo

Primitivas Criptográficas

Funciones Hash

FunciónUso en BitcoinTamaño de Salida
SHA-256Hashing de bloques, txid, proof-of-work256 bits
RIPEMD-160Generación de direcciones (HASH160 = SHA256 + RIPEMD160)160 bits
SHA-256dDoble SHA-256 para la mayoría del hashing interno256 bits
SipHashShort txid del mempool, protección de tablas hash64 bits
SHA-512HMAC para derivación de claves BIP-32512 bits

Criptografía de Curva Elíptica

Bitcoin usa la curva secp256k1:

  • Campo: Campo primo de 256 bits
  • Generación de claves: Clave privada (entero aleatorio de 256 bits) → Clave pública (multiplicación por punto en la curva)
  • Propiedad fundamental: Fácil calcular pubkey = privkey * G, computacionalmente inviable revertir

Esquemas de Firma

ECDSA (original):

  • Usado para transacciones legacy y SegWit v0
  • Las firmas son ~72 bytes (codificación DER)
  • No nativamente agregable

Schnorr (Taproot, BIP-340):

  • Estructura matemática más simple
  • Firmas fijas de 64 bytes
  • Soporta agregación de claves (MuSig2) — múltiples firmantes producen una sola firma
  • Verificación por lotes más eficiente

Hashes Etiquetados

Taproot introdujo hashes etiquetados para prevenir ataques entre protocolos:

tagged_hash(tag, msg) = SHA256(SHA256(tag) || SHA256(tag) || msg)

Cada contexto usa una etiqueta diferente (TapLeaf, TapBranch, TapTweak, etc.), asegurando que un hash de un contexto no pueda ser reinterpretado en otro.

Prácticas de Seguridad en Bitcoin Core

Divulgación Responsable

Bitcoin Core tiene una política de seguridad:

  • Los bugs críticos se reportan privadamente a security@bitcoincore.org
  • Las correcciones se coordinan antes de la divulgación pública
  • Se asignan CVEs para vulnerabilidades rastreadas

Programación Defensiva

  • Sin asignación dinámica de memoria en código de consenso donde sea evitable
  • Verificaciones de desbordamiento en todas las operaciones aritméticas
  • Operaciones en tiempo constante para código criptográfico (prevenir ataques de timing)
  • Dependencias mínimas — menos librerías externas = menor superficie de ataque
  • Compilaciones determinísticas (Guix) — verificar que los binarios coincidan con el código fuente

Lectura Recomendada