Happy holidays from ISC!
ISC is fortunate to have staff members in so many different countries around the world: our software development benefits from all the different perspectives - and we benefit personally!
Read postUpdate September 28, 2017 - ICANN has decided to postpone the October 11th key rollover step. No new schedule is available yet. https://www.icann.org/news/announcement-2017-09-27-en
Update August 2, 2017 - see this detailed more recent description of the Root KSK Rollover in BIND.
If you manage a DNS resolver, you may need to take action due to the upcoming root key rollover.
There are some risks in all configurations, discussed below.
The DNS root key is a cryptographic public-private key pair used for DNSSEC signing of the DNS root zone records. The root zone key-signing key (KSK) serves as the anchor for the “chain of trust” that enables DNS resolvers to validate the authenticity of any signed data in the DNS. The integrity of the DNS depends on a secure root key.
In 2017 IANA will replace the current key with a new key. It is important to roll cryptographic keys periodically to help protect them from compromise. In this case, since this is the very first time the key has been changed since the DNS root was initially signed in 2010, it is also a test of the rollover process.
Matt Larson presentation at DNS-OARC, Dallas, TX, Oct 2016
The rollover includes multiple steps. It has already begun, and will continue through 2017.
Key dates are:
(Dates for these steps are published by ICANN at https://www.icann.org/resources/pages/ksk-rollover/#overview
DNS Message Size Increase
The first impact is increased size of DNS messages containing the root keys. The process of replacing the 2010 key with the 2017 key requires a period of overlap, during which the 2010 key is still used for signing, but the 2017 key is also present, so that systems can learn the 2017 key and “trust” it, based on the 2010 key. While both keys are present, they will increase the size of some messages in the DNS. Even after the 2010 key is removed, the messages will still be larger than they were before the key rollover was started, because the 2017 key is larger than the 2010 key. (The larger 2017 key is of course harder to crack, and therefore more secure.) While all the effects of this increase in message size are difficult to predict, this issue has been studied extensively and is not believed to pose any significant problem. (see ICANN’s external design team’s ICANN Root Zone KSK Rollover Plan for detailed analysis or Geoff Huston’s more recent blog posting on the impact of the root key rollover). In addition to that, ICANN’s operational plans are also available.
Impact on Validating Resolvers
Of much greater concern is the possible impact on validating resolvers. All DNS resolvers that are currently validating, or that wish to enable DNSSEC validation, must be updated with the public half of the 2017 root KSK, and they have to switch from using the 2010 key to the 2017 key for validation at the right time. This is an issue that applies to any DNS software, not just BIND. A query to a resolver that tries to use the 2010 key to validate after the rollover will fail, and any signed DNS data will not be available to those users. This would mean a blackout of DNSSEC-signed zones for users of validating resolvers that don’t adopt the updated key. Since the root zone is signed, this would effectively blackout the root, and with it, the entire DNS tree, for those users.
It is not difficult to ensure your DNSSEC-validating BIND resolver is properly updated to track the root key rollover. BIND stores the public half of the root key in a local trust anchor database. This database is created when you install BIND and is initialized with the bind.keys file included in the BIND distribution. After initial installation, BIND provides two ways to manage that database: trusted-keys and managed-keys. What, if anything, you need to do during the root key rollover of 2017 depends on which method you are using. We recommend the use of managed-keys, because with managed-keys, BIND will self-update when the root key changes. If you are using BIND with trusted-keys, you will need to update your configuration prior to October, 2017, to avoid a potentially serious service impact.
No Impact on Authoritative Publishers
If you are managing an authoritative BIND system, the root key rollover should not have any impact on your operations. It would still be wise to be aware of the timing of the rollover, particularly if you are signing your zones.
Managed-Keys is the newer, recommended method for maintaining the trust anchor database, and it is the default configuration. If you used the “dnssec-validation auto;” shortcut, that command will have enabled managed-keys for you.
The managed-keys method was introduced in BIND 9.7.0 and permits BIND to automatically update the trust anchors. A BIND resolver configured to use managed-keys will initialize itself upon installation with a default anchor. This anchor comes from a supplied initial-key, if you specify one in the managed-keys statement, the bind.keys file or a built-in default trust anchor, if neither of the other seeds are provided. During initialization, BIND fetches the DNSKEY RRset directly from the zone apex, and validates it using the key specified in the managed-keys statement. If the DNSKEY RRset is validly signed, then it is used as the basis for a new managed keys database.
After the initialization, when BIND is restarted, if there is a keys database, BIND will use that, rather than the key specified in the bind.keys file. The bind.keys file is not consulted, or used, after initial installation, so changing the bind.keys file on a BIND server that is already initialized to use managed-keys will not have any useful effect.
Initializing the BIND managed-keys database
After it is running, BIND observes if there are new trust anchors being introduced for the root, and downloads them and updates the trust anchor database. If you are using managed-keys, BIND will obtain the new root KSK automatically, once it is published in July 2017. A running resolver will query the root periodically for the trust anchor point, whether anyone is querying the resolver or not, so this is not dependent on having a lot of traffic.
The process of updating and putting the new key into service is described in IETF RFC 5011, which BIND supports.
What to do if you are using BIND with managed-keys
From the ARM:
If named is not configured to use views, then managed keys for the server will be tracked in a single file called managed-keys.bind. Otherwise, managed keys will be tracked in separate files, one file per view; each file name will be the view name (or, if it contains characters that are incompatible with use as a file name, the SHA256 hash of the view name), followed by the extension .mkeys.
Trusted-Keys is the older, manual method for maintaining the trust anchors. ISC recommends against using trusted-keys for the root zone unless you are an expert user with a specific use case requiring manual key management. If you are still using trusted-keys, the best way to avoid an outage during the upcoming key rollover is to change from trusted-keys to managed-keys.
With the trusted-keys method, the system administrator must manually update the bind.keys file, which BIND uses to create the trust anchor database. When you download BIND, there is a copy of the current bind.keys file in the root directory, and another is always available from the ISC website. This file contains the public half of the root KSK.
What to do if you are using BIND with trusted-keys
If you can, the best thing would be to update your configuration to use managed-keys, at least for the root zone key. If you choose this option, tt is essential to make this change before the key rollover occurs in October, so that BIND can successfully initialize managed-keys with the 2010 key prior to the rollover.
The easiest way to enable managed-keys is to simply use the shortcut, dnssec-validation auto; . You must also have a bind.keys file with the 2010 key included, which you can get by downloading a fresh copy of BIND, or by just downloading and installing the keys file itself. To initialize the managed-keys database, restart BIND with managed-keys enabled and a valid bind.keys file present. If you do this prior to the October 2017 rollover, BIND will validate the 2010 key and self-maintain during the rollover.
If you want to continue using trusted-keys for the root zone, you must ensure your bind.keys file is updated to add the 2017 root key before the rollover occurs. You can’t do anything to prepare until the new key is published. To get the new bind.keys file after the 2017 key is published:
ISC will be releasing updated versions of BIND in 2017 that incorporate the new key. At this time, the new key is not yet ready to be published. ISC will be able to begin introducing the new key in BIND at some point after the successful completion of the next key ceremony, currently planned for February 2, 2017. Anyone providing re-packaged versions of BIND should plan to update their distributions in Q1 or Q2 of 2017. Older versions of BIND, for example in older operating system releases, must also be updated.
We have tried to think of corner cases where BIND may not work as some might expect it to, so we can check BIND’s behavior, change it if necessary, or simply explain what to expect.
The working directory should be always be writable by named. If for some reason, it is not, then the managed-keys initialization process will not work properly, because it has to write to the managed-keys.bind file.
A popular operational practice is to use an external provisioning system to create docker images or similar packages, to use when installing and re-installing BIND. If you are using a configuration management system like this, possibly over-writing the managed-keys file created on initial installation, you may have to update the bind.keys file in your provisioning system. Else, you run the risk of installing a version of BIND with an outdated key, that will not validate during installation.
It is important to download a fresh copy of BIND when doing a new installation, in case the root key has since been updated. If you install copy of BIND with only the 2010 key after the 2017 root key rollover, it will not initialize properly, and will not update itself with the new 2017 key. The trust anchor database must first initialize with a currently valid key. This is a pre-condition for the 5011 rollover support.
From the ARM:
The first time named runs with a managed key configured in named.conf, it fetches the DNSKEY RRset directly from the zone apex, and validates it using the key specified in the managed-keys statement. If the DNSKEY RRset is validly signed, then it is used as the basis for a new managed keys database.
Uh, no. This is definitely the wrong time to give up on DNSSEC validation. After years of debate over the net value of DNSSEC, given that signed answers are larger and can be used for amplification attacks, DNSSEC validation is now looking like a great defense against one current significant abuse technique. The signed “negative space” in the DNS can prevent “random-subdomain” query attacks (see the IETF Draft on NSEC Aggressive Use or the Geoff Huston blog post on this). In addition, there is growing interest in using DNS with DNSSEC to ensure integrity of cryptographic keys for other applications, such as secure email.
Check your named.conf file for a managed-keys or trusted-keys statement specifically for the root zone, “.”
The following is an example of what you would like to see:
managed-keys {
. initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};
If you are running BIND 9.11 or later, you can use the RNDC command,
managed-keys (status | refresh | sync) [class [view]]
You can use both managed and trusted keys for different trust anchors, so look specifically for the key for the root zone, “.”.
If you don’t have access to the relatively new rndc managed-keys feature, use the contributed script in contrib/scripts/check5011.pl
. This tool has similar functionality to the rndc command. It reads the managed-keys.bind zonefile and reports on the status of the keys (trusted, untrusted, pending until such-and-such a time, revoked, etc.).
The first time managed-keys was added to BIND, it was system-wide. Later it was updated to support a separate trust anchor database for each view. We didn’t update all the places in the ARM we should have when we made that change. We will fix the ARM, sorry about that.
Of course. You can have more than one key defined for any zone. During the root key rollover, there is a period of several months when two keys will be published for the root.
If you have one trusted-key for “.” and a different managed-key for “.”, BIND loads up both keys – one as trusted and the other as managed.
If you have the same key configured as both trusted and managed, BIND loads the managed and ignores the trusted.
dnssec-validation auto
and dnssec-validation yes
?The difference between dnssec-validation yes and dnssec-validation auto is subtle but important. Dnssec-validation yes requires that a managed-keys statement include an initial key. If you change dnssec-validation auto to dnssec-validation yes and there are no root keys configured in the managed-keys statement, then that signals to named that you no longer care about the root key and you want it to delete it from the database. You probably don’t want to do that in a production system. We recommend using dnssec-validation auto, which will use the built in root key as the initial trust key for initializing the database.
This is a significant concern, because many users get their BIND software via operating system packages. ICANN is considering a possible DNS-ecosystem wide CVE or similar operational notice to reach operating system packagers who publish versions of any DNS system. This notice would come out in 2017. ISC will participate in that announcement and will provide OS packagers of BIND with explicit information on how to incorporate just the new root key into their packages, particularly when they are packaging older versions of the software.
Thank You
Several people reviewed and provided comments or answered questions for me. Besides the ISC BIND team I got advice and helpful comments from:
What's New from ISC