redact-secret · Report
PEM-encoded private key
RFC 7468 textual encoding of private key material (any algorithm), not tied to a single provider.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-10-03 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
Shape not recorded.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-17RFC 7468 textual encodings: BEGIN/END PRIVATE KEY labels and base64 body; the reviewed control is additionally parsed as PKCS#8 offline
- www.rfc-editor.org/rfc/rfc7468provider-documentation · last read 2026-10-03 · latest outcome read · supports BEGIN/END PRIVATE KEY labels and base64 body; the reviewed control is additionally parsed as PKCS#8 offline
Unresolved ·
tool-corroboration· current · observed 2026-09-17Pinned scanner rules are consistent with the contract grammar (1 artifact: trufflehog 3.97.4).
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/privatekey/privatekey.goscanner-rule-source · last read 2026-09-17 · latest outcome read · supports trufflehog 3.97.4: privatekey/privatekey
Provider documented ·
dossier-research· current · observed 2026-09-23Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/650/README.mdproject-research-note · last read 2026-09-26 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- www.rfc-editor.org/rfc/rfc7468provider-documentation · last read 2026-10-03 · latest outcome read · supports Cited by the legacy dossier research for this family
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- RFC 7468 textual encoding: a
-----BEGIN <label>-----line, base64 body lines, a matching-----END <label>-----line. The BEGIN and END lines fall inside the secret span. JSON exports (GCP and Firebase service-account keys) embed the PEM as a string with literal\nescapes; that variant was already detected, as redact-secret#163 proved with two regression fixtures (PR #169). - Basis
- T1, RFC 7468 §2. The #650 record names it as one of the two accepted RFC-backed T1 contracts, with the reviewed control parsed as PKCS#8 offline; legacy PEM bodies in the corpus decode to public prose, so only the parseable Ed25519 control is a positive.
- Issuance
- synthetic keys can be generated locally; no provider is involved.
- Contract in core
- detector-families.md; acceptance is recorded in the #650 record. No dedicated research issue carries the T1 judgement; redact-secret#107 covers grammar depth (labels, termination, line endings).
In this benchmark
- Fixtures
- 36
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
36 fixtures: 2 expect a redaction, 13 must stay quiet, 21 record project policy. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 5 | 0 | 0 | 0 |
| T2Tool-corroborated | 7 | 0 | 0 | 0 |
| T3Project policy | 24 | 0 | 0 | 0 |
Every scanner on the same fixtures
In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engine1 rule targets it | 36 | 0 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 36 | 0 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 36 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 36 | 23 | 0 | 0 |
Looks like it, but isn't
- Collisions
- PEM certificates and public keys share the envelope and are negatives; the label decides.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | private_key | -----BEGIN ... PRIVATE KEY----- block |
| gitleaks · rules 8.30.1 | private-key | -----BEGIN ... PRIVATE KEY----- block |
| openredaction · rules 1.1.5 | PRIVATE_KEY | -----BEGIN (RSA or EC) PRIVATE KEY----- block |
| openredaction · rules 1.1.5 | SSH_PRIVATE_KEY | -----BEGIN OPENSSH PRIVATE KEY----- block |
| trufflehog · rules 3.97.4 | privatekey | -----BEGIN ... PRIVATE KEY----- block |
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
private-key-dsa-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-dsa-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-dsa-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-ec-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-ec-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-ec-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-ed25519-plaingeneric · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
private-key-ed25519-unicode-crlfgeneric · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
private-key-encrypted-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-encrypted-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-encrypted-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-k8s-tls-secretgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-openssh-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-openssh-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-openssh-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-openssl-genpkey-stdoutgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-python-signing-key-literalgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-rsa-private-key-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-rsa-private-key-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
private-key-rsa-private-key-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
pem-label-onlygeneric · bare-prefixes-and-truncated-tokens | Must not flagT1 · Provider-documented | Quiet |
private-key-authorized-keys-line-public-idgeneric · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
private-key-ed25519-plain-twingeneric · public-sibling-prefix | Must not flagT1 · Provider-documented · twin | Quiet |
private-key-ed25519-unicode-crlf-twingeneric · public-sibling-prefix | Must not flagT1 · Provider-documented · twin | Quiet |
private-key-label-prosegeneric · benign-lookalike | Must not flagT3 · Project policy | Quiet |
private-key-prefix-onlygeneric · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
private-key-private-key-bare-twingeneric · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
private-key-private-key-quoted-twingeneric · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
private-key-private-key-unicode-crlf-twingeneric · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
private-key-public-blockgeneric · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
private-key-referencegeneric · benign-lookalike | Must not flagT3 · Project policy | Quiet |
private-key-rotation-note-prosegeneric · prose-mention | Must not flagT3 · Project policy | Quiet |
private-key-ssh-fingerprint-encoded-valuegeneric · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
Sources
Documentation and code
- www.rfc-editor.org/rfc/rfc7468
Research log
- redact-secret/redact-secret#107Research issue
- redact-secret/redact-secret#163Research issue
- redact-secret/redact-secret#650Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/650/README.md