ECC (Elliptic Curve Cryptography) es una criptografía de clave pública basada en las propiedades matemáticas de las curvas elípticas, ofreciendo mayor seguridad con claves más pequeñas.

¿Qué es ECC?

ECC utiliza las propiedades matemáticas de las curvas elípticas sobre campos finitos para crear sistemas criptográficos seguros y eficientes.

Fundamentos Matemáticos

Ecuación de Curva Elíptica

y² = x³ + ax + b (mod p)

Donde:

  • a, b: Parámetros de la curva
  • p: Número primo (campo finito)
  • x, y: Coordenadas del punto

Propiedades

  • Punto en el infinito: Elemento neutro
  • Operación de grupo: Suma de puntos
  • Discrete Logarithm Problem: Dificultad computacional
  • Generador: Punto que genera el grupo

Curvas Estándar

NIST P-Curves

  • P-192: 192 bits de seguridad
  • P-224: 224 bits de seguridad
  • P-256: 256 bits de seguridad ✅ Recomendado
  • P-384: 384 bits de seguridad
  • P-521: 521 bits de seguridad

Curve25519

  • Ed25519: Firma digital
  • X25519: Intercambio de claves
  • Seguridad: 128 bits equivalentes
  • Rendimiento: Muy eficiente

Curve448

  • Ed448: Firma digital
  • X448: Intercambio de claves
  • Seguridad: 224 bits equivalentes
  • Uso: Aplicaciones de alta seguridad

Algoritmos ECC

ECDH (Elliptic Curve Diffie-Hellman)

  • Propósito: Intercambio de claves
  • Uso: Establecer claves compartidas
  • Seguridad: Basada en DLP
  • Eficiencia: Muy rápida

ECDSA (Elliptic Curve Digital Signature Algorithm)

  • Propósito: Firmas digitales
  • Uso: Autenticación e integridad
  • Seguridad: Resistente a ataques
  • Estándar: FIPS 186-4

ECIES (Elliptic Curve Integrated Encryption Scheme)

  • Propósito: Cifrado híbrido
  • Uso: Cifrado de datos
  • Combinación: ECC + cifrado simétrico
  • Eficiencia: Óptima

Implementación

Python con cryptography

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

# Generar par de claves ECC
private_key = ec.generate_private_key(ec.SECP256R1())
public_key = private_key.public_key()

# Firmar con ECDSA
message = b"Hello, World!"
signature = private_key.sign(
    message,
    ec.ECDSA(hashes.SHA256())
)

# Verificar firma
try:
    public_key.verify(
        signature,
        message,
        ec.ECDSA(hashes.SHA256())
    )
    print("Firma válida")
except:
    print("Firma inválida")

OpenSSL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Generar clave privada ECC
openssl ecparam -genkey -name prime256v1 -noout -out private.pem

# Extraer clave pública
openssl ec -in private.pem -pubout -out public.pem

# Firmar archivo
openssl dgst -sha256 -sign private.pem -out signature.bin file.txt

# Verificar firma
openssl dgst -sha256 -verify public.pem -signature signature.bin file.txt

JavaScript (Node.js)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const crypto = require('crypto');

// Generar par de claves ECC
const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', {
    namedCurve: 'prime256v1'
});

// Firmar
const sign = crypto.createSign('SHA256');
sign.update('Hello, World!');
const signature = sign.sign(privateKey, 'hex');

// Verificar
const verify = crypto.createVerify('SHA256');
verify.update('Hello, World!');
const isValid = verify.verify(publicKey, signature, 'hex');

Ventajas sobre RSA

Tamaño de Clave

  • ECC-256: Equivalente a RSA-3072
  • ECC-384: Equivalente a RSA-7680
  • ECC-521: Equivalente a RSA-15360
  • Eficiencia: Menor uso de memoria

Rendimiento

  • Generación: Más rápida que RSA
  • Firmas: Más rápidas que RSA
  • Verificación: Más rápida que RSA
  • Batería: Menor consumo energético

