Conversation
zbalkan
marked this pull request as draft
September 13, 2026 19:29
Contributor
Author
|
I'll keep it as a draft until RFC is approved. I will maintain this with the changes periodically. |
zbalkan
force-pushed
the
feat/pqc
branch
5 times, most recently
from
September 14, 2026 10:09
a2d72a3 to
7daecff
Compare
zbalkan
force-pushed
the
feat/pqc
branch
7 times, most recently
from
September 15, 2026 07:38
4ba4d80 to
815acc7
Compare
Signed-off-by: Zafer Balkan <zafer@zaferbalkan.com>
Signed-off-by: Zafer Balkan <zafer@zaferbalkan.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ML-DSA-44 DNSSEC support
TechnitiumLibrary implements resolver-side ML-DSA-44 using DNSSEC algorithm number 18. The wire profile follows
draft-westerbaan-dnssec-mldsa:The implementation does not prehash the DNSSEC signing input. HashML-DSA and non-empty contexts are not part of this profile. Authoritative key generation and signing are intentionally outside the scope of this library.
Validation policy
Ordinary algorithm support means that algorithm-18 DNSKEY, DS, and RRSIG records can be decoded and used by the normal DNSSEC validation path.
In addition, the resolver applies stronger downgrade protection when an algorithm-18 DS record in the parent DS RRset has already been authenticated. The child must then provide a matching ML-DSA SEP DNSKEY, the DNSKEY RRset must validate through ML-DSA, and RRsets below that zone must validate with ML-DSA. A conventional signature cannot satisfy this requirement. An algorithm-18 DS record whose DNSSEC status is not
Securedoes not activate the policy. This strong policy is mandatory whenever its authenticated signal is present; it is not a process-wide optional mode.Transport and resource behavior
ML-DSA signatures normally exceed common UDP payload sizes. A truncated UDP DNSSEC response is discarded and retried over TCP by the existing DNS client fallback path; the truncated response is not returned for validation or normal caching.
DNSKEY and RRSIG parsing rejects algorithm-18 values whose lengths differ from the sizes above. In addition to the existing KeyTrap limits, ML-DSA verification has a dedicated per-response budget. Exhausting it produces the
TooManyCryptoValidationsextended DNS error rather than continuing expensive path exploration.Cache compatibility
Algorithm numbers are stored in DNS RDATA as their numeric byte value. Existing cache entries containing a correctly encoded algorithm-18 DNSKEY or RRSIG are therefore read using the new implementation without a persistence format change. The authenticated-DS requirement is deliberately not persisted as an independent trust assertion: it is reconstructed from the authenticated parent DS chain. When that requirement is active, the resolver does not reuse a DNSKEY cache answer that predates enforcement.
Malformed algorithm-18 keys and signatures are rejected even if they were previously retained as unsupported data. This is required to keep malformed wire values away from the cryptographic provider.
Observability
DnssecMetricsexposes process-wide, thread-safe counters for:These counters are cumulative for the lifetime of the process. They do not log individual keys, signatures, or queried names.
P.S: Utilized ChatGPT for PR description.