Skip to content

criptografia externa

mobius1qwe edited this page Oct 29, 2026 · 5 revisions

Criptografia ponto a ponto (AES)

Home > Criptografia ponto a ponto

Vale para a 1.1 em diante · Nível: intermediário

Em uma frase: além do HTTPS, o cliente e o servidor RAL podem cifrar o corpo dos pedidos e respostas com AES e uma chave que só os dois conhecem.

Quando usar: quando o corpo passa por intermediários que abrem o HTTPS (proxy, balanceador, nginx) e você não quer que eles leiam os dados. Para o resto, o HTTPS basta.

Ligar

A mesma chave dos dois lados.

Lado Até a 1.2 A partir da 2.0 🚧
Servidor Servidor.CriptoOptions.CriptType := crAES256; e CriptoOptions.Key := 'chave' plugin TRALCriptoPlugin, Key := 'chave' (Plugins)
Cliente Cliente.CriptoOptions.CriptType := crAES256; e Cliente.CriptoOptions.Key := 'chave' igual

Tipos: crAES128, crAES192, crAES256 (CBC, padding PKCS#7). O servidor responde no tipo que o cliente aceitar.

Chave derivada (PBKDF2) 1.2

Com uma chave curta, ligue nos dois lados (é global do programa):

RALCriptoKeyDerivation := rkdPBKDF2; // unit RALCriptoAES

Cada tentativa de adivinhar a chave passa a custar 100 mil cálculos em vez de um. Se só um lado ligar, nada é lido (erro de integridade).

Como trafega (para quem implementa em outra linguagem)

Dois cabeçalhos próprios do RAL (a grafia "Encription" é a do protocolo; não "corrija"):

Cabeçalho Significa Valores
Content-Encription como este corpo foi cifrado aes128cbc_pkcs7, aes192cbc_pkcs7, aes256cbc_pkcs7
Accept-Encription o que quem envia aceita receber os mesmos, separados por vírgula

Pedido:

POST /teste/dados HTTP/1.1
Content-Type: application/json
Content-Encoding: gzip
Content-Encription: aes128cbc_pkcs7
Accept-Encription: aes128cbc_pkcs7, aes192cbc_pkcs7, aes256cbc_pkcs7

<corpo comprimido e depois cifrado>

Com compressão, primeiro comprime, depois cifra (dado cifrado não comprime).

O corpo cifrado (desde a 1.1) é: IV aleatório de 16 bytes + texto cifrado (AES CBC, PKCS#7) + HMAC-SHA256 de 32 bytes sobre IV + texto cifrado. A chave do HMAC é SHA-256(chave + 'ral-mac'). O HMAC é conferido antes de decifrar: chave errada ou corpo alterado dá erro, nunca lixo.

Warning

A 1.0 cifrava de outro jeito. Cliente 1.0 e servidor 1.1+ (ou o contrário) não se entendem: atualize os dois juntos.

Erros comuns

O que acontece Causa O que fazer
Encrypted data failed integrity check: wrong key or altered content. chave diferente, ou PBKDF2 ligado só de um lado mesma chave e mesma configuração nos dois
o servidor recebe lixo o servidor não tem a chave (na 2.0: falta o TRALCriptoPlugin) configure o servidor
Key must be provided. chave vazia preencha Key

Veja também

Clone this wiki locally