Skip to content

verify: --require-rooted-signer (reject did:key self-attestation)#324

Open
bordumb wants to merge 1 commit into
mainfrom
feat/require-rooted-signer
Open

verify: --require-rooted-signer (reject did:key self-attestation)#324
bordumb wants to merge 1 commit into
mainfrom
feat/require-rooted-signer

Conversation

@bordumb

@bordumb bordumb commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

What

Adds auths artifact verify --require-rooted-signer: a post-verification policy that fails closed when the verified signer is a bare did:key self-attestation (issuer == subject == key), accepting only a rotatable, revocable did:keri signer.

Why (issue #300, Flag 3)

The release attestation today can sign with a bare did:key workload key — issuer == subject == device_public_key, a self-attestation with no key-state log. A leaked release key stays valid forever; --expect-signer only pins the key by equality, so it still passes a leaked key. A did:keri signer is backed by a KEL (rotation + revocation + recovery), which is the durable release identity #300 calls for.

The verify side already trust-chains and authenticates (it resolves the current key from an authenticated KEL when a bundle is supplied); the no-bundle did:key path self-verifies. This flag lets the verifier require the rotatable identity.

Scope / what's NOT here (for the reviewer)

  • This is the verify-side enforcement. The complementary half of Harden release attestation + Rekor transparency proof (3 observations from the v0.1.3 record) #300 Flag 3 — the release process adopting a did:keri org identity for signing — is a tooling/process change (the SDK already supports did:keri-rooted dual-signed attestations); not in this PR.
  • Default is off (opt-in); the reviewer should decide whether releases should set it (or make it default for the release-verify path).
  • Pure unrooted_signer_rejected + adversarial unit test. An end-to-end test (a real did:key attestation rejected via handle_verify) would strengthen it — flagging for the reviewer to request if desired.

Full gate green (build, 56 verify tests, fmt, deny, error-docs).

…estation

A bare did:key signer is a self-attestation: the key is its own identity with no
key-state log behind it, so it cannot be rotated or revoked — a leaked release key
stays valid forever, and --expect-signer (issuer-equality) still passes it. The
new --require-rooted-signer policy demands a rotatable, revocable did:keri signer
and fails closed on a did:key self-attestation. Applied after cryptographic
verification; like --expect-signer it can only narrow a valid verdict, never
widen it. Pure unrooted_signer_rejected helper + adversarial unit test (did:key
rejected, did:keri accepted, policy-off is a no-op).

Auths-Id: did:keri:EB5cPHY0t-ejNC_rUzPS1dclTvd6kG-R9mQzjozCuGgd
Auths-Device: did:keri:EB5cPHY0t-ejNC_rUzPS1dclTvd6kG-R9mQzjozCuGgd
Auths-Anchor-Seq: 1
@vercel

vercel Bot commented Jun 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
auths Ready Ready Preview, Comment Jun 21, 2026 12:34pm

@github-actions

Copy link
Copy Markdown

Auths Commit Verification

Commit Status Details
34c4e506 ❌ Failed No signature found

Result: ❌ 0/1 commits verified


How to fix

Commit 34c4e506 has no Auths signature (no Auths-Id/Auths-Device trailer).

1. Install auths

macOS: brew install auths
Linux: Download from releases

2. One-time setup (creates your identity and configures Git)

auths init

3. Sign this branch and push

auths sign origin/main..HEAD
git push --force-with-lease

For CI to verify the signer, commit an identity bundle:

auths id export-bundle --alias main --output .auths/ci-bundle.json --max-age-secs 31536000

Quickstart →

@bordumb bordumb changed the title verify: --require-rooted-signer (reject did:key self-attestation) — recommend human crypto review verify: --require-rooted-signer (reject did:key self-attestation) Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant