Home | History | Annotate | Line # | Download | only in dnssec-guide
advanced-discussions.rst revision 1.1.1.4
      1  1.1.1.2  christos .. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      2  1.1.1.2  christos ..
      3  1.1.1.2  christos .. SPDX-License-Identifier: MPL-2.0
      4  1.1.1.2  christos ..
      5  1.1.1.2  christos .. This Source Code Form is subject to the terms of the Mozilla Public
      6  1.1.1.2  christos .. License, v. 2.0.  If a copy of the MPL was not distributed with this
      7  1.1.1.2  christos .. file, you can obtain one at https://mozilla.org/MPL/2.0/.
      8  1.1.1.2  christos ..
      9  1.1.1.2  christos .. See the COPYRIGHT file distributed with this work for additional
     10  1.1.1.2  christos .. information regarding copyright ownership.
     11      1.1  christos 
     12      1.1  christos .. _dnssec_advanced_discussions:
     13      1.1  christos 
     14      1.1  christos Advanced Discussions
     15      1.1  christos --------------------
     16      1.1  christos 
     17      1.1  christos .. _signature_validity_periods:
     18      1.1  christos 
     19      1.1  christos Signature Validity Periods and Zone Re-Signing Intervals
     20      1.1  christos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     21      1.1  christos 
     22      1.1  christos In :ref:`how_are_answers_verified`, we saw that record signatures
     23      1.1  christos have a validity period outside of which they are not valid. This means
     24      1.1  christos that at some point, a signature will no longer be valid and a query for
     25      1.1  christos the associated record will fail DNSSEC validation. But how long should a
     26      1.1  christos signature be valid for?
     27      1.1  christos 
     28      1.1  christos The maximum value for the validity period should be determined by the impact of a
     29      1.1  christos replay attack: if this is low, the period can be long; if high,
     30      1.1  christos the period should be shorter. There is no "right" value, but periods of
     31      1.1  christos between a few days to a month are common.
     32      1.1  christos 
     33      1.1  christos Deciding a minimum value is probably an easier task. Should something
     34      1.1  christos fail (e.g., a hidden primary distributing to secondary servers that
     35      1.1  christos actually answer queries), how long will it take before the failure is
     36      1.1  christos noticed, and how long before it is fixed? If you are a large 24x7
     37      1.1  christos operation with operators always on-site, the answer might be less than
     38      1.1  christos an hour. In smaller companies, if the failure occurs
     39      1.1  christos just after everyone has gone home for a long weekend, the answer might
     40      1.1  christos be several days.
     41      1.1  christos 
     42      1.1  christos Again, there are no "right" values - they depend on your circumstances. The
     43      1.1  christos signature validity period you decide to use should be a value between
     44      1.1  christos the two bounds. At the time of this writing (mid-2020), the default policy used by BIND
     45      1.1  christos sets a value of 14 days.
     46      1.1  christos 
     47      1.1  christos To keep the zone valid, the signatures must be periodically refreshed
     48      1.1  christos since they expire - i.e., the zone must be periodically
     49      1.1  christos re-signed. The frequency of the re-signing depends on your network's
     50      1.1  christos individual needs. For example, signing puts a load on your server, so if
     51      1.1  christos the server is very highly loaded, a lower re-signing frequency is better. Another
     52      1.1  christos consideration is the signature lifetime: obviously the intervals between
     53      1.1  christos signings must not be longer than the signature validity period. But if
     54      1.1  christos you have set a signature lifetime close to the minimum (see above), the
     55      1.1  christos signing interval must be much shorter. What would happen if the system
     56      1.1  christos failed just before the zone was re-signed?
     57      1.1  christos 
     58      1.1  christos Again, there is no single "right" answer; it depends on your circumstances. The
     59      1.1  christos BIND 9 default policy sets the signature refresh interval to 5 days.
     60      1.1  christos 
     61      1.1  christos .. _advanced_discussions_proof_of_nonexistence:
     62      1.1  christos 
     63      1.1  christos Proof of Non-Existence (NSEC and NSEC3)
     64      1.1  christos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     65      1.1  christos 
     66      1.1  christos How do you prove that something does not exist? This zen-like question
     67      1.1  christos is an interesting one, and in this section we provide an overview
     68      1.1  christos of how DNSSEC solves the problem.
     69      1.1  christos 
     70      1.1  christos Why is it even important to have authenticated denial of existence in DNS?
     71      1.1  christos Couldn't we just send back "hey, what you asked for does not exist,"
     72      1.1  christos and somehow generate a digital signature to go with it, proving it
     73      1.1  christos really is from the correct authoritative source? Aside from the technical
     74      1.1  christos challenge of signing something that doesn't exist, this solution has flaws, one of
     75      1.1  christos which is it gives an attacker a way to create the appearance of denial
     76      1.1  christos of service by replaying this message on the network.
     77      1.1  christos 
     78      1.1  christos Let's use a little story, told three different ways, to
     79      1.1  christos illustrate how proof of nonexistence works. In our story, we run a small
     80      1.1  christos company with three employees: Alice, Edward, and Susan. For reasons that
     81      1.1  christos are far too complicated to go into, they don't have email accounts;
     82      1.1  christos instead, email for them is sent to a single account and a nameless
     83      1.1  christos intern passes the message to them. The intern has access to our private
     84      1.1  christos DNSSEC key to create signatures for their responses.
     85      1.1  christos 
     86      1.1  christos If we followed the approach of giving back the same answer no matter
     87      1.1  christos what was asked, when people emailed and asked for the message to be
     88      1.1  christos passed to "Bob," our intern would simply answer "Sorry, that person
     89      1.1  christos doesnt work here" and sign this message. This answer could be validated
     90      1.1  christos because our intern signed the response with our private DNSSEC key.
     91      1.1  christos However, since the signature doesnt change, an attacker could record
     92      1.1  christos this message. If the attacker were able to intercept our email, when the next
     93      1.1  christos person emailed asking for the message to be passed to Susan, the attacker
     94      1.1  christos could return the exact same message: "Sorry, that person doesnt work
     95      1.1  christos here," with the same signature. Now the attacker has successfully fooled
     96      1.1  christos the sender into thinking that Susan doesnt work at our company, and
     97      1.1  christos might even be able to convince all senders that no one works at this
     98      1.1  christos company.
     99      1.1  christos 
    100      1.1  christos To solve this problem, two different solutions were created. We will
    101      1.1  christos look at the first one, NSEC, next.
    102      1.1  christos 
    103      1.1  christos .. _advanced_discussions_nsec:
    104  1.1.1.2  christos .. _NSEC:
    105      1.1  christos 
    106      1.1  christos NSEC
    107      1.1  christos ^^^^
    108      1.1  christos 
    109      1.1  christos The NSEC record is used to prove that something does not exist, by
    110      1.1  christos providing the name before it and the name after it. Using our tiny
    111      1.1  christos company example, this would be analogous to someone sending an email for
    112      1.1  christos Bob and our nameless intern responding with with: "I'm sorry, that
    113      1.1  christos person doesn't work here. The name before the location where 'Bob'
    114      1.1  christos would be is Alice, and the name after that is Edward." Let's say
    115      1.1  christos another email was received for a
    116      1.1  christos non-existent person, this time Oliver; our intern would respond "I'm
    117      1.1  christos sorry, that person doesn't work here. The name before the location
    118      1.1  christos where 'Oliver' would be is Edward,
    119      1.1  christos and the name after that is Susan." If another sender asked for Todd, the
    120      1.1  christos answer would be: "I'm sorry, that person doesn't work here. The name
    121      1.1  christos before the location where 'Todd' would be is Susan, and there are no
    122      1.1  christos other names after that."
    123      1.1  christos 
    124      1.1  christos So we end up with four NSEC records:
    125      1.1  christos 
    126      1.1  christos ::
    127      1.1  christos 
    128  1.1.1.2  christos    example.com.        300 IN  NSEC    alice.example.com.  A RRSIG NSEC
    129      1.1  christos    alice.example.com.  300 IN  NSEC    edward.example.com. A RRSIG NSEC
    130      1.1  christos    edward.example.com. 300 IN  NSEC    susan.example.com.  A RRSIG NSEC
    131      1.1  christos    susan.example.com.  300 IN  NSEC    example.com.        A RRSIG NSEC
    132      1.1  christos 
    133      1.1  christos What if the attacker tried to use the same replay method described
    134      1.1  christos earlier? If someone sent an email for Edward, none of the four answers
    135      1.1  christos would fit. If attacker replied with message #2, "I'm sorry, that person
    136      1.1  christos doesn't work here. The name before it is Alice, and the name after it is
    137      1.1  christos Edward," it is obviously false, since "Edward" is in the response; and the same
    138      1.1  christos goes for #3, Edward and Susan. As for #1 and #4, Edward does not fall in
    139      1.1  christos the alphabetical range before Alice or after Susan, so the sender can logically deduce
    140      1.1  christos that it was an incorrect answer.
    141      1.1  christos 
    142      1.1  christos When BIND signs your zone, the zone data is automatically sorted on
    143      1.1  christos the fly before generating NSEC records, much like how a phone directory
    144      1.1  christos is sorted.
    145      1.1  christos 
    146      1.1  christos The NSEC record allows for a proof of non-existence for record types. If
    147      1.1  christos you ask a signed zone for a name that exists but for a record type that
    148      1.1  christos doesn't (for that name), the signed NSEC record returned lists all of
    149      1.1  christos the record types that *do* exist for the requested domain name.
    150      1.1  christos 
    151      1.1  christos NSEC records can also be used to show whether a record was generated as
    152      1.1  christos the result of a wildcard expansion. The details of this are not
    153      1.1  christos within the scope of this document, but are described well in
    154      1.1  christos :rfc:`7129`.
    155      1.1  christos 
    156      1.1  christos Unfortunately, the NSEC solution has a few drawbacks, one of which is
    157      1.1  christos trivial "zone walking." In our story, a curious person can keep sending emails, and
    158      1.1  christos our nameless, gullible intern keeps divulging information about our
    159      1.1  christos employees. Imagine if the sender first asked: "Is Bob there?" and
    160      1.1  christos received back the names Alice and Edward. Our sender could then email
    161      1.1  christos again: "Is Edwarda there?", and will get back Edward and Susan. (No,
    162      1.1  christos "Edwarda" is not a real name. However, it is the first name
    163      1.1  christos alphabetically after "Edward" and that is enough to get the intern to reply
    164      1.1  christos with a message telling us the next valid name after Edward.) Repeat the
    165      1.1  christos process enough times and the person sending the emails eventually
    166      1.1  christos learns every name in our company phone directory. For many of you, this
    167      1.1  christos may not be a problem, since the very idea of DNS is similar to a public
    168      1.1  christos phone book: if you don't want a name to be known publicly, don't put it
    169      1.1  christos in DNS! Consider using DNS views (split DNS) and only display your
    170      1.1  christos sensitive names to a select audience.
    171      1.1  christos 
    172  1.1.1.2  christos The second potential drawback of NSEC is a bigger zone file and memory consumption;
    173  1.1.1.2  christos there is no opt-out mechanism for insecure child zones, so each name
    174  1.1.1.2  christos in the zone will get an additional NSEC record and a RRSIG record to go with
    175  1.1.1.2  christos it. In practice this is a problem only for parent-zone operators dealing with
    176  1.1.1.2  christos mostly insecure child zones, such as ``com.``. To learn more about opt-out,
    177  1.1.1.2  christos please see :ref:`advanced_discussions_nsec3_optout`.
    178      1.1  christos 
    179      1.1  christos .. _advanced_discussions_nsec3:
    180  1.1.1.2  christos .. _nsec3:
    181      1.1  christos 
    182      1.1  christos NSEC3
    183      1.1  christos ^^^^^
    184      1.1  christos 
    185      1.1  christos NSEC3 adds two additional features that NSEC does not have:
    186      1.1  christos 
    187      1.1  christos 1. It offers no easy zone enumeration.
    188      1.1  christos 
    189      1.1  christos 2. It provides a mechanism for the parent zone to exclude insecure
    190      1.1  christos    delegations (i.e., delegations to zones that are not signed) from the
    191      1.1  christos    proof of non-existence.
    192      1.1  christos 
    193      1.1  christos Recall that in :ref:`advanced_discussions_nsec` we provided a range of
    194      1.1  christos names to prove that something does not exist. But as it turns
    195      1.1  christos out, even disclosing these ranges of names becomes a problem: this made
    196      1.1  christos it very easy for the curious-minded to look at our entire zone. Not
    197      1.1  christos only that, unlike a zone transfer, this "zone walking" is more
    198      1.1  christos resource-intensive. So how do we disclose something without actually disclosing
    199      1.1  christos it?
    200      1.1  christos 
    201      1.1  christos The answer is actually quite simple: hashing functions, or one-way
    202      1.1  christos hashes. Without going into many details, think of it like a magical meat
    203      1.1  christos grinder. A juicy piece of ribeye steak goes in one end, and out comes a
    204      1.1  christos predictable shape and size of ground meat (hash) with a somewhat unique
    205      1.1  christos pattern. No matter how hard you try, you cannot turn the ground meat
    206      1.1  christos back into the ribeye steak: that's what we call a one-way hash.
    207      1.1  christos 
    208      1.1  christos NSEC3 basically runs the names through a one-way hash before giving them
    209      1.1  christos out, so the recipients can verify the non-existence without any
    210  1.1.1.2  christos knowledge of the other names in the zone.
    211      1.1  christos 
    212      1.1  christos So let's tell our little story for the third time, this
    213      1.1  christos time with NSEC3. In this version, our intern is not given a list of actual
    214      1.1  christos names; he is given a list of "hashed" names. So instead of Alice,
    215      1.1  christos Edward, and Susan, the list he is given reads like this (hashes
    216      1.1  christos shortened for easier reading):
    217      1.1  christos 
    218      1.1  christos ::
    219      1.1  christos 
    220      1.1  christos    FSK5.... (produced from Edward)
    221      1.1  christos    JKMA.... (produced from Susan)
    222      1.1  christos    NTQ0.... (produced from Alice)
    223      1.1  christos 
    224      1.1  christos Then, an email is received for Bob again. Our intern takes the name Bob
    225      1.1  christos through a hash function, and the result is L8J2..., so he replies: "I'm
    226      1.1  christos sorry, that person doesn't work here. The name before that is JKMA...,
    227      1.1  christos and the name after that is NTQ0...". There, we proved Bob doesn't exist,
    228      1.1  christos without giving away any names! To put that into proper NSEC3 resource
    229      1.1  christos records, they would look like this (again, hashes shortened for
    230      1.1  christos ease of display):
    231      1.1  christos 
    232      1.1  christos ::
    233      1.1  christos 
    234  1.1.1.2  christos    FSK5....example.com. 300 IN NSEC3 1 0 0 -  JKMA... A RRSIG
    235  1.1.1.2  christos    JKMA....example.com. 300 IN NSEC3 1 0 0 -  NTQ0... A RRSIG
    236  1.1.1.2  christos    NTQ0....example.com. 300 IN NSEC3 1 0 0 -  FSK5... A RRSIG
    237      1.1  christos 
    238      1.1  christos .. note::
    239      1.1  christos 
    240      1.1  christos    Just because we employed one-way hash functions does not mean there is
    241      1.1  christos    no way for a determined individual to figure out our zone data.
    242  1.1.1.2  christos 
    243  1.1.1.2  christos Most names published in the DNS are rarely secret or unpredictable. They are
    244  1.1.1.2  christos published to be memorable, used and consumed by humans. They are often recorded
    245  1.1.1.2  christos in many other network logs such as email logs, certificate transparency logs,
    246  1.1.1.2  christos web page links, intrusion detection systems, malware scanners, email archives,
    247  1.1.1.2  christos etc. Many times a simple dictionary of commonly used domain-name prefixes
    248  1.1.1.2  christos (www, mail, imap, login, database, etc.) can be used to quickly reveal a large
    249  1.1.1.2  christos number of labels within a zone. Additionally, if an adversary really wants to
    250  1.1.1.2  christos expend significant CPU resources to mount an offline dictionary attack on a
    251  1.1.1.2  christos zone's NSEC3 chain, they will likely be able to find most of the "guessable"
    252  1.1.1.2  christos names despite any level of hashing.
    253  1.1.1.2  christos 
    254  1.1.1.2  christos Also, it is still possible to gather all of our NSEC3 records and hashed
    255  1.1.1.2  christos names and perform an offline brute-force attack by trying all
    256  1.1.1.2  christos possible combinations to figure out what the original name is. In our
    257  1.1.1.2  christos meat-grinder analogy, this would be like someone
    258  1.1.1.2  christos buying all available cuts of meat and grinding them up at home using
    259  1.1.1.2  christos the same model of meat grinder, and comparing the output with the meat
    260  1.1.1.2  christos you gave him. It is expensive and time-consuming (especially with
    261  1.1.1.2  christos real meat), but like everything else in cryptography, if someone has
    262  1.1.1.2  christos enough resources and time, nothing is truly private forever. If you
    263  1.1.1.2  christos are concerned about someone performing this type of attack on your
    264  1.1.1.2  christos zone data, use some of the special techniques described in :rfc:`4470`.
    265      1.1  christos 
    266      1.1  christos .. _advanced_discussions_nsec3param:
    267      1.1  christos 
    268      1.1  christos NSEC3PARAM
    269      1.1  christos ++++++++++
    270      1.1  christos 
    271  1.1.1.2  christos .. warning::
    272  1.1.1.2  christos    Before we dive into the details of NSEC3 parametrization, please note:
    273  1.1.1.2  christos    the defaults should not be changed without a strong justification and a full
    274  1.1.1.4  christos    understanding of the potential impact. See :rfc:`9276`.
    275  1.1.1.2  christos 
    276  1.1.1.2  christos The above NSEC3 examples used four parameters: 1, 0, 0, and
    277  1.1.1.2  christos zero-length salt. 1 represents the algorithm, 0 represents the opt-out
    278  1.1.1.2  christos flag, 0 represents the number of additional iterations, and - is the
    279      1.1  christos salt. Let's look at how each one can be configured:
    280      1.1  christos 
    281  1.1.1.2  christos .. glossary::
    282      1.1  christos 
    283  1.1.1.2  christos    Algorithm
    284  1.1.1.2  christos    NSEC3 Hashing Algorithm
    285  1.1.1.2  christos       The only currently defined value is 1 for SHA-1, so there
    286  1.1.1.2  christos       is no configuration field for it.
    287  1.1.1.2  christos 
    288  1.1.1.2  christos    Opt-out
    289  1.1.1.2  christos       Setting this bit to 1 enables NSEC3 opt-out, which is
    290  1.1.1.2  christos       discussed in :ref:`advanced_discussions_nsec3_optout`.
    291  1.1.1.2  christos 
    292  1.1.1.2  christos    Iterations
    293  1.1.1.2  christos       Iterations defines the number of _additional_ times to
    294  1.1.1.2  christos       apply the algorithm when generating an NSEC3 hash. More iterations
    295  1.1.1.2  christos       consume more resources for both authoritative servers and validating
    296  1.1.1.2  christos       resolvers. The considerations here are similar to those seen in
    297  1.1.1.2  christos       :ref:`key_sizes`, of security versus resources.
    298  1.1.1.2  christos 
    299  1.1.1.2  christos       .. warning::
    300  1.1.1.2  christos          Do not use values higher than zero. A value of zero provides one round
    301  1.1.1.2  christos          of SHA-1 hashing and protects from non-determined attackers.
    302  1.1.1.2  christos 
    303  1.1.1.2  christos          A greater number of additional iterations causes interoperability problems
    304  1.1.1.2  christos          and opens servers to CPU-exhausting DoS attacks, while providing
    305  1.1.1.2  christos          only doubtful security benefits.
    306  1.1.1.2  christos 
    307  1.1.1.2  christos    Salt
    308  1.1.1.2  christos       A salt value, which can be combined with an FQDN to influence the
    309  1.1.1.2  christos       resulting hash. Salt is discussed in more detail in
    310  1.1.1.2  christos       :ref:`advanced_discussions_nsec3_salt`.
    311      1.1  christos 
    312  1.1.1.2  christos .. _advanced_discussions_nsec3_optout:
    313      1.1  christos 
    314  1.1.1.2  christos NSEC3 Opt-Out
    315  1.1.1.2  christos +++++++++++++
    316      1.1  christos 
    317  1.1.1.2  christos First things first: For most DNS administrators who do not manage a huge number
    318  1.1.1.4  christos of insecure delegations, the NSEC3 opt-out featuere is not relevant. See :rfc:`9276`.
    319      1.1  christos 
    320  1.1.1.2  christos Opt-out allows for blocks of unsigned delegations to be covered by a single NSEC3
    321  1.1.1.2  christos record. In other words, use of the opt-out allows large registries to only sign as
    322  1.1.1.2  christos many NSEC3 records as there are signed DS or other RRsets in the zone; with
    323  1.1.1.2  christos opt-out, unsigned delegations do not require additional NSEC3 records. This
    324  1.1.1.2  christos sacrifices the tamper-resistance proof of non-existence offered by NSEC3 in
    325  1.1.1.2  christos order to reduce memory and CPU overheads, and decreases the effectiveness of the cache
    326  1.1.1.2  christos (:rfc:`8198`).
    327  1.1.1.2  christos 
    328  1.1.1.2  christos Why would that ever be desirable? If a significant number of delegations
    329  1.1.1.2  christos are not yet securely delegated, meaning they lack DS records and are still
    330  1.1.1.2  christos insecure or unsigned, generating DNSSEC records for all their NS records
    331  1.1.1.2  christos might consume lots of memory and is not strictly required by the child zones.
    332  1.1.1.2  christos 
    333  1.1.1.2  christos This resource-saving typically makes a difference only for *huge* zones like ``com.``.
    334  1.1.1.2  christos Imagine that you are the operator of busy top-level domains such as ``com.``,
    335  1.1.1.2  christos with millions of insecure delegated domain names.
    336  1.1.1.2  christos As of mid-2022, around 3% of all ``com.`` zones are signed. Basically,
    337  1.1.1.2  christos without opt-out, with 1,000,000 delegations, only 30,000 of which are secure, you
    338  1.1.1.2  christos still have to generate NSEC RRsets for the other 970,000 delegations; with
    339  1.1.1.2  christos NSEC3 opt-out, you will have saved yourself 970,000 sets of records.
    340  1.1.1.2  christos 
    341  1.1.1.2  christos In contrast, for a small zone the difference is operationally negligible
    342  1.1.1.2  christos and the drawbacks outweigh the benefits.
    343  1.1.1.2  christos 
    344  1.1.1.2  christos If NSEC3 opt-out is truly essential for a zone, the following
    345  1.1.1.3  christos configuration can be added to :any:`dnssec-policy`; for example, to create an
    346  1.1.1.2  christos NSEC3 chain using the SHA-1 hash algorithm, with the opt-out flag,
    347  1.1.1.2  christos no additional iterations, and no extra salt, use:
    348      1.1  christos 
    349  1.1.1.2  christos .. code-block:: none
    350      1.1  christos 
    351      1.1  christos    dnssec-policy "nsec3" {
    352      1.1  christos        ...
    353  1.1.1.2  christos        nsec3param iterations 0 optout yes salt-length 0;
    354      1.1  christos    };
    355      1.1  christos 
    356      1.1  christos 
    357      1.1  christos 
    358      1.1  christos To learn more about how to configure NSEC3 opt-out, please see
    359      1.1  christos :ref:`recipes_nsec3_optout`.
    360      1.1  christos 
    361      1.1  christos .. _advanced_discussions_nsec3_salt:
    362      1.1  christos 
    363      1.1  christos NSEC3 Salt
    364      1.1  christos ++++++++++
    365      1.1  christos 
    366  1.1.1.2  christos .. warning::
    367  1.1.1.2  christos    Contrary to popular belief, adding salt provides little value.
    368  1.1.1.2  christos    Each DNS zone is always uniquely salted using the zone name. **Operators should
    369  1.1.1.2  christos    use a zero-length salt value.**
    370  1.1.1.2  christos 
    371  1.1.1.2  christos The properties of this extra salt are complicated and beyond scope of this
    372  1.1.1.2  christos document. For detailed description why the salt in the context of DNSSEC
    373  1.1.1.4  christos provides little value please see :rfc:`9276`.
    374      1.1  christos 
    375      1.1  christos .. _advanced_discussions_nsec_or_nsec3:
    376      1.1  christos 
    377      1.1  christos NSEC or NSEC3?
    378      1.1  christos ^^^^^^^^^^^^^^
    379      1.1  christos 
    380  1.1.1.2  christos So which is better: NSEC or NSEC3? There is no single right
    381  1.1.1.2  christos answer here that fits everyone; it comes down to a given network's needs or
    382  1.1.1.2  christos requirements.
    383  1.1.1.2  christos 
    384  1.1.1.2  christos In most cases, NSEC is a good choice for zone administrators. It
    385  1.1.1.2  christos relieves the authoritative servers and resolver of the additional cryptographic
    386  1.1.1.2  christos operations that NSEC3 requires, and NSEC is comparatively easier to
    387  1.1.1.2  christos troubleshoot than NSEC3.
    388  1.1.1.2  christos 
    389  1.1.1.2  christos NSEC3 comes with many drawbacks and should be implemented only if zone
    390  1.1.1.2  christos enumeration prevention is really needed, or when opt-out provides a
    391  1.1.1.2  christos significant reduction in memory and CPU overheads (in other words, with a
    392  1.1.1.2  christos huge zone with mostly insecure delegations).
    393      1.1  christos 
    394      1.1  christos .. _advanced_discussions_key_generation:
    395      1.1  christos 
    396      1.1  christos DNSSEC Keys
    397      1.1  christos ~~~~~~~~~~~
    398      1.1  christos 
    399      1.1  christos Types of Keys
    400      1.1  christos ^^^^^^^^^^^^^
    401      1.1  christos 
    402      1.1  christos Although DNSSEC
    403      1.1  christos documentation talks about three types of keys, they are all the same
    404      1.1  christos thing - but they have different roles. The roles are:
    405      1.1  christos 
    406      1.1  christos Zone-Signing Key (ZSK)
    407      1.1  christos    This is the key used to sign the zone. It signs all records in the
    408      1.1  christos    zone apart from the DNSSEC key-related RRsets: DNSKEY, CDS, and
    409      1.1  christos    CDNSKEY.
    410      1.1  christos 
    411      1.1  christos Key-Signing Key (KSK)
    412      1.1  christos    This is the key used to sign the DNSSEC key-related RRsets and is the
    413      1.1  christos    key used to link the parent and child zones. The parent zone stores a
    414      1.1  christos    digest of the KSK. When a resolver verifies the chain of trust it
    415      1.1  christos    checks to see that the DS record in the parent (which holds the
    416      1.1  christos    digest of a key) matches a key in the DNSKEY RRset, and that it is
    417      1.1  christos    able to use that key to verify the DNSKEY RRset. If it can do
    418      1.1  christos    that, the resolver knows that it can trust the DNSKEY resource
    419      1.1  christos    records, and so can use one of them to validate the other records in
    420      1.1  christos    the zone.
    421      1.1  christos 
    422      1.1  christos Combined Signing Key (CSK)
    423      1.1  christos    A CSK combines the functionality of a ZSK and a KSK. Instead of
    424      1.1  christos    having one key for signing the zone and one for linking the parent
    425      1.1  christos    and child zones, a CSK is a single key that serves both roles.
    426      1.1  christos 
    427      1.1  christos It is important to realize the terms ZSK, KSK, and CSK describe how the
    428      1.1  christos keys are used - all these keys are represented by DNSKEY records. The
    429      1.1  christos following examples are the DNSKEY records from a zone signed with a KSK
    430      1.1  christos and ZSK:
    431      1.1  christos 
    432      1.1  christos ::
    433      1.1  christos 
    434      1.1  christos    $ dig @192.168.1.12 example.com DNSKEY
    435      1.1  christos 
    436      1.1  christos    ; <<>> DiG 9.16.0 <<>> @192.168.1.12 example.com dnskey +multiline
    437      1.1  christos    ; (1 server found)
    438      1.1  christos    ;; global options: +cmd
    439      1.1  christos    ;; Got answer:
    440      1.1  christos    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54989
    441      1.1  christos    ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
    442      1.1  christos    ;; WARNING: recursion requested but not available
    443      1.1  christos 
    444      1.1  christos    ;; OPT PSEUDOSECTION:
    445      1.1  christos    ; EDNS: version: 0, flags:; udp: 4096
    446      1.1  christos    ; COOKIE: 5258d7ed09db0d76010000005ea1cc8c672d8db27a464e37 (good)
    447      1.1  christos    ;; QUESTION SECTION:
    448      1.1  christos    ;example.com.       IN DNSKEY
    449      1.1  christos 
    450      1.1  christos    ;; ANSWER SECTION:
    451      1.1  christos    example.com.        60 IN DNSKEY 256 3 13 (
    452      1.1  christos                    tAeXLtIQ3aVDqqS/1UVRt9AE6/nzfoAuaT1Vy4dYl2CK
    453      1.1  christos                    pLNcUJxME1Z//pnGXY+HqDU7Gr5HkJY8V0W3r5fzlw==
    454      1.1  christos                    ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 63722
    455      1.1  christos    example.com.        60 IN DNSKEY 257 3 13 (
    456      1.1  christos                    cxkNegsgubBPXSra5ug2P8rWy63B8jTnS4n0IYSsD9eW
    457      1.1  christos                    VhiyQDmdgevKUhfG3SE1wbLChjJc2FAbvSZ1qk03Nw==
    458      1.1  christos                    ) ; KSK; alg = ECDSAP256SHA256 ; key id = 42933
    459      1.1  christos 
    460      1.1  christos ... and a zone signed with just a CSK:
    461      1.1  christos 
    462      1.1  christos ::
    463      1.1  christos 
    464      1.1  christos    $ dig @192.168.1.13 example.com DNSKEY
    465      1.1  christos 
    466      1.1  christos    ; <<>> DiG 9.16.0 <<>> @192.168.1.13 example.com dnskey +multiline
    467      1.1  christos    ; (1 server found)
    468      1.1  christos    ;; global options: +cmd
    469      1.1  christos    ;; Got answer:
    470      1.1  christos    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22628
    471      1.1  christos    ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    472      1.1  christos    ;; WARNING: recursion requested but not available
    473      1.1  christos 
    474      1.1  christos    ;; OPT PSEUDOSECTION:
    475      1.1  christos    ; EDNS: version: 0, flags:; udp: 4096
    476      1.1  christos    ; COOKIE: bf19ee914b5df46e010000005ea1cd02b66c06885d274647 (good)
    477      1.1  christos    ;; QUESTION SECTION:
    478      1.1  christos    ;example.com.       IN DNSKEY
    479      1.1  christos 
    480      1.1  christos    ;; ANSWER SECTION:
    481      1.1  christos    example.com.        60 IN DNSKEY 257 3 13 (
    482      1.1  christos                    p0XM6AJ68qid2vtOdyGaeH1jnrdk2GhZeVvGzXfP/PNa
    483      1.1  christos                    71wGtzR6jdUrTbXo5Z1W5QeeJF4dls4lh4z7DByF5Q==
    484      1.1  christos                    ) ; KSK; alg = ECDSAP256SHA256 ; key id = 1231
    485      1.1  christos 
    486      1.1  christos The only visible difference between the records (apart from the key data
    487      1.1  christos itself) is the value of the flags fields; this is 256
    488      1.1  christos for a ZSK and 257 for a KSK or CSK. Even then, the flags field is only a
    489      1.1  christos hint to the software using it as to the role of the key: zones can be
    490      1.1  christos signed by any key. The fact that a CSK and KSK both have the same flags
    491      1.1  christos emphasizes this. A KSK usually only signs the DNSSEC key-related RRsets
    492      1.1  christos in a zone, whereas a CSK is used to sign all records in the zone.
    493      1.1  christos 
    494      1.1  christos The original idea of separating the function of the key into a KSK and
    495      1.1  christos ZSK was operational. With a single key, changing it for any reason is
    496      1.1  christos "expensive," as it requires interaction with the parent zone
    497      1.1  christos (e.g., uploading the key to the parent may require manual interaction
    498      1.1  christos with the organization running that zone). By splitting it, interaction
    499      1.1  christos with the parent is required only if the KSK is changed; the ZSK can be
    500      1.1  christos changed as often as required without involving the parent.
    501      1.1  christos 
    502      1.1  christos The split also allows the keys to be of different lengths. So the ZSK,
    503      1.1  christos which is used to sign the record in the zone, can be of a (relatively)
    504      1.1  christos short length, lowering the load on the server. The KSK, which is used
    505      1.1  christos only infrequently, can be of a much longer length. The relatively
    506      1.1  christos infrequent use also allows the private part of the key to be stored in a
    507      1.1  christos way that is more secure but that may require more overhead to access, e.g., on
    508      1.1  christos an HSM (see :ref:`hardware_security_modules`).
    509      1.1  christos 
    510      1.1  christos In the early days of DNSSEC, the idea of splitting the key went more or
    511      1.1  christos less unchallenged. However, with the advent of more powerful computers
    512      1.1  christos and the introduction of signaling methods between the parent and child
    513      1.1  christos zones (see :ref:`cds_cdnskey`), the advantages of a ZSK/KSK split are
    514      1.1  christos less clear and, for many zones, a single key is all that is required.
    515      1.1  christos 
    516      1.1  christos As with many questions related to the choice of DNSSEC policy, the
    517      1.1  christos decision on which is "best" is not clear and depends on your circumstances.
    518      1.1  christos 
    519      1.1  christos Which Algorithm?
    520      1.1  christos ^^^^^^^^^^^^^^^^
    521      1.1  christos 
    522      1.1  christos There are three algorithm choices for DNSSEC as of this writing
    523      1.1  christos (mid-2020):
    524      1.1  christos 
    525      1.1  christos -  RSA
    526      1.1  christos 
    527      1.1  christos -  Elliptic Curve DSA (ECDSA)
    528      1.1  christos 
    529      1.1  christos -  Edwards Curve Digital Security Algorithm (EdDSA)
    530      1.1  christos 
    531      1.1  christos All are supported in BIND 9, but only RSA and ECDSA (specifically
    532      1.1  christos RSASHA256 and ECDSAP256SHA256) are mandatory to implement in DNSSEC.
    533      1.1  christos However, RSA is a little long in the tooth, and ECDSA/EdDSA are emerging
    534      1.1  christos as the next new cryptographic standards. In fact, the US federal
    535      1.1  christos government recommended discontinuing RSA use altogether by September 2015
    536      1.1  christos and migrating to using ECDSA or similar algorithms.
    537      1.1  christos 
    538      1.1  christos For now, use ECDSAP256SHA256 but keep abreast of developments in this
    539      1.1  christos area. For details about rolling over DNSKEYs to a new algorithm, see
    540      1.1  christos :ref:`advanced_discussions_DNSKEY_algorithm_rollovers`.
    541      1.1  christos 
    542      1.1  christos .. _key_sizes:
    543      1.1  christos 
    544      1.1  christos Key Sizes
    545      1.1  christos ^^^^^^^^^
    546      1.1  christos 
    547      1.1  christos If using RSA keys, the choice of key sizes is a classic issue of finding
    548      1.1  christos the balance between performance and security. The larger the key size,
    549      1.1  christos the longer it takes for an attacker to crack the key; but larger keys
    550      1.1  christos also mean more resources are needed both when generating signatures
    551      1.1  christos (authoritative servers) and verifying signatures (recursive servers).
    552      1.1  christos 
    553      1.1  christos Of the two sets of keys, ZSK is used much more frequently. ZSK is used whenever zone
    554      1.1  christos data changes or when signatures expire, so performance
    555      1.1  christos certainly is of a bigger concern. As for KSK, it is used less
    556      1.1  christos frequently, so performance is less of a factor, but its impact is bigger
    557      1.1  christos because of its role in signing other keys.
    558      1.1  christos 
    559      1.1  christos In earlier versions of this guide, the following key lengths were
    560      1.1  christos chosen for each set, with the recommendation that they be rotated more
    561      1.1  christos frequently for better security:
    562      1.1  christos 
    563      1.1  christos -  *ZSK*: RSA 1024 bits, rollover every year
    564      1.1  christos 
    565      1.1  christos -  *KSK*: RSA 2048 bits, rollover every five years
    566      1.1  christos 
    567      1.1  christos These should be considered minimum RSA key sizes. At the time
    568      1.1  christos of this writing (mid-2020), the root zone and many TLDs are already using 2048
    569      1.1  christos bit ZSKs. If you choose to implement larger key sizes, keep in mind that
    570      1.1  christos larger key sizes result in larger DNS responses, which this may mean more
    571      1.1  christos load on network resources. Depending on your network configuration, end users
    572      1.1  christos may even experience resolution failures due to the increased response
    573      1.1  christos sizes, as discussed in :ref:`whats_edns0_all_about`.
    574      1.1  christos 
    575      1.1  christos ECDSA key sizes can be much smaller for the same level of security, e.g.,
    576      1.1  christos an ECDSA key length of 224 bits provides the same level of security as a
    577      1.1  christos 2048-bit RSA key. Currently BIND 9 sets a key size of 256 for all ECDSA keys.
    578      1.1  christos 
    579      1.1  christos .. _advanced_discussions_key_storage:
    580      1.1  christos 
    581      1.1  christos Key Storage
    582      1.1  christos ^^^^^^^^^^^
    583      1.1  christos 
    584      1.1  christos Public Key Storage
    585      1.1  christos ++++++++++++++++++
    586      1.1  christos 
    587      1.1  christos The beauty of a public key cryptography system is that the public key
    588      1.1  christos portion can and should be distributed to as many people as possible. As
    589      1.1  christos the administrator, you may want to keep the public keys on an easily
    590      1.1  christos accessible file system for operational ease, but there is no need to
    591      1.1  christos securely store them, since both ZSK and KSK public keys are published in
    592      1.1  christos the zone data as DNSKEY resource records.
    593      1.1  christos 
    594      1.1  christos Additionally, a hash of the KSK public key is also uploaded to the
    595      1.1  christos parent zone (see :ref:`working_with_parent_zone` for more details),
    596      1.1  christos and is published by the parent zone as DS records.
    597      1.1  christos 
    598      1.1  christos Private Key Storage
    599      1.1  christos +++++++++++++++++++
    600      1.1  christos 
    601      1.1  christos Ideally, private keys should be stored offline, in secure devices such
    602      1.1  christos as a smart card. Operationally, however, this creates certain
    603      1.1  christos challenges, since the private key is needed to create RRSIG resource
    604      1.1  christos records, and it is a hassle to bring the private key out of
    605      1.1  christos storage every time the zone file changes or signatures expire.
    606      1.1  christos 
    607      1.1  christos A common approach to strike the balance between security and
    608      1.1  christos practicality is to have two sets of keys: a ZSK set and a KSK set. A ZSK
    609      1.1  christos private key is used to sign zone data, and can be kept online for ease
    610      1.1  christos of use, while a KSK private key is used to sign just the DNSKEY (the ZSK); it is
    611      1.1  christos used less frequently, and can be stored in a much more secure and
    612      1.1  christos restricted fashion.
    613      1.1  christos 
    614      1.1  christos For example, a KSK private key stored on a USB flash drive that is kept
    615      1.1  christos in a fireproof safe, only brought online once a year to sign a new pair
    616      1.1  christos of ZSKs, combined with a ZSK private key stored on the network
    617      1.1  christos file system and available for routine use, may be a good balance between
    618      1.1  christos operational flexibility and security.
    619      1.1  christos 
    620      1.1  christos For more information on changing keys, please see
    621      1.1  christos :ref:`key_rollovers`.
    622      1.1  christos 
    623      1.1  christos .. _hardware_security_modules:
    624      1.1  christos 
    625      1.1  christos Hardware Security Modules (HSMs)
    626      1.1  christos ++++++++++++++++++++++++++++++++
    627      1.1  christos 
    628      1.1  christos A Hardware Security Module (HSM) may come in different shapes and sizes,
    629      1.1  christos but as the name indicates, it is a physical device or devices, usually
    630      1.1  christos with some or all of the following features:
    631      1.1  christos 
    632      1.1  christos -  Tamper-resistant key storage
    633      1.1  christos 
    634      1.1  christos -  Strong random-number generation
    635      1.1  christos 
    636      1.1  christos -  Hardware for faster cryptographic operations
    637      1.1  christos 
    638      1.1  christos Most organizations do not incorporate HSMs into their security practices
    639      1.1  christos due to cost and the added operational complexity.
    640      1.1  christos 
    641      1.1  christos BIND supports Public Key Cryptography Standard #11 (PKCS #11) for
    642      1.1  christos communication with HSMs and other cryptographic support devices. For
    643      1.1  christos more information on how to configure BIND to work with an HSM, please
    644      1.1  christos refer to the `BIND 9 Administrator Reference
    645      1.1  christos Manual <https://bind9.readthedocs.io/en/latest/index.html>`_.
    646      1.1  christos 
    647      1.1  christos .. _advanced_discussions_key_management:
    648      1.1  christos 
    649      1.1  christos Rollovers
    650      1.1  christos ~~~~~~~~~
    651      1.1  christos 
    652      1.1  christos .. _key_rollovers:
    653      1.1  christos 
    654      1.1  christos Key Rollovers
    655      1.1  christos ^^^^^^^^^^^^^
    656      1.1  christos 
    657      1.1  christos A key rollover is where one key in a zone is replaced by a new one.
    658      1.1  christos There are arguments for and against regularly rolling keys. In essence
    659      1.1  christos these are:
    660      1.1  christos 
    661      1.1  christos Pros:
    662      1.1  christos 
    663      1.1  christos 1. Regularly changing the key hinders attempts at determination of the
    664      1.1  christos    private part of the key by cryptanalysis of signatures.
    665      1.1  christos 
    666      1.1  christos 2. It gives administrators practice at changing a key; should a key ever need to be
    667      1.1  christos    changed in an emergency, they would not be doing it for the first time.
    668      1.1  christos 
    669      1.1  christos Cons:
    670      1.1  christos 
    671      1.1  christos 1. A lot of effort is required to hack a key, and there are probably
    672      1.1  christos    easier ways of obtaining it, e.g., by breaking into the systems on
    673      1.1  christos    which it is stored.
    674      1.1  christos 
    675      1.1  christos 2. Rolling the key adds complexity to the system and introduces the
    676      1.1  christos    possibility of error. We are more likely to
    677      1.1  christos    have an interruption to our service than if we had not rolled it.
    678      1.1  christos 
    679      1.1  christos Whether and when to roll the key is up to you. How serious would the
    680      1.1  christos damage be if a key were compromised without you knowing about it? How
    681      1.1  christos serious would a key roll failure be?
    682      1.1  christos 
    683      1.1  christos Before going any further, it is worth noting that if you sign your zone
    684      1.1  christos with either of the fully automatic methods (described in ref:`signing_alternative_ways`),
    685      1.1  christos you don't really need to
    686      1.1  christos concern yourself with the details of a key rollover: BIND 9 takes care of
    687      1.1  christos it all for you. If you are doing a manual key roll or are setting up the
    688      1.1  christos keys for a semi-automatic key rollover, you do need to familiarize yourself
    689      1.1  christos with the various steps involved and the timing details.
    690      1.1  christos 
    691      1.1  christos Rolling a key is not as simple as replacing the DNSKEY statement in the
    692      1.1  christos zone. That is an essential part of it, but timing is everything. For
    693      1.1  christos example, suppose that we run the ``example.com`` zone and that a friend
    694      1.1  christos queries for the AAAA record of ``www.example.com``. As part of the
    695      1.1  christos resolution process (described in
    696      1.1  christos :ref:`how_does_dnssec_change_dns_lookup`), their recursive server
    697      1.1  christos looks up the keys for the ``example.com`` zone and uses them to verify
    698      1.1  christos the signature associated with the AAAA record. We'll assume that the
    699      1.1  christos records validated successfully, so they can use the
    700      1.1  christos address to visit ``example.com``'s website.
    701      1.1  christos 
    702      1.1  christos Let's also assume that immediately after the lookup, we want to roll the ZSK
    703      1.1  christos for ``example.com``. Our first attempt at this is to remove the old
    704      1.1  christos DNSKEY record and signatures, add a new DNSKEY record, and re-sign the
    705      1.1  christos zone with it. So one minute our server is serving the old DNSKEY and
    706      1.1  christos records signed with the old key, and the next minute it is serving the
    707      1.1  christos new key and records signed with it. We've achieved our goal - we are
    708      1.1  christos serving a zone signed with the new keys; to check this is really the
    709      1.1  christos case, we booted up our laptop and looked up the AAAA record
    710      1.1  christos ``ftp.example.com``. The lookup succeeded so all must be well. Or is it?
    711      1.1  christos Just to be sure, we called our friend and asked them to check. They
    712      1.1  christos tried to lookup ``ftp.example.com`` but got a SERVFAIL response from
    713      1.1  christos their recursive server. What's going on?
    714      1.1  christos 
    715      1.1  christos The answer, in a word, is "caching." When our friend looked up
    716      1.1  christos ``www.example.com``, their recursive server retrieved and cached
    717      1.1  christos not only the AAAA record, but also a lot of other records. It cached
    718      1.1  christos the NS records for ``com`` and ``example.com``, as well as
    719      1.1  christos the AAAA (and A) records for those name servers (and this action may, in turn, have
    720      1.1  christos caused the lookup and caching of other NS and AAAA/A records). Most
    721      1.1  christos importantly for this example, it also looked up and cached the DNSKEY
    722      1.1  christos records for the root, ``com``, and ``example.com`` zones. When a query
    723      1.1  christos was made for ``ftp.example.com``, the recursive server believed it
    724      1.1  christos already had most of the information
    725      1.1  christos we needed. It knew what nameservers served ``example.com`` and their
    726      1.1  christos addresses, so it went directly to one of those to get the AAAA record for
    727      1.1  christos ``ftp.example.com`` and its associated signature. But when it tried to
    728      1.1  christos validate the signature, it used the cached copy of the DNSKEY, and that
    729      1.1  christos is when our friend had the problem. Their recursive server had a copy of
    730      1.1  christos the old DNSKEY in its cache, but the AAAA record for ``ftp.example.com``
    731      1.1  christos was signed with the new key. So, not surprisingly, the signature could not
    732      1.1  christos validate.
    733      1.1  christos 
    734      1.1  christos How should we roll the keys for ``example.com``? A clue to the
    735      1.1  christos answer is to note that the problem came about because the DNSKEY records
    736      1.1  christos were cached by the recursive server. What would have happened had our
    737      1.1  christos friend flushed the DNSKEY records from the recursive server's cache before
    738      1.1  christos making the query? That would have worked; those records would have been
    739      1.1  christos retrieved from ``example.com``'s nameservers at the same time that we
    740      1.1  christos retrieved the AAAA record for ``ftp.example.com``. Our friend's server would have
    741      1.1  christos obtained the new key along with the AAAA record and associated signature
    742      1.1  christos created with the new key, and all would have been well.
    743      1.1  christos 
    744      1.1  christos As it is obviously impossible for us to notify all recursive server
    745      1.1  christos operators to flush our DNSKEY records every time we roll a key, we must
    746      1.1  christos use another solution. That solution is to wait
    747      1.1  christos for the recursive servers to remove old records from caches when they
    748      1.1  christos reach their TTL. How exactly we do this depends on whether we are trying
    749      1.1  christos to roll a ZSK, a KSK, or a CSK.
    750      1.1  christos 
    751      1.1  christos .. _zsk_rollover_methods:
    752      1.1  christos 
    753      1.1  christos ZSK Rollover Methods
    754      1.1  christos ++++++++++++++++++++
    755      1.1  christos 
    756      1.1  christos The ZSK can be rolled in one of the following two ways:
    757      1.1  christos 
    758      1.1  christos 1. *Pre-Publication*: Publish the new ZSK into zone data before it is
    759      1.1  christos    actually used. Wait at least one TTL interval, so the world's recursive servers
    760      1.1  christos    know about both keys, then stop using the old key and generate a new
    761      1.1  christos    RRSIG using the new key. Wait at least another TTL, so the cached old
    762      1.1  christos    key data is expunged from the world's recursive servers, and then remove
    763      1.1  christos    the old key.
    764      1.1  christos 
    765      1.1  christos    The benefit of the pre-publication approach is it does not
    766      1.1  christos    dramatically increase the zone size; however, the duration of the rollover
    767      1.1  christos    is longer. If insufficient time has passed after the new ZSK is
    768      1.1  christos    published, some resolvers may only have the old ZSK cached when the
    769      1.1  christos    new RRSIG records are published, and validation may fail. This is the
    770      1.1  christos    method described in :ref:`recipes_zsk_rollover`.
    771      1.1  christos 
    772      1.1  christos 2. *Double-Signature*: Publish the new ZSK and new RRSIG, essentially
    773      1.1  christos    doubling the size of the zone. Wait at least one TTL interval, and then remove
    774      1.1  christos    the old ZSK and old RRSIG.
    775      1.1  christos 
    776      1.1  christos    The benefit of the double-signature approach is that it is easier to
    777      1.1  christos    understand and execute, but it causes a significantly increased zone size
    778      1.1  christos    during a rollover event.
    779      1.1  christos 
    780      1.1  christos .. _ksk_rollover_methods:
    781      1.1  christos 
    782      1.1  christos KSK Rollover Methods
    783      1.1  christos ++++++++++++++++++++
    784      1.1  christos 
    785      1.1  christos Rolling the KSK requires interaction with the parent zone, so
    786      1.1  christos operationally this may be more complex than rolling ZSKs. There are
    787      1.1  christos three methods of rolling the KSK:
    788      1.1  christos 
    789      1.1  christos 1. *Double-KSK*: Add the new KSK to the DNSKEY RRset, which is then
    790      1.1  christos    signed with both the old and new keys. After waiting for the old RRset
    791      1.1  christos    to expire from caches, change the DS record in the parent zone.
    792      1.1  christos    After waiting a further TTL interval for this change to be reflected in
    793      1.1  christos    caches, remove the old key from the RRset.
    794      1.1  christos 
    795      1.1  christos    Basically, the new KSK is added first at the child zone and
    796      1.1  christos    used to sign the DNSKEY; then the DS record is changed, followed by the
    797      1.1  christos    removal of the old KSK. Double-KSK keeps the interaction with the
    798      1.1  christos    parent zone to a minimum, but for the duration of the rollover, the
    799      1.1  christos    size of the DNSKEY RRset is increased.
    800      1.1  christos 
    801      1.1  christos 2. *Double-DS*: Publish the new DS record. After waiting for this
    802      1.1  christos    change to propagate into caches, change the KSK. After a further TTL
    803      1.1  christos    interval during which the old DNSKEY RRset expires from caches, remove the
    804      1.1  christos    old DS record.
    805      1.1  christos 
    806      1.1  christos    Double-DS is the reverse of Double-KSK: the new DS is published at
    807      1.1  christos    the parent first, then the KSK at the child is updated, then
    808      1.1  christos    the old DS at the parent is removed. The benefit is that the size of the DNSKEY
    809      1.1  christos    RRset is kept to a minimum, but interactions with the parent zone are
    810      1.1  christos    increased to two events. This is the method described in
    811      1.1  christos    :ref:`recipes_ksk_rollover`.
    812      1.1  christos 
    813      1.1  christos 3. *Double-RRset*: Add the new KSK to the DNSKEY RRset, which is
    814      1.1  christos    then signed with both the old and new key, and add the new DS record
    815      1.1  christos    to the parent zone. After waiting a suitable interval for the
    816      1.1  christos    old DS and DNSKEY RRsets to expire from caches, remove the old DNSKEY and
    817      1.1  christos    old DS record.
    818      1.1  christos 
    819      1.1  christos    Double-RRset is the fastest way to roll the KSK (i.e., it has the shortest rollover
    820      1.1  christos    time), but has the drawbacks of both of the other methods: a larger
    821      1.1  christos    DNSKEY RRset and two interactions with the parent.
    822      1.1  christos 
    823      1.1  christos .. _csk_rollover_methods:
    824      1.1  christos 
    825      1.1  christos CSK Rollover Methods
    826      1.1  christos ++++++++++++++++++++
    827      1.1  christos 
    828      1.1  christos Rolling the CSK is more complex than rolling either the ZSK or KSK, as
    829      1.1  christos the timing constraints relating to both the parent zone and the caching
    830      1.1  christos of records by downstream recursive servers must be taken into
    831      1.1  christos account. There are numerous possible methods that are a combination of ZSK
    832      1.1  christos rollover and KSK rollover methods. BIND 9 automatic signing uses a
    833      1.1  christos combination of ZSK Pre-Publication and Double-KSK rollover.
    834      1.1  christos 
    835      1.1  christos .. _advanced_discussions_emergency_rollovers:
    836      1.1  christos 
    837      1.1  christos Emergency Key Rollovers
    838      1.1  christos ^^^^^^^^^^^^^^^^^^^^^^^
    839      1.1  christos 
    840      1.1  christos Keys are generally rolled on a regular schedule - if you choose
    841      1.1  christos to roll them at all. But sometimes, you may have to rollover keys
    842      1.1  christos out-of-schedule due to a security incident. The aim of an emergency
    843      1.1  christos rollover is to re-sign the zone with a new key as soon as possible, because
    844      1.1  christos when a key is suspected of being compromised, a malicious attacker (or
    845      1.1  christos anyone who has access to the key) could impersonate your server and trick other
    846      1.1  christos validating resolvers into believing that they are receiving authentic,
    847      1.1  christos validated answers.
    848      1.1  christos 
    849      1.1  christos During an emergency rollover, follow the same operational
    850      1.1  christos procedures described in :ref:`recipes_rollovers`, with the added
    851      1.1  christos task of reducing the TTL of the current active (potentially compromised) DNSKEY
    852      1.1  christos RRset, in an attempt to phase out the compromised key faster before the new
    853      1.1  christos key takes effect. The time frame should be significantly reduced from
    854      1.1  christos the 30-days-apart example, since you probably do not want to wait up to
    855      1.1  christos 60 days for the compromised key to be removed from your zone.
    856      1.1  christos 
    857      1.1  christos Another method is to carry a spare key with you at all times. If
    858      1.1  christos you have a second key pre-published and that one
    859      1.1  christos is not compromised at the same time as the first key,
    860      1.1  christos you could save yourself some time by immediately
    861      1.1  christos activating the spare key if the active
    862      1.1  christos key is compromised. With pre-publication, all validating resolvers should already
    863      1.1  christos have this spare key cached, thus saving you some time.
    864      1.1  christos 
    865      1.1  christos With a KSK emergency rollover, you also need to consider factors
    866      1.1  christos related to your parent zone, such as how quickly they can remove the old
    867      1.1  christos DS records and publish the new ones.
    868      1.1  christos 
    869      1.1  christos As with many other facets of DNSSEC, there are multiple aspects to take into
    870      1.1  christos account when it comes to emergency key rollovers. For more in-depth
    871      1.1  christos considerations, please check out :rfc:`7583`.
    872      1.1  christos 
    873      1.1  christos .. _advanced_discussions_DNSKEY_algorithm_rollovers:
    874      1.1  christos 
    875      1.1  christos Algorithm Rollovers
    876      1.1  christos ^^^^^^^^^^^^^^^^^^^
    877      1.1  christos 
    878      1.1  christos From time to time, new digital signature algorithms with improved
    879      1.1  christos security are introduced, and it may be desirable for administrators to
    880      1.1  christos roll over DNSKEYs to a new algorithm, e.g., from RSASHA1 (algorithm 5 or
    881      1.1  christos 7) to RSASHA256 (algorithm 8). The algorithm rollover steps must be followed with
    882      1.1  christos care to avoid breaking DNSSEC validation.
    883      1.1  christos 
    884  1.1.1.3  christos If you are managing DNSSEC by using the :any:`dnssec-policy` configuration,
    885  1.1.1.3  christos :iscman:`named` handles the rollover for you. Simply change the algorithm
    886  1.1.1.3  christos for the relevant keys, and :iscman:`named` uses the new algorithm when the
    887      1.1  christos key is next rolled. It performs a smooth transition to the new
    888      1.1  christos algorithm, ensuring that the zone remains valid throughout rollover.
    889      1.1  christos 
    890      1.1  christos If you are using other methods to sign the zone, the administrator needs to do more work. As
    891      1.1  christos with other key rollovers, when the zone is a primary zone, an algorithm
    892      1.1  christos rollover can be accomplished using dynamic updates or automatic key
    893      1.1  christos rollovers. For secondary zones, only automatic key rollovers are
    894  1.1.1.3  christos possible, but the :iscman:`dnssec-settime` utility can be used to control the
    895      1.1  christos timing.
    896      1.1  christos 
    897      1.1  christos In any case, the first step is to put DNSKEYs in place using the new algorithm.
    898      1.1  christos You must generate the ``K*`` files for the new algorithm and put
    899  1.1.1.3  christos them in the zone's key directory, where :iscman:`named` can access them. Take
    900      1.1  christos care to set appropriate ownership and permissions on the keys. If the
    901  1.1.1.3  christos :any:`auto-dnssec` zone option is set to ``maintain``, :iscman:`named`
    902      1.1  christos automatically signs the zone with the new keys, based on their timing
    903  1.1.1.3  christos metadata when the :any:`dnssec-loadkeys-interval` elapses or when you issue the
    904  1.1.1.3  christos :option:`rndc loadkeys` command. Otherwise, for primary zones, you can use
    905  1.1.1.3  christos :iscman:`nsupdate` to add the new DNSKEYs to the zone; this causes :iscman:`named`
    906      1.1  christos to use them to sign the zone. For secondary zones, e.g., on a
    907  1.1.1.3  christos "bump in the wire" signing server, :iscman:`nsupdate` cannot be used.
    908      1.1  christos 
    909      1.1  christos Once the zone has been signed by the new DNSKEYs (and you have waited
    910      1.1  christos for at least one TTL period), you must inform the parent zone and any trust
    911      1.1  christos anchor repositories of the new KSKs, e.g., you might place DS records in
    912      1.1  christos the parent zone through your DNS registrar's website.
    913      1.1  christos 
    914      1.1  christos Before starting to remove the old algorithm from a zone, you must allow
    915      1.1  christos the maximum TTL on its DS records in the parent zone to expire. This
    916      1.1  christos assures that any subsequent queries retrieve the new DS records
    917      1.1  christos for the new algorithm. After the TTL has expired, you can remove the DS
    918      1.1  christos records for the old algorithm from the parent zone and any trust anchor
    919      1.1  christos repositories. You must then allow another maximum TTL interval to elapse
    920      1.1  christos so that the old DS records disappear from all resolver caches.
    921      1.1  christos 
    922      1.1  christos The next step is to remove the DNSKEYs using the old algorithm from your
    923  1.1.1.3  christos zone. Again this can be accomplished using :iscman:`nsupdate` to delete the
    924      1.1  christos old DNSKEYs (for primary zones only) or by automatic key rollover when
    925  1.1.1.3  christos :any:`auto-dnssec` is set to ``maintain``. You can cause the automatic key
    926  1.1.1.3  christos rollover to take place immediately by using the :iscman:`dnssec-settime`
    927      1.1  christos utility to set the *Delete* date on all keys to any time in the past.
    928  1.1.1.3  christos (See the :option:`dnssec-settime -D date/offset <dnssec-settime -D>` option.)
    929      1.1  christos 
    930  1.1.1.3  christos After adjusting the timing metadata, the :option:`rndc loadkeys` command
    931  1.1.1.3  christos causes :iscman:`named` to remove the DNSKEYs and
    932      1.1  christos RRSIGs for the old algorithm from the zone. Note also that with the
    933  1.1.1.3  christos :iscman:`nsupdate` method, removing the DNSKEYs also causes :iscman:`named` to
    934      1.1  christos remove the associated RRSIGs automatically.
    935      1.1  christos 
    936      1.1  christos Once you have verified that the old DNSKEYs and RRSIGs have been removed
    937      1.1  christos from the zone, the final (optional) step is to remove the key files for
    938      1.1  christos the old algorithm from the key directory.
    939      1.1  christos 
    940      1.1  christos Other Topics
    941      1.1  christos ~~~~~~~~~~~~
    942      1.1  christos 
    943      1.1  christos DNSSEC and Dynamic Updates
    944      1.1  christos ^^^^^^^^^^^^^^^^^^^^^^^^^^
    945      1.1  christos 
    946      1.1  christos Dynamic DNS (DDNS) is actually independent of DNSSEC. DDNS provides a
    947      1.1  christos mechanism, separate from editing the zone file or zone database, to edit DNS
    948      1.1  christos data. Most DNS clients and servers are able to handle dynamic
    949      1.1  christos updates, and DDNS can also be integrated as part of your DHCP
    950      1.1  christos environment.
    951      1.1  christos 
    952      1.1  christos When you have both DNSSEC and dynamic updates in your environment,
    953      1.1  christos updating zone data works the same way as with traditional (insecure)
    954  1.1.1.3  christos DNS: you can use :option:`rndc freeze` before editing the zone file, and
    955  1.1.1.3  christos :option:`rndc thaw` when you have finished editing, or you can use the
    956  1.1.1.3  christos command :iscman:`nsupdate` to add, edit, or remove records like this:
    957      1.1  christos 
    958      1.1  christos ::
    959      1.1  christos 
    960      1.1  christos    $ nsupdate
    961      1.1  christos    > server 192.168.1.13
    962      1.1  christos    > update add xyz.example.com. 300 IN A 1.1.1.1
    963      1.1  christos    > send
    964      1.1  christos    > quit
    965      1.1  christos 
    966  1.1.1.3  christos The examples provided in this guide make :iscman:`named` automatically
    967      1.1  christos re-sign the zone whenever its content has changed. If you decide to sign
    968      1.1  christos your own zone file manually, you need to remember to execute the
    969  1.1.1.3  christos :iscman:`dnssec-signzone` command whenever your zone file has been updated.
    970      1.1  christos 
    971      1.1  christos As far as system resources and performance are concerned, be mindful that
    972      1.1  christos with a DNSSEC zone that changes frequently, every time the zone
    973      1.1  christos changes your system is executing a series of cryptographic operations
    974      1.1  christos to (re)generate signatures and NSEC or NSEC3 records.
    975      1.1  christos 
    976      1.1  christos .. _dnssec_on_private_networks:
    977      1.1  christos 
    978      1.1  christos DNSSEC on Private Networks
    979      1.1  christos ^^^^^^^^^^^^^^^^^^^^^^^^^^
    980      1.1  christos 
    981      1.1  christos Let's clarify what we mean: in this section, "private networks" really refers to
    982      1.1  christos a private or internal DNS view. Most DNS products offer the ability to
    983      1.1  christos have different versions of DNS answers, depending on the origin of the
    984      1.1  christos query. This feature is often called "DNS views" or "split DNS," and is most
    985      1.1  christos commonly implemented as an "internal" versus an "external" setup.
    986      1.1  christos 
    987      1.1  christos For instance, your organization may have a version of ``example.com``
    988      1.1  christos that is offered to the world, and its names most likely resolve to
    989      1.1  christos publicly reachable IP addresses. You may also have an internal version
    990      1.1  christos of ``example.com`` that is only accessible when you are on the company's
    991      1.1  christos private networks or via a VPN connection. These private networks typically
    992      1.1  christos fall under 10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16 for IPv4.
    993      1.1  christos 
    994      1.1  christos So what if you want to offer DNSSEC for your internal version of
    995      1.1  christos ``example.com``? This can be done: the golden rule is to use the same
    996      1.1  christos key for both the internal and external versions of the zones. This
    997      1.1  christos avoids problems that can occur when machines (e.g., laptops) move
    998      1.1  christos between accessing the internal and external zones, when it is possible
    999      1.1  christos that they may have cached records from the wrong zone.
   1000      1.1  christos 
   1001      1.1  christos .. _introduction_to_dane:
   1002      1.1  christos 
   1003      1.1  christos Introduction to DANE
   1004      1.1  christos ^^^^^^^^^^^^^^^^^^^^
   1005      1.1  christos 
   1006      1.1  christos With your DNS infrastructure secured with DNSSEC, information can
   1007      1.1  christos now be stored in DNS and its integrity and authenticity can be proved.
   1008      1.1  christos One of the new features that takes advantage of this is the DNS-Based
   1009      1.1  christos Authentication of Named Entities, or DANE. This improves security in a
   1010      1.1  christos number of ways, including:
   1011      1.1  christos 
   1012      1.1  christos -  The ability to store self-signed X.509 certificates and bypass having to pay a third
   1013      1.1  christos    party (such as a Certificate Authority) to sign the certificates
   1014      1.1  christos    (:rfc:`6698`).
   1015      1.1  christos 
   1016      1.1  christos -  Improved security for clients connecting to mail servers (:rfc:`7672`).
   1017      1.1  christos 
   1018      1.1  christos -  A secure way of getting public PGP keys (:rfc:`7929`).
   1019      1.1  christos 
   1020      1.1  christos Disadvantages of DNSSEC
   1021      1.1  christos ~~~~~~~~~~~~~~~~~~~~~~~
   1022      1.1  christos 
   1023      1.1  christos DNSSEC, like many things in this world, is not without its problems.
   1024      1.1  christos Below are a few challenges and disadvantages that DNSSEC faces.
   1025      1.1  christos 
   1026      1.1  christos 1. *Increased, well, everything*: With DNSSEC, signed zones are larger,
   1027      1.1  christos    thus taking up more disk space; for DNSSEC-aware servers, the
   1028      1.1  christos    additional cryptographic computation usually results in increased
   1029      1.1  christos    system load; and the network packets are bigger, possibly putting
   1030      1.1  christos    more strains on the network infrastructure.
   1031      1.1  christos 
   1032      1.1  christos 2. *Different security considerations*: DNSSEC addresses many security
   1033      1.1  christos    concerns, most notably cache poisoning. But at the same time, it may
   1034      1.1  christos    introduce a set of different security considerations, such as
   1035      1.1  christos    amplification attack and zone enumeration through NSEC. These
   1036      1.1  christos    concerns are still being identified and addressed by the Internet
   1037      1.1  christos    community.
   1038      1.1  christos 
   1039      1.1  christos 3. *More complexity*: If you have read this far, you have probably already
   1040      1.1  christos    concluded this yourself. With additional resource records, keys,
   1041      1.1  christos    signatures, and rotations, DNSSEC adds many more moving pieces on top of
   1042      1.1  christos    the existing DNS machine. The job of the DNS administrator changes,
   1043      1.1  christos    as DNS becomes the new secure repository of everything from spam
   1044      1.1  christos    avoidance to encryption keys, and the amount of work involved to
   1045      1.1  christos    troubleshoot a DNS-related issue becomes more challenging.
   1046      1.1  christos 
   1047      1.1  christos 4. *Increased fragility*: The increased complexity means more
   1048      1.1  christos    opportunities for things to go wrong. Before DNSSEC, DNS
   1049      1.1  christos    was essentially "add something to the zone and forget it." With DNSSEC,
   1050      1.1  christos    each new component - re-signing, key rollover, interaction with
   1051      1.1  christos    parent zone, key management - adds more opportunity for error. It is
   1052      1.1  christos    entirely possible that a failure to validate a name may come down to
   1053      1.1  christos    errors on the part of one or more zone operators rather than the
   1054      1.1  christos    result of a deliberate attack on the DNS.
   1055      1.1  christos 
   1056      1.1  christos 5. *New maintenance tasks*: Even if your new secure DNS infrastructure
   1057      1.1  christos    runs without any hiccups or security breaches, it still requires
   1058      1.1  christos    regular attention, from re-signing to key rollovers. While most of
   1059      1.1  christos    these can be automated, some of the tasks, such as KSK rollover,
   1060      1.1  christos    remain manual for the time being.
   1061      1.1  christos 
   1062      1.1  christos 6. *Not enough people are using it today*: While it's estimated (as of
   1063      1.1  christos    mid-2020) that roughly 30% of the global Internet DNS traffic is
   1064      1.1  christos    validating  [#]_ , that doesn't mean that many of the DNS zones are
   1065      1.1  christos    actually signed. What this means is, even if your company's zone is
   1066      1.1  christos    signed today, fewer than 30% of the Internet's servers are taking
   1067      1.1  christos    advantage of this extra security. It gets worse: with less than 1.5%
   1068  1.1.1.2  christos    of the ``com.`` domains signed, even if your DNSSEC validation is enabled today,
   1069      1.1  christos    it's not likely to buy you or your users a whole lot more protection
   1070      1.1  christos    until these popular domain names decide to sign their zones.
   1071      1.1  christos 
   1072      1.1  christos The last point may have more impact than you realize. Consider this:
   1073      1.1  christos HTTP and HTTPS make up the majority of traffic on the Internet. While you may have
   1074      1.1  christos secured your DNS infrastructure through DNSSEC, if your web hosting is
   1075      1.1  christos outsourced to a third party that does not yet support DNSSEC in its
   1076      1.1  christos own domain, or if your web page loads contents and components from
   1077      1.1  christos insecure domains, end users may experience validation problems when
   1078      1.1  christos trying to access your web page. For example, although you may have signed
   1079      1.1  christos the zone ``company.com``, the web address ``www.company.com`` may actually be a
   1080      1.1  christos CNAME to ``foo.random-cloud-provider.com``. As long as
   1081      1.1  christos ``random-cloud-provider.com`` remains an insecure DNS zone, users cannot
   1082      1.1  christos fully validate everything when they visit your web page and could be
   1083      1.1  christos redirected elsewhere by a cache poisoning attack.
   1084      1.1  christos 
   1085      1.1  christos .. [#]
   1086      1.1  christos    Based on APNIC statistics at
   1087      1.1  christos    `<https://stats.labs.apnic.net/dnssec/XA>`__
   1088