Seguridad

  • Misma seguridad: Con claves más pequeñas
  • Resistencia: A ataques conocidos
  • Forward secrecy: Perfect Forward Secrecy
  • Estándares: Ampliamente estandarizado

Aplicaciones

Web Security

  • TLS/SSL: Handshake ECDHE
  • HTTPS: Certificados ECC
  • HSTS: HTTP Strict Transport Security
  • Certificate Pinning: Fijación de certificados

Blockchain

  • Bitcoin: Firma de transacciones
  • Ethereum: Cuentas y firmas
  • Monedas: Criptomonedas
  • Smart Contracts: Contratos inteligentes

Mobile Security

  • iOS: Touch ID, Face ID
  • Android: Fingerprint API
  • NFC: Pagos móviles
  • IoT: Dispositivos conectados

Email Security

  • S/MIME: Correo electrónico seguro
  • PGP/GPG: Cifrado de correo
  • DKIM: Autenticación de dominio
  • SPF: Verificación de remitente

Curvas Recomendadas

Para Aplicaciones Generales

  • P-256: NIST P-256 (prime256v1)
  • Curve25519: Para intercambio de claves
  • Ed25519: Para firmas digitales
  • Seguridad: 128 bits equivalentes

Para Alta Seguridad

  • P-384: NIST P-384 (secp384r1)
  • P-521: NIST P-521 (secp521r1)
  • Curve448: Para máxima seguridad
  • Seguridad: 192-224 bits equivalentes

Para Rendimiento

  • Curve25519: Muy eficiente
  • Ed25519: Firmas rápidas
  • X25519: Intercambio rápido
  • Uso: Aplicaciones de alto rendimiento

Seguridad

Fortalezas

  • Matemática sólida: Base teórica robusta
  • Claves pequeñas: Menor superficie de ataque
  • Eficiencia: Alto rendimiento
  • Estándares: Ampliamente estandarizado

Consideraciones

  • Implementación: Crítico implementar correctamente
  • Generación aleatoria: Usar generadores seguros
  • Validación: Validar parámetros de curva
  • Timing attacks: Proteger contra ataques de tiempo

Mejores Prácticas

  • Curvas estándar: Usar curvas aprobadas
  • Generación segura: Usar generadores criptográficos
  • Validación: Validar todas las entradas
  • Testing: Probar implementaciones

Comparación con Otros Algoritmos

ECC vs RSA

  • Tamaño: ECC usa claves más pequeñas
  • Rendimiento: ECC generalmente más rápido
  • Seguridad: Ambos son seguros
  • Adopción: ECC ganando terreno

ECC vs AES

  • Propósito: ECC para claves, AES para datos
  • Uso conjunto: ECC + AES es común
  • Híbrido: Sistemas híbridos eficientes
  • Aplicaciones: Complementarios

Implementación en Protocolos

TLS/SSL

  • ECDHE: Intercambio de claves
  • ECDSA: Firmas de certificados
  • Cipher suites: Suites ECC
  • Perfect Forward Secrecy: PFS con ECC

SSH

  • Ed25519: Claves de host
  • ECDSA: Firmas de servidor
  • X25519: Intercambio de claves
  • Rendimiento: Conexiones más rápidas

IPsec

  • IKEv2: Intercambio de claves
  • ESP: Cifrado de paquetes
  • AH: Autenticación de paquetes
  • VPN: Conexiones seguras

Herramientas y Librerías

Python

  • cryptography: Librería principal
  • ecdsa: Implementación ECDSA
  • pycryptodome: Criptografía completa
  • fastecdsa: Implementación rápida

C/C++

  • OpenSSL: Librería estándar
  • libsodium: Librería moderna
  • mbedTLS: Para sistemas embebidos
  • Nettle: Librería ligera

JavaScript

  • Node.js crypto: Módulo nativo
  • elliptic: Librería ECC
  • tweetnacl: Implementación portátil
  • libsodium.js: Versión JavaScript

Conceptos Relacionados

Referencias