Preparar o ensaio e prever o resultado criptográfico
O laboratório original acompanha esta aula em content/labs/cissp-architecture-contracts/run.mjs. Executa-o num ambiente de desenvolvimento com Node e autorização para abrir portas locais efémeras. Usa um caminho de saída novo, por exemplo node content/labs/cissp-architecture-contracts/run.mjs /tmp/cissp-boundaries-my-run.json, para não substituir os registos publicados. Não utiliza credenciais, ficheiros de produção ou serviços externos. O processo cria chaves aleatórias em memória e dois servidores em 127.0.0.1; uma restrição de sandbox pode impedir a abertura dos sockets e deve ser relatada, sem apresentar essa tentativa como sucesso. Antes de executar, prevê quatro resultados: mensagem intacta aceite, ciphertext alterado recusado, contexto associado diferente recusado e envelope intacto repetido novamente aceite. Depois prevê o caso deliberadamente incorreto de duas mensagens sob o mesmo par chave/nonce. A biblioteca pode aceitar ambas; isso não torna o uso seguro. Compara a relação XOR observada com a previsão e distingue recuperação do outro texto sintético de recuperação da chave. Esta preparação obriga a formular uma propriedade antes de olhar para um resultado verde. As duas execuções guardadas usaram Node 25.8.0, OpenSSL 3.5.5 e macOS arm64; outras versões precisam de registar a sua própria observação.
Inspecionar contexto, etiqueta e efeitos antes da validação
Lê o contrato do wrapper antes de interpretar as verificações: chave AES de 256 bits, nonce de 12 bytes e etiqueta de 16 bytes para esta fixture. A recusa de uma etiqueta curta mostra cumprimento desse perfil local. Não demonstra que todo o software ou todo o uso de GCM tenha exatamente o mesmo formato. O ensaio altera separadamente ciphertext, etiqueta, chave e AAD. Cada mutação deve provocar uma recusa no ponto correspondente, mantendo um controlo positivo com a mensagem original. O wrapper guarda os bytes provisórios produzidos por update() e só os devolve depois de final() ter validado a autenticação. Quando a etiqueta falha, o contador de bytes libertados continua em zero. Esta observação é mais útil do que mostrar apenas uma exceção, pois o consumidor não recebeu dados antes do erro. Em seguida, compara dois pares de contexto que uma concatenação ingénua transforma na mesma cadeia. A representação de tuplo utilizada na fixture distingue-os, mas uma integração real precisa de acordar normalização, tipos e evolução do formato. Por fim, repete um envelope intacto. A autenticação aceite mostra precisamente por que motivo unicidade de execução é um contrato da aplicação que este decifrador não implementa.
Observar o destino, não apenas o erro do cliente
Os servidores A e B são criados pelo próprio ensaio em portas efémeras diferentes. O primeiro pedido permitido chega a A e devolve conteúdo. Uma redireção relativa dentro da origem aprovada também termina. Depois, A responde com uma redireção para B quando só A está autorizado. O cliente recusa o salto e o contador de B continua em zero naquele ponto. Mais tarde, B é autorizado separadamente para testar identidade de cache; por isso, encontrar pedidos a B no relatório completo não contradiz a recusa anterior. Interpreta a observação no instante e no âmbito do respetivo teste. A fixture também recusa userinfo, fragmentos, esquemas não admitidos e portas não aprovadas, e interrompe um ciclo de redireções no limite definido. Estas condições são escolhas do contrato local. Um resultado verde não prova que todos os URLs possíveis foram analisados nem que uma biblioteca externa partilha as mesmas regras. Não existe resolução DNS, encaminhamento por proxy empresarial ou TLS neste exercício. Para uma entrega APS, transforma os resultados numa lista de condições a reproduzir na integração: destino autorizado funcional, destino proibido sem receção, redireções revistas e limites observáveis. Guarda tanto o oráculo positivo como o negativo.
Relacionar reutilização com pedidos reais à origem
A cache do ensaio é uma estrutura em memória escrita para ensino, mas os pedidos às origens são HTTP real em loopback. Ao repetir uma resposta pública elegível, o número de pedidos à origem não aumenta. Ao mudar a origem, o parâmetro de seleção de fundo ou o idioma, a fixture mantém representações separadas. Não usa o tamanho do corpo como identidade. Para private e no-store, verifica que novos acessos voltam à origem, segundo a política de cache partilhada implementada. O caso no-cache guarda a resposta inicial, mas envia efetivamente If-None-Match antes de a reutilizar. O relatório regista o cabeçalho condicional recebido pela origem. Uma resposta 304 permite devolver o corpo correspondente guardado; quando a revisão da origem muda, a nova etiqueta acompanha um corpo novo. Assim, «há um ETag» e «houve validação» são observações distintas. Examina a sequência de pedidos em vez de inferir o comportamento apenas a partir do corpo final. Não foi implementado um motor completo de frescura, suporte geral de Vary, respostas 206 ou todas as regras de autenticação HTTP. A demonstração ensina a ligação entre evidência e decisão; não substitui um teste de conformidade de produto.
Interpretar a recusa de framing e os limites de recursos
O ensaio envia um pedido ambíguo apenas ao servidor local que criou, com Content-Length e Transfer-Encoding simultâneos. Na versão executada, o parser devolve HTTP/1.1 400 Bad Request, regista HPE_INVALID_TRANSFER_ENCODING e não entrega o pedido ao handler. O nome do erro faz parte da observação dessa versão, não de uma promessa de estabilidade universal da API. Uma tentativa inicial esperava outro código de parser e falhou; o teste foi corrigido após observar o resultado, mantendo a condição substantiva de recusa antes do efeito. Outra verificação recebe efetivamente um corpo de 1024 bytes e recusa-o face ao limite local de 512 bytes. A unidade é bytes, não número de caracteres; Unicode pode tornar essas contagens diferentes. O limite do exemplo é editorial, não um valor recomendado para todos os serviços. Estes resultados não medem resistência a carga nem demonstram proteção completa contra negação de serviço. Ao reproduzir a ideia numa cadeia autorizada, inclui parsers de cada salto, persistência de ligações, transições CONNECT e um pedido legítimo que deve continuar a funcionar. Evita transformar uma mensagem de erro isolada em prova de que nenhum efeito ocorreu: observa o ponto onde a aplicação poderia produzir esse efeito.
Construir uma aceitação reproduzível e limitada
Cada uma das duas execuções guardadas passou 36 verificações. Esse número descreve o conjunto de condições exercitado, não a percentagem de segurança alcançada. O relatório identifica versões, plataforma, hash do script, observações, falha e limpeza. As chaves sintéticas não são escritas em ficheiros; no final, os buffers controlados são preenchidos com zeros, os servidores fecham e a cache é limpa. Isso não demonstra apagamento de todas as cópias possíveis na memória gerida pelo runtime. O ficheiro JSON de evidência continua a existir intencionalmente. Para utilizar a prática num projeto, prepara uma matriz com afirmação, condição inicial, resultado permitido, resultado proibido, observação e limite. Por exemplo, «não seguir redireção para B» precisa da recusa do cliente e da ausência de receção em B naquele ensaio, acompanhadas por um pedido permitido que funcione. Acrescenta responsáveis e execução pendente para DNS, TLS, produto de cache e cadeia de proxies reais. Repete a demonstração com estado novo antes de comparar os relatórios; não esperes hashes de ciphertext iguais, porque as chaves são aleatórias. Conserva falhas relevantes como evidência de aprendizagem. Revisão editorial e execuções locais ajudam a preparação, mas não são certificação, calibração psicométrica ou aceitação de produção.
node content/labs/cissp-architecture-contracts/run.mjs /tmp/cissp-boundaries-my-run.jsonDuas etiquetas GCM validam apesar da reutilização deliberada do nonce; uma redireção é recusada antes de B receber o pedido. São propriedades e observações distintas.
Armadilhas comuns
Contagem de checks como cobertura completa; etiqueta válida como ausência de replay; erro do cliente como ausência de efeito; laboratório HTTP como prova TLS.
Tópicos relacionados: Evidência criptográfica · Destinos e cache HTTP · Critérios de aceitação
Uma evidência é útil quando tem uma afirmação concreta e um limite explícito.
Referência: HTTP Semantics · CISSP outline effective April 15, 2024; current AI guidance consulted 2026-09-29