DNSCurve is a proposed new secure protocol for the Domain Name System (DNS), designed by Daniel J. Bernstein.
DNSCurve uses Curve25519elliptic curve cryptography to establish keys used by Salsa20, paired with the message authentication code (MAC) function Poly1305, to encrypt and authenticate DNS packets between resolvers and authoritative servers. Public keys for remote authoritative servers are placed in NS records, so recursive resolvers know whether the server supports DNSCurve. Keys begin with the magic string uz5
and are followed by a 51-byte Base32 encoding of the server's 255-bit public key. E.g., in BIND format:
The resolver then sends to the server a packet containing its DNSCurve public key, a 96-bit nonce, and a cryptographic box containing the query. The cryptographic box is created using the resolver's private key, the server's public key, and the nonce. The response from the server contains a different 96-bit nonce and its own cryptographic box containing the answer to the query.
The cryptographic tools used in DNSCurve are the same used in CurveCP, a -based protocol which is similar to but uses elliptic-curve cryptography to encrypt and authenticate data. An analogy is that while DNSSEC is like signing a webpage with Pretty Good Privacy (PGP), CurveCP and DNSCurve are like encrypting and authenticating the channel using Transport Layer Security (TLS). Just as PGP-signed webpages can be sent over an encrypted channel using SSL, DNSSEC data can be protected using DNSCurve.
DNSCurve claims advantages over previous DNS services of:
DNSCurve uses 256-bit elliptic-curve cryptography, which NIST estimates to be roughly equivalent to 3072-bit RSA. ECRYPT reports a similar equivalence. It uses per-query public-key crypto (like SSH and SSL), and 96-bit nonces to protect against replay attacks. Adam Langley, security officer at Google, says "With very high probability, no one will ever solve a single instance of Curve25519 without a large, quantum computer."