Skip to main content
QUIETLYTIC
Email Security

DKIM Record Checker

Look up the DKIM key at a selector, or read a DKIM-Signature header and key record tag by tag.

Local · nothing leaves this browser Waiting for input
Esc Clear
Tags

Paste a DKIM-Signature header or a key record on the left.

How it works

This checks DKIM records. It does not verify signatures. A DKIM signature is checked against the public key at selector._domainkey over the canonicalised message body, and this page never has the message — so a result here is a reading of what a signature or key declares, never a statement that a signature holds.

Look up the key a domain publishes

Choose Look up a selector, enter the domain and the selector (the s= value from a DKIM-Signature header), and Quietlytic fetches the TXT record at <selector>._domainkey.<domain> through Cloudflare's DNS-over-HTTPS resolver: whether a key exists, its type and size, whether it is revoked or in testing mode. DNS has no way to list a domain's selectors, so the selector has to come from a real message. Lookups need a one-time bot check and are limited per hour.

What the tags are actually saying

d= is the signing domain, and DMARC alignment compares it against the From header rather than against anything in the signature itself. s= names the DNS selector holding the key. h= lists the headers the signature covers, in order — and anything absent from that list is unsigned and can be altered or added downstream while the signature still verifies.

Two tags that weaken a valid signature

l= limits the signature to the first N octets of the body. Content appended after that point is unsigned and still passes, which is a working mechanism for adding text to a signed message. t=y in a key record marks the domain as testing and instructs verifiers not to treat a failure as meaningful, which means the selector provides no protection at all. Both are flagged here.

Paste both and they are cross-checked

Given a signature and a key record together, the two are compared for internal consistency: key type against signing algorithm, the hash against the key's permitted list, and the key's service type. That is a comparison a person would otherwise do by eye, not a cryptographic check.

Example

A signature with h=to:subject:date and no from is reported as critical — the From address can be replaced without breaking it, which removes the only thing DMARC is aligning. A key record with p= and nothing after it is not broken; an empty p= is how RFC 6376 revokes a key.

DKIM is one of the two passes DMARC accepts; check the policy that relies on it with the DMARC Checker, and the domain's sending list with the SPF Checker.

Frequently asked questions

Can this tell me whether a signature is valid?

No, and it does not claim to. It can fetch the public key from selector._domainkey, but verification also needs the canonicalised message body hashed and checked against the signature, and this page never has the message. It reads what the signature and the key declare.

Why does the h= tag matter so much?

It lists the headers the signature covers. Anything not in it is unsigned and can be altered or added in transit while the signature still verifies. A Reply-To added downstream of a valid DKIM pass is a working business-email-compromise technique.

What does the l= tag do?

It limits the signature to the first N octets of the body. Content appended after that point is unsigned and still passes verification, so text can be added to a signed message without breaking it.

Is an empty p= in a key record broken?

No. RFC 6376 §3.6.1 defines an empty p= as revocation, so any signature naming that selector fails. It is intentional after a key rotation and a problem when it is not.

What does it check when I paste a signature and a key together?

Consistency between the two: key type against signing algorithm, the hash against the key’s permitted list, and whether the key is published for email. That is a comparison of declared values, not a cryptographic check.

Why flag t=y on a key record?

Because t=y marks the domain as testing and tells verifiers not to treat a failure as meaningful. The selector provides no protection while it is set, and it is left in place after deployment more often than not.

Where do I find the selector to look up?

In the s= tag of a DKIM-Signature header on a message the domain sent. Each sending service picks its own selector, and there is no DNS query that lists them, so the header is the reliable source.

Related tools

From the intelligence desk