
Implementação de referência de autenticação pós-quântica LR+ no contexto de CA WebPKI, com pipeline de corpus, reconstrução, avaliação e manifestos de proveniência para pesquisa reproduzível.
Este pacote contém a implementação de referência finalizada do LR+, wrappers de reconstrução de produção, testes e saídas de avaliação geradas para autenticação pós-quântica de contexto fechado sobre o contexto de CA WebPKI.
O pacote é intencionalmente escrito como um artefato de submissão, e não como um instantâneo de registro de pesquisa: nomes de alvos, nomes de arquivos, nomes de módulos e relatórios usam terminologia de implementação estável.
src/lrplus/ Módulos de referência LR+
scripts/ download de corpus, build, reconstrução, avaliação e verificações
config/ configuração fixada de reconstrução e download
results/ saídas de produção geradas usadas pelo artigo
audit/ relatório de proveniência e manifesto de hashes de saída
backups/ manifesto para o backup do corpus de entrada feito antes do rebuild
data/ccadb_full/ manifesto de download CCADB e hashes de arquivo
working_corpus/ manifesto de rebuild do corpus para o pacote compacto
tests/ testes de protocolo e consistência do artefato
O pacote compacto contém manifestos e resultados gerados. Uma regeneração totalmente nova requer acesso à internet e acesso ao pipeline existente do corpus WebPKI que fornece e .
scripts/normalize_ccadb.pyscripts/build_graph.pyUse Python 3.9 ou mais recente. Uma configuração típica é:
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
O adaptador ML-DSA-44 usa pqcrypto==0.4.0. Se esse backend não estiver disponível, o teste real de ML-DSA é ignorado enquanto o restante dos testes de referência ainda é executado. Para o gate de verificação de produção, instale todas as dependências de pyproject.toml.
O wrapper CCADB delega a normalização e a construção do grafo ao pipeline existente do corpus WebPKI. Defina um dos seguintes antes de executar um build completo:
export WEBPKI_PIPELINE_ROOT=/path/to/existing_webpki_pipeline
ou passe o caminho via Make:
make verify PIPELINE_ROOT=/path/to/existing_webpki_pipeline
A raiz do pipeline deve conter:
scripts/normalize_ccadb.py
scripts/build_graph.py
O comando único é:
make verify PIPELINE_ROOT=/path/to/existing_webpki_pipeline
Ele executa os seguintes estágios em ordem.
make backup-corpus
Isso copia os subdiretórios atuais working_corpus/{raw,normalized,graph,outputs_scc_repaired}, quando presentes, para backups/input_corpus_<timestamp>/ e grava manifest.json, file_inventory.csv e SHA256SUMS.
make download-ccadb
Isso usa config/ccadb_download.yaml e grava:
data/ccadb_full/download_manifest.json
data/ccadb_full/SHA256SUMS
O manifesto registra a tag crtsh/ccadb_data selecionada, o commit, o hash do registro de certificado V5, o intervalo de arquivos PEM anuais e o hash de entrada de confiança raiz.
make build-corpus PIPELINE_ROOT=/path/to/existing_webpki_pipeline
O wrapper prepara os arquivos CCADB baixados sob working_corpus/raw/ e então invoca o normalizador e o construtor de grafo do pipeline existente. Ele grava:
working_corpus/rebuild_manifest.json
working_corpus/normalized/certificates.parquet
working_corpus/normalized/records.parquet
working_corpus/outputs_scc_repaired/graph.json
make test
A suíte de testes cobre identificadores canônicos, análise de warm-wire, vinculação de terminal atual, canonicalização de fluxo tipado, negociação, deltas de atualização de intervalo, serialização de estado autenticado, esquema de saída de reconstrução e integração ML-DSA quando o backend está instalado.
make reconstruct
Isso lê config/reconstruction.yaml e emite uma linha por contexto de caminho/visão selecionado:
results/path_view_trace.csv
results/typed_dependency_records.csv
results/view_root_sets.csv
results/reconstruction_gate.json
Cada linha de caminho registra a visão, IDs de certificado concretos, linhagem selecionada, ID de caminho, referências de dependência tipadas, tipos de dependência, bytes warm, bytes de linha de base e digests de vinculação de terminal.
make evaluate
Isso calcula:
results/global_summary.json
results/per_view_summary.csv
results/per_view_dependency_records.csv
results/catalog_summary.csv
results/lifecycle_per_view.csv
results/byte_accounting.json
As fórmulas de contabilidade de bytes são:
LR+ warm profile-hint: 8 + 48*m
SPB: 2588 + 209*m
Profile S: 3569 + 904*m
Full per-dependency PQ: m*(2420 + 209)
Range catch-up delta: 2584 + 264*k_total
Consecutive deltas: r*(2584 + 264*k_per_epoch)
make check
Isso verifica saídas necessárias, manifestos de fontes fixadas, fórmulas de bytes por linha, IDs de caminho, digests de terminal, cobertura de registros de dependência, visões configuradas, serialização de estado por visão e disponibilidade do catálogo. Ele grava:
results/check_results.json
O status deve ser PASS.
make freeze
Isso grava:
audit/implementation_manifest.json
O manifesto registra informações de plataforma, metadados de fontes fixadas, metadados de build do corpus e hashes SHA-256 de todos os arquivos de resultado gerados.
Após o corpus já ter sido construído, execute:
make verify-fast
Isso pula os estágios de backup, download e build do corpus e reexecuta testes, reconstrução, avaliação, verificações e congelamento de manifesto a partir do corpus local atual.
As saídas geradas incluídas relatam:
contextos de caminho/visão: 44,912
linhagens físicas distintas de CA: 16,858
registros de dependência tipados: 72,020
m50 / m95 / mmax globais: 6 / 16 / 18
LR+ warm profile-hint: 296 / 776 / 872 bytes
SPB: 3,842 / 5,932 / 6,350 bytes
Profile S: 8,993 / 18,033 / 19,841 bytes
PQ completo por dependência: 15,774 / 42,064 / 47,322 bytes
estado retido: 16,150,580 bytes
checkpoint assinado: 16,160,724 bytes
Os resumos por visão estão em results/per_view_summary.csv.
A implementação usa nomes LR+ finalizados para arquivos de código-fonte, scripts, alvos, configuração e relatórios. Saídas criptográficas não são editadas manualmente além de metadados textuais estáveis. Impressões digitais hexadecimais de certificados, referências de registros e digests podem naturalmente conter substrings arbitrárias; estes são dados, não terminologia de processo.