Skip to content
Guia de Migração PQC · Solidity · 2025

Como migrar seus contratos Solidity para criptografia pós-quântica

O QuantumScan detectou a vulnerabilidade. Aqui está o caminho concreto de migração para cada padrão — da auditoria de hoje à arquitetura quantum-safe no longo prazo.

← Voltar ao scanner Solidity
Prova real: contratos core da OpenZeppelin100/100 Crítico
$ npx quantumscan ./openzeppelin-contracts/contracts/token/ERC20/extensions/
QuantumScan v1.5.0 · Post-Quantum Cryptography Scanner
🟠 HIGH18 findings
ECDSA.sol:190 · ecrecover(
EIP712.sol:109 · _hashTypedDataV4(
ERC20Permit.sol:57 · _hashTypedDataV4(
... 15 more findings
Risk Score 100/100 Critical 🚨

Esses são os contratos que mais de 80% dos protocolos DeFi herdam. Todo token que usa ERC20Permit está afetado.

Linha do tempo de migração

Agora — Auditoria

Rode o QuantumScan. Documente cada ecrecover(), EIP-712 e permit(). Adicione os achados ao relatório de auditoria.

2025-2027 — Híbrido

Faça deploy de wrappers Account Abstraction (ERC-4337) com suporte ML-DSA junto ao ECDSA existente. Assinatura dupla em operações críticas.

2028-2030 — Migrar

Deadline NIST/CNSA 2.0. Substitua signatários ECDSA por ML-DSA (FIPS 204). Ethereum deve ter precompile PQC nativo até lá.

Caminho de migração por padrão

ecrecover() / ECDSA.recover()Médio prazo@noble/post-quantum
1. Congelar

Pare de adicionar novas chamadas ecrecover(). Documente todas as existentes.

2. Envolver com ERC-4337

Faça deploy de uma Smart Account (ERC-4337) com validador de assinatura personalizado suportando 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), "Assinatura PQC inválida");
    return 0;
}
3. Usar @noble/post-quantum

Gere pares de chaves ML-DSA e assine off-chain. Verifique on-chain via precompile ou ZK proof.

import { ml_dsa65 } from '@noble/post-quantum/ml-dsa';
const keys = ml_dsa65.keygen();
const sig = ml_dsa65.sign(keys.secretKey, message);
Assinaturas tipadas EIP-712Médio prazo
1. Mapear domain separators

Documente cada EIP712Domain no código. São os alvos de migração.

2. Assinatura híbrida

Adicione um campo ML-DSA paralelo às suas structs. Verifique ambas as assinaturas durante a transição.

struct PermitComPQC {
  address owner; address spender;
  uint256 value; uint256 deadline;
  bytes   ecdsaSig;  // legado
  bytes   mlDsaSig; // ML-DSA FIPS 204
}
3. Aguardar EIP PQC

Nenhum padrão EIP-712 PQC existe ainda. Monitore ethereum/EIPs.

Assembly ecrecover precompile (0x1)Curto prazo — primeiro passo
1. Substituir assembly por biblioteca

Primeiro refatore para ECDSA.recover() da OpenZeppelin para facilitar a migração futura.

// ANTES (assembly)
assembly { let success := staticcall(gas(), 0x1, ptr, 0x80, ptr, 0x20) }
// DEPOIS (biblioteca — fácil de substituir)
address signer = ECDSA.recover(hash, v, r, s);
2. Seguir caminho ecrecover()

Aplique a migração ERC-4337 ML-DSA do padrão ecrecover() acima.

Oráculo Chainlink (DON secp256k1)Longo prazo — depende da Chainlink
1. Monitorar roadmap Chainlink

A migração do DON da Chainlink está fora do seu controle. Nenhuma interface PQC existe hoje.

2. Circuit breaker

Faça deploy de um circuit breaker que possa congelar atualizações de preço se o oráculo for comprometido.

modifier oracleNotFrozen() {
  require(!oracleFrozen, "Oráculo congelado: risco quântico ativo");
  _;
}
3. Multi-oráculo

Use mediana de múltiplos oráculos (Chainlink + Pyth + UMA) para limitar o impacto.

ERC-2612 permit() aprovações sem gasCurto prazo
1. Adicionar desativação de emergência

Adicione função guardian para desabilitar permit() se a ameaça quântica se tornar real.

bool public permitEnabled = true;
function setPermitEnabled(bool enabled) external onlyOwner {
  permitEnabled = enabled;
}
function permit(...) public override {
  require(permitEnabled, "permit() desabilitado: migração PQC em andamento");
  super.permit(...);
}
2. Migrar para ERC-4337 permit

Substitua ERC-2612 por uma user operation ERC-4337 com assinatura ML-DSA.

Gnosis Safe / MultiSig N-de-M ECDSAMédio prazo
1. Plano de rotação de chaves

Documente todos os signatários atuais. Planeje rotação para chaves PQC.

2. Módulo Safe PQC

Faça deploy de um módulo Safe personalizado que verifique assinaturas ML-DSA como tipo de signatário 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);
  }
}
3. Monitorar Safe{Wallet}

O time do Safe conhece a necessidade de migração PQC. Monitore github.com/safe-global/safe-contracts.

Ferramentas PQC para desenvolvedores Solidity

EIPs para monitorar

Final
EIP-4337

Account Abstraction — habilita validadores PQC personalizados. Live na mainnet.

Final
EIP-7702

Set EOA code — migração de chaves PQC em carteiras normais. Incluído no Pectra.

Draft
BIP-360

QuBit — P2QRH para Bitcoin. Referência para o paralelo no Ethereum.

Escaneia seus contratos agora

Obtenha o relatório completo antes de iniciar sua migração. Grátis, open-source, sem conta.

← Voltar ao início