Cómo migrar tus contratos Solidity a criptografía post-cuántica
QuantumScan detectó la vulnerabilidad. Aquí está el camino concreto de migración para cada patrón — desde la auditoría de hoy hasta la arquitectura quantum-safe a largo plazo.
← Volver al escáner SolidityEstos son los contratos que hereda el 80%+ de los protocolos DeFi. Cada token que usa ERC20Permit está afectado.
Línea de tiempo de migración
Ejecuta QuantumScan. Documenta cada ecrecover(), EIP-712 y permit(). Agrega los hallazgos a tu informe de auditoría.
Despliega wrappers Account Abstraction (ERC-4337) con soporte ML-DSA junto al ECDSA existente. Firma dual en operaciones críticas.
Deadline NIST/CNSA 2.0. Reemplaza firmantes ECDSA con ML-DSA (FIPS 204). Se espera que Ethereum tenga precompile PQC para entonces.
Ruta de migración por patrón
Deja de agregar nuevas llamadas ecrecover(). Documenta todas las existentes.
Despliega una Smart Account (ERC-4337) con validador de firma personalizado que soporte ML-DSA (CRYSTALS-Dilithium).
// ERC-4337 validador personalizado
function validateUserOp(UserOperation calldata op, bytes32 hash, uint256 missingFunds)
external returns (uint256) {
require(mlDsaVerify(hash, op.signature, ownerPubKey), "Firma PQC inválida");
return 0;
}Genera pares de claves ML-DSA y firma off-chain. Verifica on-chain vía precompile o ZK proof.
import { ml_dsa65 } from '@noble/post-quantum/ml-dsa';
const keys = ml_dsa65.keygen();
const sig = ml_dsa65.sign(keys.secretKey, message);Documenta cada EIP712Domain en tu código. Son los objetivos de migración.
Agrega un campo ML-DSA paralelo a tus structs. Verifica ambas firmas durante la transición.
struct PermitConPQC {
address owner; address spender;
uint256 value; uint256 deadline;
bytes ecdsaSig; // legacy
bytes mlDsaSig; // ML-DSA FIPS 204
}No existe estándar EIP-712 PQC todavía. Monitorea ethereum/EIPs.
Primero refactoriza a ECDSA.recover() de OpenZeppelin para facilitar la migración futura.
// ANTES (assembly)
assembly { let success := staticcall(gas(), 0x1, ptr, 0x80, ptr, 0x20) }
// DESPUÉS (librería — fácil de reemplazar)
address signer = ECDSA.recover(hash, v, r, s);Aplica la migración ERC-4337 ML-DSA del patrón ecrecover() de arriba.
La migración del DON de Chainlink está fuera de tu control. No existe interfaz PQC hoy.
Despliega un circuit breaker que pueda congelar actualizaciones de precios si el oráculo es comprometido.
modifier oracleNotFrozen() {
require(!oracleFrozen, "Oráculo congelado: riesgo cuántico activo");
_;
}Usa mediana de múltiples oráculos (Chainlink + Pyth + UMA) para limitar el impacto.
Agrega función guardian para deshabilitar permit() si la amenaza cuántica se activa.
bool public permitEnabled = true;
function setPermitEnabled(bool enabled) external onlyOwner {
permitEnabled = enabled;
}
function permit(...) public override {
require(permitEnabled, "permit() deshabilitado: migración PQC en curso");
super.permit(...);
}Reemplaza ERC-2612 con una operación ERC-4337 que use firma ML-DSA.
Documenta todos los firmantes actuales. Planifica rotación a claves PQC.
Despliega un módulo Safe personalizado que verifique firmas ML-DSA como tipo de firmante adicional.
contract PQCSafeModule is Module {
mapping(address => bytes) public pqcPublicKeys;
function execPQCTransaction(..., bytes calldata mlDsaSig) external {
require(mlDsaVerify(keccak256(data), mlDsaSig, pqcPublicKeys[msg.sender]));
ISafe(safe).execTransactionFromModule(to, value, data, Enum.Operation.Call);
}
}El equipo de Safe conoce la necesidad de migración PQC. Monitorea github.com/safe-global/safe-contracts.
Herramientas PQC para desarrolladores Solidity
Librería JS/TS MIT que implementa ML-KEM, ML-DSA, SLH-DSA. Sin dependencias. Por Paul Miller.
Permite cualquier esquema de firma — incluyendo ML-DSA — como autenticación de wallet. El puente principal de migración.
Permite a los EOAs ejecutar código, habilitando migración de claves PQC en wallets normales.
Pruebas STARK basadas en hash y quantum-resistant. Proofs de firmas ML-DSA verificables en EVM.
EIPs a monitorear
Account Abstraction — habilita validadores PQC personalizados. Live en mainnet.
Set EOA code — migración de claves PQC en wallets normales. Incluido en Pectra.
QuBit — P2QRH para Bitcoin. Referencia para el paralelo en Ethereum.
Escanea tus contratos ahora
Obtén el reporte completo antes de iniciar tu migración. Gratis, open-source, sin cuenta.