SpnManager/proof:13/15
Kerberos broken now? →
proof and evidence

A run passes only under a negative control.

The live-proof harness stands up an ephemeral Active Directory forest in AWS or Azure, registers real SPNs through the product's own execute path, and reads back a remote client's actual Kerberos mechanism. The verdict rules are strict on purpose.

the law

Before must be NTLM. After must be Kerberos. A second oracle must agree.

Record the mechanism before the change. Make the change through Invoke-SpnExecutionEngine, not by hand. Record the mechanism after. Ask an independent second oracle. Only NTLM to Kerberos with agreement is a Pass.

If the baseline was already Kerberos, an SPN may have pre-existed and the run proved nothing about the product. That is Inconclusive, not Pass. Most tools in this space report the after-state alone and cannot tell the two apart.

baselineafteroracle 2verdictmeaning
NTLMKERBEROSagreesPASSthe change caused Kerberos
KERBEROSKERBEROSagreesINCONCLUSIVEnothing was proven
NTLMNTLMagreesFAILthe change did not take
NTLMKERBEROSdisagreesFAILoracles conflict; not trusted

a proof run, drawn
01
provision
ephemeral forest, DC, service host, remote client
02
baseline
client connects; oracle reads mechanism
03
change
Invoke-SpnExecutionEngine adds the SPN
04
result
client reconnects; oracle reads mechanism
05
second oracle
independent reading must agree
06
teardown
forest destroyed; log kept
results to date
AWS
13/15
provider scenarios, best run
Azure
11/15
provider scenarios, best run

Fifteen provider scenarios are exercised per cloud. Not every scenario passes on every run and the matrix says which did not. The numbers above are best results to date, and the evidence pack for the run is what substantiates them.

Dates of the runs, and the pack downloads, are placeholders until publication: {{ tok.EVIDENCE_PACK_URL }}.


what a signed evidence pack contains
evidence pack layout (illustrative file names)
evidence-pack/├── provisioning.log         # forest, hosts, network, timing├── hosts/│   ├── dc01.transcript      # per-host PowerShell transcript│   ├── sql01.transcript│   └── client01.transcript├── oracle/│   ├── baseline.json        # mechanism before, per scenario│   ├── result.json          # mechanism after│   └── second-oracle.json   # independent reading├── results-matrix.json      # scenario × verdict├── teardown.log└── SIGNATURE                # detached signature over the pack

Provisioning log, per-host transcripts, oracle readings, a results matrix, and a teardown log, signed as a unit. The signing key and verification instructions belong on the trust center →.

File names above illustrate the structure; the pack format is described in its own README inside each pack.


engineering posture

Substantiation, not a headline.

1,662
PowerShell tests passing
554
C# tests passing
94.9%
command coverage
mutation
testing on top of coverage: would a test actually fail if the code changed