Garantias de segurança e cobertura de conformidade¶
Tradução informativa da versão em inglês, atualizada em 02/11/2026. Em caso de divergência, prevalece a versão em inglês. Identificadores, comandos e blocos de código são preservados sem tradução.
Este mapa informativo relaciona os requisitos normativos aos testes executáveis do repositório. Não é um novo perfil, uma certificação, uma alegação de que todas as entradas foram testadas ou evidência de aprovação de uma implantação específica. Um resultado se aplica à implementação, entradas, política, instante de verificação e versão da ferramenta exatos registrados naquela execução.
A lista de verificação, o perfil de canonicalização e o perfil de admissão continuam sendo a autoridade. Tanto uma implementação de referência quanto o kit de testes podem conter defeitos. Resolva divergências com base na especificação e em um caso reproduzível; o acordo entre implementações não determina a correção.
O significado das garantias¶
| Camada | O que suas verificações demonstram | O que não demonstram |
|---|---|---|
| Esquema | A entrada tem a estrutura e os valores permitidos | Assinaturas válidas, declarações honestas, identidade do principal ou autorização |
| Verificação criptográfica | As assinaturas, hashes e relações verificados satisfazem as regras aplicáveis às chaves, política e instante fornecidos | Que o principal nomeado seja confiável, que um evento registrado tenha ocorrido ou que uma ferramenta possa ser executada |
| Confiança no principal | Os componentes verificados da assinatura do principal correspondem ao conjunto de confiança fornecido fora de banda pelo operador | Identidade além daquela fonte de confiança ou permissão para realizar uma ação |
Admissão strict-v1 |
Verificação, confiança no principal, restrições assinadas de audiência e sessão e estado de revogação suficientemente recente satisfazem o perfil | Uso único, revogações posteriores ao snapshot ou autorização de ações |
| Aplicação pelo adaptador | A integração aplica a decisão de admissão do operador antes de seu handler protegido | Uma propriedade fornecida pelo protocolo central ou demonstrada pelo kit externo de conformidade |
action_authorized permanece false. Um registro verificado ou admitido de uma ação bloqueada ou escalada é evidência daquela decisão registrada, não permissão para executá-la. A vinculação de sessão impede a combinação de sessões inconsistentes; não consome o bundle nem o torna de uso único.
Como ler as evidências¶
O README do kit define comandos, contratos, campos do relatório e códigos de saída. Suas superfícies são distintas:
- Referência:
tools/conformance.jschama helpers de referência elib/verify.js; este último valida esquemas V2 e delega a verificação criptográfica ao TypeScript. - Primitivas externas: o contrato
/1exercita canonicalização e resumos criptográficos por meio de uma implementação fornecida. - Evidências externas: o contrato
/2exercita raízes Merkle, assinaturas compostas e verificação de bundles V2. O repositório fornece wrappers TypeScript, Python, Go, Rust e WASM. - Admissão externa: o contrato
/3exercita admissão combinada e carregamento de configuração. O repositório fornece wrappers TypeScript, Python, Go e Rust; WASM não tem API de admissão. - Suítes de SDKs e adaptadores: são testes separados, com seus próprios pontos de entrada e escopos. Um item no inventário do kit não é um teste executado pelo kit.
Os contratos numerados são interfaces do executor, não versões do protocolo DCP. A identidade do wrapper é autodeclarada. Cinco wrappers não são cinco adotantes externos independentes: WASM compartilha código com Rust, e todos esses wrappers pertencem ao repositório.
Um resultado negativo só é útil com um controle positivo que funcione. Alterar conteúdo assinado sem atualizar a assinatura pode provocar falha por vários motivos. Uma etiqueta spec_step ou uma mensagem de erro correspondente não prova, por si só, qual verificação causou a rejeição. Pares válidos e inválidos que isolam uma regra oferecem evidências mais fortes que bundles rejeitados construídos separadamente e com apenas um controle positivo da suíte.
Mapa de verificação V2¶
Os nomes abaixo se referem aos vetores de bundles. M, R e A significam must_reject, must_reject_bundles e must_accept_bundles; os IDs externos têm o prefixo external.v2.bundle_vectors., seguido de must_reject, must_reject_bundles ou must_accept, respectivamente, e depois do nome do caso. signed_bundle é o positivo base. São amostras selecionadas e rastreáveis, não uma lista exaustiva ou classificação de completude.
| Regra normativa | Casos ou suíte existentes selecionados | Escopo e limites restantes |
|---|---|---|
| V2-1: selecionar a versão | M dcp_bundle_version_1_0, dcp_bundle_version_3_0 |
Rejeição no ponto de entrada V2; não exercita todos os requisitos V1 |
| V2-2: validar esquemas do envelope e dos artefatos | Referência v2.signed_bundle.schema_invalid_payload_rejected; suítes de esquemas; o catálogo opcional de validação de esquemas (57 casos) |
Os verificadores dos SDKs na main executam a V2-2 por conta própria; as versões publicadas dos SDKs não. Veja o limite abaixo |
| V2-3: manifesto, hashes de payload e vinculação da auditoria | M intent_payload_hash_wrong, audit_entries_truncated; R manifest_intent_hash_mismatch, audit_chain_hash_wrong; A empty_audit_trail |
Amostras de vinculação de hashes e cadeia; não cobertura isolada de cada campo e forma malformada |
| V2-4: sessão, tempo e consistência de metadados não assinados | R intent_session_nonce_differs, session_expired_with_offset, session_longer_than_policy_max_with_late_created_at; M signature_signer_id_other; A session_duration_at_millisecond_precision |
Testes com instante fixo; distinguir política solicitada e modo efetivo |
| V2-5: estrutura de assinaturas e codificação canônica | M bundle_classical_sig_b64_with_trailing_bits, intent_classical_sig_b64_unpadded; R classical_only_bundle_signature_without_pq |
As amostras de codificação não cobrem todas as posições de assinatura nem combinações de defeitos |
| V2-6: o principal assina o manifesto | R bundle_signed_by_agent_keys; referência v2.signed_bundle.forged_classical_signature_rejected |
Amostras de assinaturas e vinculação de papéis; não estabelecem confiança em um principal autodeclarado |
| V2-7: verificar assinaturas PQ presentes | M bundle_pq_signature_invalid, bundle_pq_slot_holds_ed25519 |
O catálogo histórico de evidências as exercita com sua política selecionada; alegar todos os modos efetivos exige controles correspondentes |
| V2-8: verificar cada artefato com seu contexto e papel de signatário | M rpr_classical_signature_invalid, intent_signed_by_principal, policy_decision_signed_under_intent_context |
Amostras de artefatos e papéis; não todas as combinações de componente, contexto e chave |
| V2-9: derivar o nível sem permitir que uma declaração o reduza | R classical_only_intent_action_type_constructor, classical_only_intent_security_tier_constructor |
Amostras de veredictos; a operação externa de bundle não avalia o nível resolvido informado |
| V2-10: exigir modo efetivo e política de algoritmos | R classical_only_payment_from_low_risk_passport; classical_only_routine em quatro modos |
Amostras de modos; o catálogo histórico de evidências não tem matriz específica de listas de algoritmos permitidos e advisories |
| V2-11: verificar campos secundários presentes | external.v2.secondary_sha3, dos vetores secundários |
Controles positivos e campos malformados ou divergentes; vínculos ausentes são opcionais, portanto aceitação não implica cadeia secundária completa |
| V2-12: vincular e verificar checkpoints | A pq_checkpoint_over_the_trail; R pq_checkpoint_listed_but_missing, pq_checkpoint_event_range_count_wrong, pq_checkpoint_pq_signature_invalid |
Amostras de pertinência, intervalo e assinaturas; não todas as combinações de intervalos ou componentes malformados |
| V2-13: derivar IDs de chave e exigir sua validade | R passport_key_kid_not_derived, passport_key_public_key_with_trailing_bits, rpr_binding_key_revoked |
Amostras de chave, codificação e estado; não cobertura exaustiva de políticas de chaves |
| V2-14: consistência entre artefatos | R passport_principal_binding_reference_other, audit_entry_policy_decision_other; A blocked_action_recorded, escalated_action_recorded |
Consistência das evidências é distinta de permissão para agir |
As expectativas do corpus devem ser interpretadas com a política declarada, os ajustes por caso e o instante de verificação. Um bundle híbrido positivo pode ser verificado sob pq_only; conter os bytes clássicos necessários à vinculação não o torna um controle negativo. Uma política solicitada classical_only pode resultar em um modo efetivo mais rigoroso devido ao nível da ação.
Limite entre esquema e API criptográfica¶
V2-2 exige validação de esquemas. Na main, os verificadores V2 dos SDKs TypeScript, Python, Go, Rust e WASM a executam por conta própria: verifySignedBundleV2 e seus equivalentes, a API combinada de admissão, que verifica primeiro, e o verificador experimental do candidato; avaliar a admissão a partir de um resultado de verificação anterior não a executa de novo. As versões publicadas dos SDKs não a incluem. A barreira valida o envelope do bundle assinado e os quatro payloads (responsible_principal_record, agent_passport, intent, policy_decision) contra schemas/v2. Ela roda depois das verificações de política e de relógio do verificador, e antes de o verificador conferir o manifesto, os hashes dos payloads, as chaves e as assinaturas. Todos os SDKs interpretam a mesma representação gerada a partir de schemas/v2 (tools/schema-ir/); a CI a regenera e compara as cópias.
- Objetos fechados e abertos. Um membro desconhecido de um objeto fechado (
additionalProperties: false, por exemplo o envelope,SignedPayload,composite_sig, as entradas de auditoria e os checkpoints) é rejeitado mesmo quando hashes e assinaturas continuam válidos. Em um objeto aberto, como otargetdo intent ou aevidencede auditoria, os membros declarados mantêm suas restrições (target.channel, por exemplo, é obrigatório e enumerado); apenas os membros adicionais que o esquema não descreve deixam de ser inspecionados nesta camada, e os que estão sob um compromisso podem chegar à canonicalização. Um membro adicional do próprio objetobundleé aceito: o esquema deixabundleaberto, o membro não está sob nenhum compromisso (ao contrário dos artefatos assinados e do manifesto que o bundle contém) e nenhuma verificação posterior o lê. - Ausente e
null. São rejeitados tanto um membro obrigatório ausente quanto umnullonde o esquema espera outro tipo, com diagnósticos diferentes (required,type).session_issued_atesession_expires_atdo manifesto devem ser strings quando presentes:nullé rejeitado. - Diagnósticos. Uma falha de esquema retorna
verified: falsecom erros da formaschema: <JSON pointer> <keyword>[ <member>], no máximo 16 seguidos deschema: further errors not listed, nunca com valores da entrada e sem detalhes criptográficos. Uma rejeição que antes era relatada por uma verificação mais profunda pode agora trazer um diagnóstico de esquema; uma falha de esquema não mostra que a verificação profunda foi executada. - Sobreposição do candidato. Na rota experimental
dcp-jcs-v2, que quem chama seleciona explicitamente, a única diferença é ocanonicalization_profiledo manifesto, que deve serdcp-jcs-v2. O perfil padrão e os bytes assinados não mudam. date-time. A verificação de formato é a que o verificador de referência aplica, ajv-formats 3.0.1 no modo full, com suas particularidades: qualquer espaço em branco ECMAScript outcomo separador, offsets+hhe+hhmm, e um segundo 60 quando o horário deslocado pelo seu offset é 23:59. É uma fronteira de compatibilidade da camada de esquema, não RFC 3339 estrito. Os parsers temporais de V2-4, V2-13 e V2-14 continuam sendo uma camada separada e posterior, e ainda podem rejeitar um horário que o esquema aceita.- Os parsers vêm primeiro. O que um parser JSON recusa nunca chega à V2-2. O Go relata uma raiz que não é um objeto com seu erro de parsing histórico; a API do Rust recebe um
serde_json::Valuejá parseado, então as recusas do serde_json (um surrogate isolado,1e400) cabem a quem chama; o binding WASM mantém antes da V2-2 seu erro de parsing da política,JSON parse errore a detecção de versão. - Mudança de aceitação. Bundles inválidos pelo esquema que os verificadores dos SDKs aceitavam antes agora retornam
verified: false. Nenhuma API só de esquema é adicionada, e nenhum esquema ou perfil muda.
Quem alegar cumprir toda a lista V2 precisa contemplar V2-2 e as verificações criptográficas. Não enfraqueça o esquema nem descreva uma API parcial como uma validação completa para fazer um teste passar. O kit relata essas camadas separadamente.
Membros desconhecidos não são universalmente proibidos. Alguns objetos do esquema são abertos. A aceitação pelo esquema de uma extensão em um objeto assinado não preserva a assinatura antiga: hashes e assinaturas devem ser recalculados quando o conteúdo assinado muda. Nenhum novo mecanismo de extensões obrigatórias é definido aqui.
O catálogo de validação de esquemas, de uso explícito, executa 57 casos assinados em uma implementação: 13 positivos e 44 negativos, cada um contado apenas quando o caso base é verificado na mesma execução. A CI o executa com os cinco wrappers de SDK. O catálogo diagnóstico de esquemas, de uso explícito, mantém 15 casos de fechamento: a base e as extensões permitidas são controles positivos; extensões de objetos fechados e valores fora de uma enumeração preservam a rejeição normativa. Um caso SDK com falha continua sendo uma falha, e passar em qualquer um dos dois catálogos cobre apenas os seus casos. O relatório separado de tools/conformance/schema-boundary.js distingue validação de esquemas, integridade do corpus finito e composição de esquema com SDK no instante do corpus. Essa composição não comprova que o SDK sozinho implemente V2-2, e o helper de integridade não é um verificador normativo geral.
Amostras de política do verificador¶
O catálogo de políticas, de seleção explícita, acrescenta 74 casos pelo contrato /2 existente: 10 controles positivos, 24 casos de PQ presente inválida, 14 casos de listas de algoritmos e advisories e 26 casos de tier já versionados. Cada solicitação leva sua política e seu instante de verificação exatos. O catálogo de evidências padrão permanece inalterado.
O novo controle híbrido de tier routine exercita classical_only efetivo e os outros três modos. O controle híbrido de tier standard eleva uma solicitação classical_only a hybrid_preferred. O corpus registra essa derivação; /2 avalia o veredicto, não o tier nem o modo efetivo informado pela implementação.
Os negativos PQ alteram somente a assinatura PQ do bundle, passaporte ou checkpoint; o componente clássico continua válido. Os casos de listas mantêm o mesmo bundle e alteram apenas a política. Os casos de tier reutilizam bundles versionados assinados separadamente e um controle routine sob o mesmo modo solicitado: não são pares de alteração única. Cada negativo exige que seu controle positivo passe na mesma execução.
As exclusões de algoritmos clássicos sob pq_only continuam omitidas até esclarecer sua interpretação, sem veredicto esperado. O corpus registra casos adiados e questões de interpretação; uma combinação não testada não demonstra, por si só, uma contradição na especificação. Essas amostras não fecham a lacuna de esquemas nem estabelecem conformidade V2 completa.
Amostras estruturais¶
O catálogo estrutural, de seleção explícita, acrescenta 16 casos por meio de /2: dois controles positivos e 14 negativos sobre codificação de assinaturas, componentes e intervalos de checkpoints, compromissos do manifesto, um payload com fração, ordem temporal da sessão e uma assinatura clássica do bundle invalidada com sua assinatura PQ recalculada corretamente. O modo efetivo é hybrid_preferred; esses negativos clássicos não fazem afirmações sobre pq_only.
Os quatro casos de codificação preservam os bytes decodificados da assinatura. Os intervalos dos checkpoints usam posições reais da trilha, com identificadores deliberadamente fora de ordem. As mutações do manifesto são assinadas novamente. A sessão invertida tem um gêmeo positivo separado dentro da tolerância do relógio. Cada negativo exige que seus controles passem na mesma execução.
O isolamento tem limites explícitos: uma fração não tem representação dcp-jcs-v1, portanto seus hashes e assinaturas anteriores ficam obsoletos; um intervalo invertido não tem raiz válida para esse intervalo. As verificações dos componentes documentam os defeitos previstos, mas não identificam qual verificação do SDK causou a rejeição. Essas amostras não fecham a lacuna dos esquemas nem provam conformidade completa.
Mapa de admissão¶
Os vetores compartilhados de admissão e o catálogo externo de admissão exercitam os grupos abaixo pela API de admissão combinada e pelos carregadores de configuração. Leia a rule, as entradas e os campos esperados exatos de cada caso; o nome do grupo não prova cobertura exaustiva.
| Requisito | Superfície exercitada | Limite |
|---|---|---|
| T1–T2: principal e chaves dos componentes ancorados na confiança do operador | external.admission.outcomes |
A confiança é fornecida fora de banda; o kit não estabelece uma identidade do mundo real |
| P1–P4: V2, audiência assinada, janela de sessão assinada e assinaturas híbridas do principal | Resultados e casos compostos | Verificações estruturais e verificadas são diferentes; nem todas as combinações de valores malformados são enumeradas |
| R1–R5: disponibilidade, forma e idade dos snapshots, e estado do sujeito | Resultados | Um snapshot recente não comprova eventos de revogação posteriores ao seu checked_at |
| Configuração: rejeitar campos desconhecidos, confiança malformada e enfraquecimento do perfil | external.admission.config |
Casos com vários defeitos podem permitir mais de um erro normativo; a redação incidental da mensagem não é a regra |
| Procedimento combinado e resultado | Resultados e casos compostos | Avaliam-se action_authorized:false, decisões registradas e resultados de confiança e perfil; a saída completa de signer_keys não é comparada diretamente |
| A1–A3: handler protegido, configuração do operador, fontes, tenant e cache | Testes separados de adaptadores | Fora deste kit externo; um resultado SDK não comprova a aplicação das regras pela integração |
Um avaliador que aceita um resultado de verificação pré-calculado confia que seu chamador fornece o resultado para o mesmo bundle, política e instante. A operação externa de admissão usa a API combinada. Um teste combinado aprovado não torna seguro qualquer objeto de verificação fornecido por um chamador.
Alegações sobre o núcleo e os perfis¶
| Superfície | O que pode ser relatado a partir do kit | O que deve permanecer separado |
|---|---|---|
| Representação de dados do núcleo | Bytes canônicos e resumos dcp-jcs-v1 exatos que foram testados |
Entradas não testadas e o candidato experimental |
| Verificação de evidências V2 | Resultados dos casos selecionados de bundle, Merkle e assinaturas | Conformidade V2 completa, especialmente cobertura de esquemas, salvo comprovação separada |
| Primitivas criptográficas | Separação de domínios, verificação de componentes e vinculação testadas | Política do verificador, confiança no principal e admissão |
Admissão strict-v1 |
Resultados dos casos selecionados de admissão e configuração | Aplicação das regras na implantação e autorização de ações |
| V1 | Verificações de esquema e integridade de referência sobre fixtures versionados | Conformidade V1 independente de terceiros |
| A2A e governança | Somente as regras específicas exercitadas por uma suíte identificada | Conformidade funcional completa de qualquer um dos perfis |
| DCP-05 a DCP-09 | As verificações declaradas das suítes internas de esquemas e intercâmbio | Semântica completa de ciclo de vida, direitos ou delegação |
dcp-jcs-v2 experimental |
Seus testes experimentais selecionados separadamente | Status normativo ou padrão; dcp-jcs-v1 permanece inalterado |
O resultado de um subconjunto deve identificá-lo e explicar seus limites. Não transforme unsupported, um caso ausente, uma queda, um timeout ou uma matriz ignorada em um caso aprovado. Um teste SDK reservado que retorna sem executar sua matriz não comprova que a matriz foi executada.
Validação adicional¶
O guia do implementador descreve como reproduzir e relatar resultados de forma independente. Implementação externa e revisão independente de segurança são marcos adicionais; os testes deste repositório não os substituem.
As medições de desempenho usam seu próprio executor documentado. Medir o tempo de ponta a ponta não atribui custo a uma primitiva criptográfica nem comprova a ausência de saídas antecipadas. Otimize somente após medir um custo específico, preservando as decisões de verificação e a compatibilidade.