1001Ferramentas
🔒Validadores

Validador de IV de Cifra (Hex)

Valida o tamanho hex de um IV (Initialization Vector) para diferentes algoritmos: AES (16 bytes), DES (8 bytes), ChaCha20 (12 bytes).

O que e um IV e por que ele importa

Um Initialization Vector (IV) — tambem chamado nonce em cifras de fluxo — e o valor aleatorio ou unico que da comportamento probabilistico as cifras simetricas modernas. Sem ele, criptografar o mesmo texto com a mesma chave geraria sempre o mesmo ciphertext, vazando padroes. Padroes como AES-CBC, AES-GCM, AES-CTR e ChaCha20-Poly1305 exigem IV em toda criptografia e, na maioria deles, ele deve ser unico por chave durante a vida util da chave.

Este validador inspeciona um IV em hexadecimal: confere o alfabeto (0-9a-fA-F), conta bytes e informa se o tamanho bate com o algoritmo escolhido — 16 bytes (32 caracteres hex) para AES-CBC e bloco do AES, 12 bytes (24 hex) para AES-GCM e ChaCha20-Poly1305, 8 bytes (16 hex) para o legado DES/3DES.

Tamanho de IV por algoritmo

  • AES-CBC: IV de 128 bits = 16 bytes = 32 hex. Precisa ser imprevisivel (CSPRNG), nao so unico.
  • AES-GCM: IV recomendado de 96 bits (12 bytes = 24 hex). IVs maiores forcam derivacao via GHASH que reduz a margem de seguranca.
  • AES-CTR: tipicamente nonce de 96 bits + contador de 32 bits. O contador nao da volta dentro da mesma mensagem.
  • ChaCha20-Poly1305: nonce de 96 bits (12 bytes), mesma forma do GCM.
  • DES / 3DES-CBC: IV de 64 bits (8 bytes = 16 hex). So legado — ambas as cifras estao formalmente obsoletas.
  • XChaCha20-Poly1305: nonce de 192 bits (24 bytes = 48 hex), grande o bastante para gerar aleatorio com seguranca.

Por que reusar IV e catastrofico

Reusar IV com a mesma chave e uma das falhas criptograficas mais devastadoras. Em AES-CBC, pares (chave, IV) iguais revelam se dois textos compartilham prefixo. No AES-GCM as consequencias sao piores: um unico reuso vaza a chave de autenticacao H, permitindo ao atacante forjar mensagens, nao so decriptar. O desastre do ECDSA do PS3 da Sony (2010) e parente: reusar o numero aleatorio por mensagem revelou a chave de assinatura. Carteiras Bitcoin e implementacoes TLS ja sofreram o mesmo.

Como gerar IV corretamente

Sempre use um CSPRNG — gerador pseudo-aleatorio criptograficamente seguro — e nunca Math.random(), rand(), timestamp ou hash da senha. Idiomas de referencia:

// Node.js
const iv = require('crypto').randomBytes(12);

# Python
import secrets
iv = secrets.token_bytes(12)

// Go
iv := make([]byte, 12); _, _ = rand.Read(iv)

// Browser
const iv = crypto.getRandomValues(new Uint8Array(12));

Para chaves de vida longa que protegem muitas mensagens, prefira um contador deterministico ou o modo SIV (RFC 5297, AES-SIV), que sobrevive a reuso de nonce. A NIST SP 800-38D fixa os limites formais: com nonces aleatorios de 96 bits, no maximo 2^32 mensagens por chave antes de re-keying.

Hex, base64 e bytes brutos

O IV e apenas uma string de bytes; a codificacao e escolha de apresentacao. Hex e amigavel para log e debug (dobra o tamanho). Base64 e base64url sao comuns em JWT (campo iv do JWE), URLs e payloads de API (4 chars por 3 bytes). Bytes brutos aparecem em protocolos binarios (TLS records, Signal). A cifra em si nao se importa — so a camada de empacotamento. Um IV GCM de 12 bytes vira 24 hex, 16 base64 (com padding) ou 16 bytes na rede. O Banco Central, ao normatizar criptografia do PIX, exige formato bem definido por payload — geralmente hex em arquivos de homologacao e binario nas mensagens reais.

Anti-padroes comuns a evitar

  • IV hardcoded no codigo: const iv = "000102030405060708090a0b"; — visivel em qualquer decompilacao.
  • IV derivado da senha: colapsa para o mesmo valor sempre, quebrando o GCM.
  • Mesmo IV em todos os registros: classico em criptografia de campo de banco "para permitir busca". Destroi a confidencialidade.
  • Armazenar IV separado do ciphertext: convida a inconsistencias. O layout convencional e iv || ciphertext || tag em um unico blob.
  • AES-CBC sem MAC: abre porta para padding oracle. Sempre use criptografia autenticada (GCM, ChaCha20-Poly1305, AES-CBC + HMAC).

FAQ

Posso reusar IV com a mesma chave? Nunca — no AES-GCM um unico reuso destroi a autenticidade. Se precisa de criptografia deterministica, use AES-SIV (RFC 5297), que foi desenhado para isso.

CSPRNG e mesmo obrigatorio? Sim. Math.random() e rand() tem seed previsivel e podem ser replicados por quem observar algumas saidas. Use entropia do SO (/dev/urandom, BCryptGenRandom, SecRandomCopyBytes).

Qual tamanho ideal de IV no AES-GCM? Exatamente 96 bits (12 bytes). Qualquer outro tamanho aciona uma derivacao extra por GHASH que enfraquece a prova de seguranca. Os mesmos 96 bits valem para ChaCha20-Poly1305.

O IV precisa ser secreto? Nao. O IV e publico: viaja junto do ciphertext. Ele precisa ser unico (e, no CBC, imprevisivel), nao confidencial.

Por que a NIST desencoraja AES-CBC em sistemas novos? CBC nao tem autenticacao embutida e e vulneravel a padding oracle quando combinado ingenuamente com PCKS7. A orientacao atual aponta para AES-GCM, AES-GCM-SIV, ChaCha20-Poly1305 ou AES-OCB.

Ferramentas Relacionadas