An empty p
Not a missing value: RFC 6376 defines it as a revocation, so every signature under this selector fails
v=DKIM1; k=rsa; p=
Read a DKIM key record and get the key size out of the key itself, plus the two settings that turn DKIM off while leaving it looking configured: an empty p, which is a revocation, and t=y, which asks verifiers to ignore failures.
Or drop a file anywhere on this panel. Nothing is uploaded: the analysis runs in this tab.
The answer appears here
Paste on the left and press Check the record. Nothing leaves this tab.
Nothing else to flag.
No formatting problems, and nothing the rules object to. Worth remembering what that covers: this reads the file you pasted, not the account or cluster it will be applied to.
No finding matches that filter.
Real input you can load into the tool above. Each one shows a different thing going wrong, because that is what the tool is for.
Not a missing value: RFC 6376 defines it as a revocation, so every signature under this selector fails
v=DKIM1; k=rsa; p=
The size is read out of the key itself, and 1024 verifies everywhere, which is why so many are still published
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCem894SdsUExGt2O8IBiA95grNiyHUbQE4lU43Zd+WJGeesDefAgEVosN7c9JkDFms689P0ZHf0M3Qm/Hd7JOlBkB+iCet0pLoIF2F06WVluuUj5rYKtrreHEUu6qeFDr57otmiDIaPi3Ws8KkVHeXs9f8x1LmbF8Im6NlfqmEqwIDAQAB
t=y asks verifiers to ignore failures, so DKIM is configured, visible, and enforcing nothing
v=DKIM1; k=rsa; t=y; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5bV2Kvuw5gYjvwMmnwAzSjH3ptZnEAi12Mma2a6Nx1J/UDOnVsyxk2gXMAjc42za3Lx0sLwntuIS8/rZ5nAXutacGS8fe4zkQjtnehPmoCi4ZMLoRaQh04rcyCmRuj8DYaswXtX2nnisw5p+6OtSIS3/fWyF8hJe/sfFlZfokm5vGFfBqD1jb7xPfHzgP1XiJiRhoUdPo0jFJImMJLVJgRvxwEHTcVmvyMqfviH0ihlRdUkxvBXDS6OqDWZqS+fU7bp+e5njfXNJu4szE9D4V5n2jpYyL6hkXxxKZUGXA3GxXgSLJszchwf0CKiLWWbW56Mx+MrGU51zCEnuEH0bQIDAQAB
The bytes decode and are not a SubjectPublicKeyInfo, which is what a pasted private key looks like from here
v=DKIM1; k=rsa; p=aGVsbG8gd29ybGQ=
These are the ones that fail silently. The config is accepted, nothing raises an error, and the consequence arrives later.
RFC 6376 defines a key record with an empty p as REVOKED. A verifier does not conclude the record is incomplete, it concludes the key was withdrawn and fails every signature made with that selector. A trimmed value in a DNS interface publishes a revocation that looks like a typo.
Instead:Republish the full key if the selector is still in use. If it is genuinely retired, the empty record is the correct way to say so and the signer should stop using it.
Testing mode asks verifiers not to act on a DKIM failure. The record exists, the signature is attached, and every check that asks whether DKIM is configured says yes, while nothing is enforced.
Instead:Remove it once signatures are verifying in the DMARC aggregate reports. It belongs in the first day and nowhere after.
A key over 255 bytes is published as several TXT strings, and the resolver concatenates them with nothing in between. A separator that survives into the value corrupts the base64, and the chunk boundary lands wherever 255 bytes falls, as often inside a tag name as inside the key.
Instead:Join the quoted strings with nothing. Whitespace inside the base64 is permitted by the RFC and stripped before decoding; a character that is not base64 is not.
RFC 8463 defines ed25519-sha256 and support is far from universal. A receiver that does not implement it has a signature it cannot verify, which under a strict DMARC policy with no SPF alignment means the message does not arrive.
Instead:Publish an RSA key under a second selector and sign with both. A verifier uses whichever it understands and ignores the other.
A record with a key in it and a green tick in every setup checker can still be doing no work at all. Both of the ways that happens are one character of difference, and neither produces an error anywhere.
RFC 6376 section 3.6.1 defines a key record with an empty p as a revoked key. A verifier that reads it does not conclude the record is incomplete, it concludes the key was withdrawn and treats every signature made with that selector as a failure. So a DNS interface that trimmed the long value, or a copy-paste that lost the tail, publishes a revocation that looks like a typo. This is the one worth checking first, because nothing about it looks broken.
v=DKIM1; k=rsa; p=MIIBIjANBg... the key
v=DKIM1; k=rsa; p= revoked
v=DKIM1; k=rsa no key at all Testing mode tells a verifier not to treat a DKIM failure as a reason to act. The record exists, the signature is attached, DNS looks right, and none of it is enforcing anything. It belongs in the first day of a rollout, and it is routinely left in for years because every check that only asks whether DKIM is configured says yes.
The p tag is base64 of a SubjectPublicKeyInfo, which is the same structure inside a TLS certificate. The RSA modulus is in there, so the key length is readable from the record itself. RFC 8301 requires verifiers to reject anything under 1024 bits and tells signers to use 2048. 1024-bit keys are still widely published, precisely because nothing breaks and nothing complains.
1024 bits verifies everywhere, and is the one to rotate
2048 bits what RFC 8301 says to sign with
4096 bits needs splitting across TXT strings, and not every
verifier reads it A single character-string in a TXT record cannot exceed 255 bytes, and a 2048-bit key does not fit. So it is published as several quoted strings, and the resolver concatenates them with nothing in between. Rejoining them with a space or a newline corrupts the key, and the chunk boundary lands wherever 255 bytes falls, which is as often inside a tag name as inside the base64.
"v=DKIM1; k=rsa; p=MIIBIjANBgkq" "hkiG9w0BAQEFAAOCAQ8A..."
^ joined with nothing The verifier reads k to decide how to interpret the bytes in p. When they disagree, verification fails for a reason the record explains and nothing in a bounce message will. Ed25519 is worth publishing and not worth publishing alone: RFC 8463 defines it and support is far from universal, so a receiver that does not implement it has a signature it cannot check. Sign with both, under two selectors.
This is the key half. Whether a message verifies also depends on the signature your mail server attaches, which is not in DNS: the headers it covers, whether the body was modified in transit by a mailing list or a scanner, and whether the d= domain aligns with the From header for DMARC. None of that is visible in the record. It also performs no lookup, so it cannot tell you the record is published, that the selector matches the one your signer uses, or that the private key still pairs with this public one.