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 || tagem 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
Validador de Base32hex
Valida codificação Base32hex (RFC 4648, alfabeto 0-9 e A-V). Comum em sistemas que precisam preservar ordenação.
Validador de Cor Hexadecimal
Valide cores hex no formato #RGB, #RGBA, #RRGGBB ou #RRGGBBAA e converta entre eles. Tudo no navegador.
Validador de Base32 Hex
Verifica se uma string usa apenas o alfabeto Base32-Hex (0-9, A-V). Variante usada em DNS e padrão RFC 4648.