Resumo
- Na RFC 2040, RC5 só identifica uma transformação interoperável quando
W,R,b, bytes da chave, modo, IV e tratamento final estão todos definidos. - Código, ASN.1 e vetores comprovam concordância em entradas específicas; não comprovam segurança, aleatoriedade, IV único, apagamento efetivo de memória, integração ou uso em produção.
Publicada em outubro de 1996 por Robert Baldwin e Ronald Rivest, a RFC 2040 descreveu quatro construções em detalhe suficiente para interoperabilidade: RC5, RC5-CBC, RC5-CBC-Pad e RC5-CTS. O enquadramento é essencial. O registro do RFC Editor a classifica como Informational e afirma que ela não especifica um padrão da Internet.
O texto também se apresenta como reformulação de material publicado anteriormente. A contribuição que importa aqui não é reivindicar a origem do RC5, mas registrar tudo que duas implementações precisam compartilhar para produzir os mesmos bytes.
Uma tupla, não apenas um nome
W representa o tamanho da palavra. O bloco B tem duas palavras, e BB expressa esse tamanho em bytes. R é o número de rodadas. b é o comprimento da chave do usuário e K são seus bytes reais. A expansão produz S, com T = 2(R+1) palavras. O CBC ainda depende de um vetor de inicialização I do tamanho de um bloco.
Dois programas podem declarar RC5 e executar máquinas diferentes. Basta divergirem em W, R, comprimento ou ordem dos bytes da chave, modo, IV ou regra final. Até uma coincidência de W/R/b permanece incompleta sem a chave efetivamente ligada ao objeto.
A expansão evidencia essa dependência. Os bytes de K entram em palavras little-endian, S é inicializada por constantes vinculadas a W, e os dois espaços são misturados durante três vezes o maior de seus comprimentos. O exemplo em C fixa um bloco de 64 bits. Seu resultado valida esse caminho específico, não todas as parametrizações da família.
O objeto torna o estado observável
A apresentação separa objetos de chave e de cifra. O objeto CBC guarda a opção de preenchimento, as rodadas, a chave expandida, o IV original, o bloco corrente de encadeamento, um bloco parcial de entrada e seu índice.
Encrypt_Init liga e expande a chave e recupera o encadeamento a partir do IV. SetIV preserva a chave expandida, mas troca o IV e reinicia corrente e buffer. Update recebe partes sucessivas da mensagem, segura a sobra, emite apenas blocos inteiros, combina cada bloco por XOR com a corrente e transforma o resultado na corrente seguinte.
É Final que resolve o significado da sobra. No CBC comum, bytes residuais causam erro. No CBC-Pad, a função sempre cria um bloco final e acrescenta de um a BB bytes, cada qual com o valor da quantidade adicionada. Uma mensagem já alinhada recebe um bloco inteiro de preenchimento. Finalizar faz parte da identidade da cifra.
Três modos se separam no fim
O CBC comum exige múltiplos do bloco. CBC-Pad aceita outros comprimentos aumentando a saída. CTS preserva o comprimento, mas rearranja as duas últimas porções. Primeiro cifra o penúltimo bloco encadeado; usa o prefixo necessário do intermediário como fragmento cifrado final; completa a última porção clara com zeros, combina-a com o intermediário e cifra novamente para gerar o bloco completo que será emitido antes do fragmento roubado.
Por isso CTS requer que o objeto retenha até dois blocos até Final. Antes desse momento, ele não sabe qual bloco completo é realmente o penúltimo nem quantos bytes irão para a ponta curta.
Os errata verificados completam a leitura executável. O Errata 513 restringe CTS a textos maiores que um bloco. O 514 manda usar o IV quando não há bloco cifrado anterior. O 587 restaura no procedimento de decifragem um XOR omitido e a mesma regra do IV. Uma implementação fiel apenas à versão não corrigida pode divergir justamente nos casos de fronteira.
O alcance real dos vetores
A seção 9 diz que o programa e os resultados ajudam a confirmar a correção de uma implementação. O programa usa blocos de oito bytes e lê sinal de preenchimento, rodadas, bytes da chave, IV de oito bytes e texto claro.
Uma saída igual é evidência concreta de acordo, para aquela tupla, no carregamento e expansão da chave, transformação de bloco, encadeamento e finalização. Uma saída diferente prova uma ruptura de acordo, mas não diagnostica sozinha o componente responsável.
Os resultados publicados cobrem CBC e CBC-Pad, não CTS. Tampouco observam geração de chave e IV, unicidade do IV, margem criptográfica, uso correto da interface, comportamento de compilador, apagamento de memória, transporte de parâmetros ou implantação. Um teste determinístico não pode responder a perguntas que não recebeu como entrada.
ASN.1 carrega uma identidade parcial
A seção 11 atribui arcos numéricos terminados em 8 e 9 a CBC e CBC-Pad. A sequência de parâmetros contém versão, rodadas, tamanho de bloco e IV opcional. Sem IV, a regra histórica usa um bloco de zeros do tamanho indicado. O Errata 6380 corrige nomes, capitalização e sintaxe de restrições do ASN.1, sem acrescentar campos.
b, bytes da chave e chave expandida ficam fora; CTS não recebe identificador nessa seção. O OID decide uma parte do contrato de interpretação, não todo o contexto executável. Um IV zero por regra de ausência mostra como ler a codificação, não que um sistema real tenha produzido IVs aleatórios ou únicos.
Intenção no código não é efeito observado
As funções de destruição escrevem zeros nas estruturas antes de liberá-las. Isso prova uma instrução no código-fonte. Não prova que o compilador manteve as escritas, que o alocador não guardou cópias ou que o processo apagou todo dado sensível. As passagens de 1996 sobre segurança e patentes também registram uma época; não são parecer atual.
Lida na escala correta, a RFC 2040 é um forte artefato de coordenação. Ela enumera decisões que precisam convergir. O erro começa quando concordância de bytes é promovida a evidência de segurança, operação correta ou adoção.
Fontes
Briefing para membros
Contexto aprofundado do perfil
Faça login com o nível de assinatura correto para desbloquear o briefing completo e as notas das fontes.
Apenas para Strategic Circle
Strategic Circle
Aberto a todos os leitores. Desbloqueie Briefings de perfil após se inscrever e fazer login.
Junte-se ao Strategic CircleSomente para Leadership Alliance
Leadership Alliance
Para proprietários e gestores qualificados de ativos de PI; faça login para desbloquear os briefings da Leadership Alliance.
Junte-se ao Leadership Alliance

