One document matched: draft-ietf-dnsop-rfc4641bis-11.xml


<?xml version="1.0" encoding="UTF-8"?><?rfc linefile="1:draft-ietf-dnsop-rfc4641bis.xml"?>
<!-- automatically generated by xml2rfc v1.35pre1 on 2012-04-13T07:07:03Z -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<?rfc rfcedstyle="no"?>
<?rfc subcompact="no"?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc toccompact="no"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="no" ?>

<rfc ipr="pre5378Trust200902" obsoletes="4641" category="info" docName="draft-ietf-dnsop-rfc4641bis-11">
  
  
  
  <front>
    <title>DNSSEC Operational Practices, Version 2</title>
    
    <author initials="O." surname="Kolkman" fullname="Olaf M. Kolkman">
      <organization>NLnet Labs</organization>
      <address>
	<postal>
	  <street>Science Park 400</street>
	  <city>Amsterdam</city>
	  <code>1098 XH</code>
	  <country>The Netherlands</country>
	</postal>
	<email>olaf@nlnetlabs.nl</email>
	<uri>http://www.nlnetlabs.nl</uri>
      </address>
    </author>

    <author initials="W." surname="Mekking" fullname="W. (Matthijs) Mekking">
      <organization>NLnet Labs</organization>
      <address>
	<postal>
	  <street>Science Park 400</street>
	  <city>Amsterdam</city>
	  <code>1098 XH</code>
	  <country>The Netherlands</country>
	</postal>
	<email>matthijs@nlnetlabs.nl</email>
	<uri>http://www.nlnetlabs.nl</uri>
      </address>
    </author>

    <date month="April" day="13" year="2012" />
    <area>Operations and Management</area>
    <workgroup>DNSOP</workgroup>
    <keyword>DNSSEC</keyword>
    <keyword>operational</keyword>
    <abstract>
      <t>
	This document describes a set of practices for operating the
	DNS with security extensions (DNSSEC).  The target audience is
	zone administrators deploying DNSSEC.
      </t>
      <t>
	The document discusses operational aspects of using keys and
	signatures in the DNS. It discusses issues of key generation,
	key storage, signature generation, key rollover, and related
	policies.
      </t>
      <t>
        This document obsoletes RFC 4641 as it covers more
        operational ground and gives more up-to-date requirements with
        respect to key sizes and the DNSSEC operations.
      </t>
    </abstract>
  </front>
  
  <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  -->
  <middle>
    
    
    <?rfc?><?rfc linefile="1:Introduction.xml"?>



<section title="Introduction">
  <t>
    This document describes how to run a DNS Security (DNSSEC)-enabled
    environment. It is intended for operators who have knowledge of
    the DNS (see <xref target="RFC1034">RFC 1034</xref> and <xref
    target="RFC1035">RFC 1035</xref>) and want to deploy DNSSEC (<xref
    target="RFC4033">RFC 4033</xref>, <xref target="RFC4034">RFC
    4034</xref>, <xref target="RFC4035">RFC 4035</xref>, 
    <xref target="RFC4509">RFC 4509</xref>, 
    <xref target="RFC5155">RFC 5155</xref>
    <xref target="RFC4035">RFC 5702</xref>, and
    <xref target="I-D.ietf-dnsext-dnssec-bis-updates" />). The
    focus of the document is on serving authoritative DNS information
    and is aimed at zone owners, name server operators, registries,
    registrars and registrants. It assumes that there is no direct
    relation between those entities and the operators of validating
    recursive name servers (validators).
  </t>
  
  <t>
    During workshops and early operational deployment, operators and
    system administrators have gained experience about operating the
    DNS with security extensions (DNSSEC).  This document translates
    these experiences into a set of practices for zone
    administrators. Although
    the DNS Root has been signed since July 15, 2010 and now more than 80
    secure delegations are provisioned in the root, at the time of writing
    there still exists relatively little experience with DNSSEC in
    production environments below the top-level domain (TLD) level;
    this document should therefore
    explicitly not be seen as representing 'Best Current Practices'.
    Instead, it describes the decisions that should be made when
    deploying DNSSEC, gives the choices available for each one, and
    provides some operational guidelines. The document does not give
    strong recommendations. That may be subject for a future version
    of this document.
  </t>
  
  <t>
    The procedures herein are focused on the maintenance of signed
    zones (i.e., signing and publishing zones on authoritative
    servers). It is intended that maintenance of zones such as
    re-signing or key rollovers be transparent to any verifying
    clients.
  </t>
  
  
  <t>
    The structure of this document is as follows. In <xref
    target="trustchain"/>, we discuss the importance of keeping the
    "chain of trust" intact.  Aspects of key generation and storage of
    keys are discussed in <xref target="keys"/>; the focus in
    this section is mainly on the security of the private part of the key(s).  <xref
    target="sigs_keyrolls_policies"/> describes considerations
    concerning the public part of the keys. <xref target="keyroll"/> and
    <xref target="emergency"/> deal with the rollover, or replacement, of keys. <xref
    target="parents"/> discusses considerations on how parents deal
    with their children's public keys in order to maintain chains of
    trust. <xref target="time"/> covers all kinds of timing issues around key publication.
    <xref target="nsec_nsec3"/> covers the considerations regarding selecting and using
    NSEC or <xref target="RFC5155">NSEC3</xref>.
  </t>
  <t>
    The typographic conventions used in this document are explained in
    <xref target="typography" />.
  </t>
  
  <t>
    Since we describe operational suggestions and there
    are no protocol specifications, the <xref target="RFC2119">RFC
    2119</xref> language does not apply to this document, though
    we do use quotes from other documents that do include the RFC 2119 language.
  </t>
  
  <t>
    This document obsoletes <xref target="RFC4641">RFC 4641</xref>.
  </t>
  
  <section title="The Use of the Term 'key'">
    
    <t>
      It is assumed that the reader is familiar with the concept of
      asymmetric keys on which DNSSEC is based (public key
      cryptography <xref target="RFC4949">RFC 4949</xref>). Therefore,
      this document will use the term 'key' rather loosely. Where it
      is written that 'a key is used to sign data' it is assumed that
      the reader understands that it is the private part of the key
      pair that is used for signing. It is also assumed that the
      reader understands that the public part of the key pair is
      published in the DNSKEY Resource Record and that it is the
      public part that is used in signature verification.
    </t>
    
    
  </section> <!-- The usage of the term key -->
  
  
  <section title="Time Definitions">
    
    <t>
      In this document, we will be using a number of time-related
      terms. The following definitions apply:
    </t>
    <t>
      <list style="hanging">
	<t hangText="Signature validity period:"> The period that a signature is
	  valid.  It starts at the (absolute) time specified in the signature
	  inception field of the RRSIG RR and ends at the (absolute) time
	  specified in the expiration field of the RRSIG RR. The document
	  sometimes also uses the term "validity period", which means the same.
	</t>
		
	<t hangText="Signature publication period:"> The period that a signature is published.
	  It starts at the time the signature is introduced in the zone for
	  the first time and ends at the time when the signature is removed
	  or replaced with a new signature.
	  After one stops publishing an RRSIG in a zone, it may take a
	  while before the RRSIG has expired from caches and has
	  actually been removed from the DNS.
	</t>
	
	<t hangText="Key effectivity period:"> The period during which a key pair
	  is expected to be effective. It is defined as the
	  time between the first inception time stamp and the last
	  expiration date of any signature made with this key,
	  regardless of any discontinuity in the use of the key.  The
	  key effectivity period can span multiple signature validity
	  periods.
	</t>
	
	<t hangText="Maximum/Minimum Zone Time to Live (TTL):"> The maximum or
	  minimum value of the TTLs from the complete set of RRs in a
	  zone. Note that the minimum TTL is not the same as the
	  MINIMUM field in the SOA RR. See <xref target="RFC2308">RFC 2308</xref>
	  for more information.
	</t>
	
	
      </list>
    </t>
  </section> <!--Time definitions -->
  
  
</section> <!-- Introduction -->
<?rfc linefile="76:draft-ietf-dnsop-rfc4641bis.xml"?>

    
    <?rfc?><?rfc linefile="1:trustchain.xml"?>

    <section anchor="trustchain" title="Keeping the Chain of Trust Intact">


      <t>
	Maintaining a valid chain of trust is important because broken
	chains of trust will result in data being marked as Bogus (as
	defined in <xref target="RFC4033">RFC 4033</xref> Section 5),
	which may cause entire (sub)domains to become invisible to
	verifying clients. The administrators of secured zones need to
	realize that, to verifying clients, their zone is part of a
	chain of trust.
	</t>
	<t>
	  As mentioned in the introduction, the procedures herein are
	  intended to ensure that maintenance of zones, such as re-signing or
	  key rollovers, will be transparent to the verifying clients on the
	  Internet.
	</t>
	<t>
	Administrators of secured zones will need to keep in mind that data
	published on an authoritative primary server will not be
	immediately seen by verifying clients; it may take some time for
	the data to be transferred to other (secondary) authoritative
	name servers and clients may be fetching data from caching
	non-authoritative servers. In this light, note that
	the time until the data is available on the slave
	can be negligible when
        using NOTIFY <xref target="RFC1996"/> and incremental transfer
        (IXFR) <xref target="RFC1995"/>.  It increases when full zone
        transfers (AXFR) are used in combination
        with NOTIFY.  It increases even more if you rely on full zone
        transfers based on only the SOA timing parameters for refresh.
	</t>
	<t>
	  For the verifying clients, it is important that data from
	  secured zones can be used to build chains of trust
	  regardless of whether the data came directly from an
	  authoritative server, a caching name server, or some middle
	  box. Only by carefully using the available timing parameters
	  can a zone administrator ensure that the data necessary for
	  verification can be obtained.
	</t>

	<t>
	  The responsibility for maintaining the chain of trust is
	  shared by administrators of secured zones in the chain of
	  trust.  This is most obvious in the case of a 'key
	  compromise' when a trade-off must be made  between maintaining a valid
	  chain of trust and replacing the compromised keys as soon as
	  possible.  Then zone administrators will have
	  to decide, between keeping the chain of trust
	  intact - thereby allowing for attacks with the compromised
	  key - or deliberately breaking the chain of trust and making
	  secured subdomains invisible to security-aware
	  resolvers. (Also see <xref target="emergency"/>.)

	</t>


      </section><!-- Keeping the chain of trust intact -->




<?rfc linefile="79:draft-ietf-dnsop-rfc4641bis.xml"?>
    
    <?rfc?><?rfc linefile="1:Keys.xml"?>
<section anchor="keys" title="Keys Generation and Storage"> <!-- Keys -->
  
  <t>
    This section describes a number of considerations with respect to
    the use of keys. For the design of an operational procedure for key
    generation and storage, a number of decisions need to be made:
    <list style='symbols'>
      <t>
	Does one differentiate between Zone Signing Keys and Key Signing
	Keys or is the use of one type of key sufficient?
      </t>
      <t>
	Are Key Signing Keys (likely to be) in use as trust anchors <xref target="RFC4033" />?
      </t>
      <t>
	What are the timing parameters that are allowed by the
	operational requirements?
      </t>
      <t>
	What are the cryptographic parameters that fit the operational
	need?
      </t>
    </list>
    The following section discusses  the considerations that need to be taken into account
    when making those choices.
  </t>
  
  
  <section title="Operational Motivation for Zone Signing Keys and Key Signing Keys" anchor="zsk-ksk-motivation">
    <t>
      The DNSSEC validation protocol does not distinguish between
      different types of DNSKEYs. The motivations to differentiate
      between keys are purely operational; validators will not make a
      distinction.
    </t>
    <t>
      For operational reasons, described below, it is possible to
      designate one or more keys to have the role of Key Signing Keys (KSKs). These
      keys will only sign the apex DNSKEY RRset in a zone. Other keys
      can be used to sign all the other RRsets in a zone that require
      signatures. They are referred to as Zone Signing Keys (ZSKs). In
      case the differentiation between KSK and ZSK is not made, keys have
      both the role of KSK and ZSK, we talk
      about a Single Type signing scheme.
    </t>
    <t>
      If the two functions are separated, then for almost any method
      of key management and zone signing, the KSK is used less
      frequently than the ZSK. Once a key set is signed with the KSK,
      all the keys in the key set can be used as ZSKs.  If there has
      been an event that increases the risk that a ZSK is compromised
      it can be simply dropped from the key set. The new key set is
      then re-signed with the KSK.
    </t>
    <t>
      Changing a key that is a secure entry point (SEP) <xref target="RFC4034" />
      for a zone
      can be relatively expensive as it involves interaction with 3rd
      parties: When a key is only pointed to by a DS record in the
      parent zone, one needs to complete the interaction with the
      parent and wait for the updated DS record to
      appear in the DNS.  In the case where a key is configured as a
      trust anchor, one has to wait until one has sufficient confidence
      that all trust anchors have been replaced. In fact, it may be
      that one is not able to reach the complete user-base with
      information about the key rollover.
    </t>
    <t>
      Given the assumption that for KSKs the SEP flag is set, the
      KSK can be distinguished from a ZSK by examining the flag
      field in the DNSKEY RR: If the flag field is an odd number the RR
      is a KSK; otherwise it is a ZSK.
    </t> 
    <t>
      There is also a risk that keys are compromised through theft or
      loss. For keys that are installed on file-systems of name servers
      that are connected to the network (e.g. for dynamic updates),
      that risk is relatively high. Where keys are stored on Hardware
      Security Modules (HSMs) or stored off-line, such risk is
      relatively low. However, storing keys off-line or with more 
      limitation on access control has a negative effect on the 
      operational flexibility. By separating the KSK and ZSK functionality,
      these risks can be managed while making the tradeoff against the
      involved costs. For example, a KSK can be stored off-line or
      with more limitation on access control than ZSKs which need to
      be readily available for operational purposes such as the
      addition or deletion of zone data. A KSK stored on a smartcard,
      that is kept in a safe, combined with a ZSK stored
      on a filesystem accessible by operators for daily routine may
      provide a better protection against key compromise, without losing
      much operational flexibility. It must be said that some HSMs give
      the option to have your keys online, giving more protection and
      hardly affecting the operational flexibility. In those cases,
      a KSK-ZSK split is not more beneficial than the Single-Type signing
      scheme.
    </t>
    <t>
      Finally there is a risk of cryptanalysis of the key material.
      The costs of such analysis are correlated to the length of the
      key. However, cryptanalysis arguments provide no strong
      motivation for a KSK/ZSK split. Suppose one differentiates
      between a KSK and a ZSK whereby the KSK effectivity period is X
      times the ZSK effectivity period. Then, in order for the
      resistance to cryptanalysis to be the same for the KSK and the
      ZSK, the KSK needs to be X times stronger than the ZSK. Since
      for all practical purposes X will somewhere of the order of 10
      to 100, the associated key sizes will vary only about a byte in
      size for symmetric keys. When translated to asymmetric keys, 
      the size difference is still too insignificant to warrant a 
      key-split; it only marginally affects the packet size and
      signing speed.
    </t>
    
    <t>
      The arguments for differentiation between the ZSK and KSK are
      weakest when:
      <list style="symbols">
	<t>
	  the exposure to risk is low (e.g. when keys are stored on
	  HSMs);
	</t>
	<t>
	  one can be certain that a key is not used as a
	  trust anchor; 
	</t>
	<t>
	  maintenance of the various keys cannot be performed
	  through tools (is prone to human error); and
	</t>  
	<t> 
	  the interaction through the child-parent
	  provisioning chain -- in particular the timely appearance
	  of a new DS record in the parent zone in emergency
	  situations -- is predictable.
	</t>
      </list>
      If the above holds then the costs of the operational
      complexity of a KSK-ZSK split may outweigh the costs of
      operational flexibility and choosing a single type signing
      scheme is a reasonable option. In other cases we advise
      that the separation between KSKs and ZSKs is made and that the
      SEP flag is exclusively set on KSKs.
    </t>
  </section>
  <section anchor="zsk-ksk-practicalites" title="Practical
						 Consequences of KSK and ZSK Separation">
   
   <t>
   A key that acts only as a Zone Signing Key can be used to sign all the data except the DNSKEY RRset in a zone on a
   regular basis.  When a ZSK is to be rolled, no
   interaction with the parent is needed.  This allows for signature
   validity periods on the order of days.
   </t>

    <t>
      A key with only the Key Signing Key role is to be used to sign the DNSKEY RRs
      in a zone. If a KSK is to be rolled, there may be
      interactions with other parties. These can include the administrators of the
      parent zone or administrators of verifying resolvers that
      have the particular key configured as secure entry points. In
      the latter case, everyone relying on the trust anchor needs to
      roll over to the new key, a process that may be subject to
      stability costs if automated trust anchor rollover mechanisms
      (such as e.g. <xref target="RFC5011">RFC 5011</xref>) are not
      in place.  Hence, the key effectivity period of these keys can
      and should be made much longer.
    </t> 
    
    <section title="Rolling a KSK that is not a trust anchor">
      <t>
	There are 3 schools of thought on rolling a KSK that is not a
	trust anchor:
	<list style="symbols">
	  <t> 
	    It should be done frequently and regularly (possibly every
	    few months) so that a key rollover remains an operational
	    routine.
	  </t>
	  <t> 
	    It should be done frequently but irregularly. Frequently
	    meaning every few months, again based on the argument that
	    a rollover is a practiced and common operational
	    routine, and irregular meaning with a large jitter, so that
	    3rd parties do not start to rely on the key and will not
	    be tempted to configure it as a trust anchor.
	  </t>
	  <t>
	    It should only be done when it is known or strongly
	    suspected that the key can be or has been compromised, or
		when a new algorithm or key storage is required.
	    <!-- I do not understand this sentence : in order to
	         reduce the stability issues on systems where the
	         rollover does not happen cleanly.
	    -->
	  </t>
	</list>
	There is no widespread agreement on which of these three
	schools of thought is better for different deployments of
	DNSSEC.  There is a stability cost every time a non-anchor KSK
	is rolled over, but it is possibly low if the communication
	between the child and the parent is good.  On the other hand,
	the only completely effective way to tell if the communication
	is good is to test it periodically.  Thus, rolling a KSK with
	a parent is only done for two reasons: to test and verify the
	rolling system to prepare for an emergency, and in the case of
	(preventing) an actual emergency.
      </t>
      <t>      
	Finally, in most cases a zone administrator cannot be fully certain
	that the zone's KSK is not in use as a trust anchor
	somewhere. While the configuration of trust anchors is not the
	responsibility of the zone administrator, there may be stability costs
	for the validator administrator that (wrongfully) configured
	the trust anchor when the zone administrator rolls a KSK.
      </t>
    </section>
    <section anchor="rolling-ksk-ta" title="Rolling a KSK that is a trust anchor">
      <t>
	The same operational concerns apply to the rollover of KSKs
	that are used as trust anchors: if a trust anchor replacement
	is done incorrectly, the entire domain that the trust anchor
	covers will become bogus until the trust anchor is corrected.
      </t>
      
      <t>
	In a large number of cases it will be safe to work from the
	assumption that one's keys are not in use as trust anchors. If
	a zone administrator publishes a "DNSSEC Signing Policy and Practice
	Statement" <xref target="I-D.ietf-dnsop-dnssec-dps-framework"
	/> that should be explicit about the fact whether the
	existence of trust anchors will be taken into account in any
	way or not. There may be cases where local policies enforce
	the configuration of trust anchors on zones which are mission
	critical (e.g. in enterprises where the trust anchor for the
	enterprise domain is configured in the enterprise's validator).
	It is expected that the zone administrators are aware of such
	circumstances.
      </t>
      
      <t>
	One can argue that because of the difficulty of getting all
	users of a trust anchor to replace an old trust anchor with a
	new one, a KSK that is a trust anchor should never be rolled
	unless it is known or strongly suspected that the key has been
	compromised.  In other words the costs of a KSK rollover are
	prohibitively high because some users cannot be reached.
      </t>
      
      <t>
	However, the "operational habit" argument also applies to
	trust anchor reconfiguration at the clients' validators. If a
	short key effectivity period is used and the trust anchor
	configuration has to be revisited on a regular basis, the odds
	that the configuration tends to be forgotten is smaller. In
	fact, the costs for those users can be minimized by automating
	the rollover with <xref target="RFC5011">RFC 5011</xref> and by
	rolling the key regularly (and advertising such) so that the
	operators of validating resolvers will put the appropriate
	mechanism in place to deal with these stability costs: in
	other words, budget for these costs instead of incurring them
	unexpectedly.
      </t>
      <t>
	It is therefore preferred to roll KSKs that are likely to
	be used as trust anchors on a regular basis if and only if
	those rollovers can be tracked using standardized
	(e.g. RFC 5011) mechanisms.
      </t>

    </section>
    
    <section anchor="SEP-practicalites" title="The use of the SEP flag">	
      <t>
	The so-called Secure Entry Point (SEP) <xref target="RFC4035" />
	flag can be used to distinguish between keys that are intended
	to be used as the secure entry point into the zone when building
	chains of trust, i.e they are (to be) pointed to by parental DS
	RRs or configured as a trust anchor.
      </t>
      <t>
	While the SEP flag does not play any role in validation, it is
	used in practice for operational purposes such as for the
	rollover mechanism described in <xref
	target="RFC5011">RFC 5011</xref>. The common convention is to
	set the SEP flag on any key that is used for key exchanges
	with the parent and/or potentially used for configuration as a
	trust anchor. Therefore, it is suggested that the SEP flag is
	set on keys that are used as KSKs and not on keys that are used as ZSKs, while in those cases where a
	distinction between KSK and ZSK is not made (i.e. for a Single
	Type signing scheme), it is suggested that the SEP flag is
	set on all keys.
      </t>
      <t>
	Note that signing tools may assume a KSK/ZSK split and use the
	(non) presence of the SEP flag to determine which key is to be
	used for signing zone data; these tools may get confused when
	a single type signing scheme is used.	
      </t>
    </section>
    
    
  </section> <!-- Motivations for the function -->
  
  
  
  <section anchor="key_lifetime" title="Key Effectivity Period">
    <t> 
      In general the available key length sets an upper limit on the
      key effectivity period. For all practical purposes it is
      sufficient to define the key effectivity period based on purely
      operational requirements and match the key length to that value.
      Ignoring the operational perspective, a reasonable effectivity
      period for KSKs that have corresponding DS records in the parent
      zone is of the order of 2 decades or longer.  That is, if one
      does not plan to test the rollover procedure, the key should be
      effective essentially forever, and only rolled over in case of
      emergency.
    </t>
    <t>
      When one opts for a regular key-rollover, a reasonable key
      effectivity period for KSKs that have a parent zone is one year,
      meaning you have the intent to replace them after 12 months.
      The key effectivity period is merely a policy parameter, and
      should not be considered a constant value. For example, the real
      key effectivity period may be a little bit longer than 12 months,
      because not all actions needed to complete the rollover could be
      finished in time.
    </t>
    <t>
      As
      argued above, this annual rollover gives operational practice of
      rollovers for both the zone and validator
      administrators. Besides, in most environments a year is a
      time-span that is easily planned and communicated.
    </t>
    <t>
      Where keys are stored on on-line systems and the exposure to
      various threats of compromise is fairly high, an intended key
      effectivity period of a month is reasonable for Zone Signing
      Keys.
    </t>

    <t>
      Although very short key effectivity periods are theoretically possible,
      when replacing keys one has to take into account the rollover
      considerations from <xref target="keyroll"/> and <xref
      target="time"/>. Key replacement endures for a couple of Zone TTLs,
      depending on the rollover scenario. Therefore, a multiple of Zone TTL is a reasonable 
      lower limit on the key effectivity period. Forcing a smaller key effectivity
      period will result in an ever-growing key set published in the zone.
    </t>

    <t>
      The motivation for having the ZSK's effectivity period shorter
      than the KSK's effectivity period is rooted in the operational
      consideration that it is more likely that operators have more
      frequent read access to the ZSK than to the KSK. If ZSKs are
      maintained on cryptographic Hardware Security Modules (HSM), then
      the motivation to have different key effectivity periods is
      weakened.
    </t>
    <t>
     In fact, if the risk of loss, theft, or other compromise is the
     same for a zone and key signing key, there is little reason to
     choose different effectivity periods for ZSKs and KSKs. And when
     the split between ZSKs and KSKs is not made, the argument is
     redundant.
    </t>
    <t>
      There are certainly cases (e.g., where the costs and risks of
      compromise, and the costs and risks involved with having to
      perform an emergency roll are also low) in which the use of a single
      type signing scheme with a long key effectivity period is a good
      choice.
    </t>

    
  </section> <!-- key effectivity period -->
  
  <section title="Cryptographic Considerations">
    <section anchor="key algorithm" title="Signature Algorithm">
      <t>
	At the time of writing, there are three types of signature
	algorithms that can be used in DNSSEC: RSA, DSA and GOST. Proposals
	for other algorithms are in the making. All three are fully specified
	in many freely-available documents, and are widely considered to be
	patent-free. The creation of signatures with RSA and DSA takes roughly
	the same time, but DSA is about ten times slower for signature
	verification. Also note that, in the context of DNSSEC, DSA is limited to a maximum
	of 1024 bit keys.
      </t>

      <t>
	We suggest the use of RSA/SHA-256 as the preferred signature
	algorithms and RSA/SHA-1 as an alternative.  Both have
	advantages and disadvantages.  RSA/SHA-1 has been deployed for
	many years, while RSA/SHA-256 has only begun to be deployed.
	On the other hand, it is expected that if effective attacks on
	either algorithm appear, they will appear for RSA/SHA-1
	first.  RSA/MD5 should not be considered for use because
	RSA/MD5 will very likely be the first common-use signature
	algorithm to have an effective attack.
      </t>
      <t>
	At the time of publication, it is known that the SHA-1 hash
	has cryptanalysis issues and work is in progress on addressing
	them. The use of public key algorithms based on
	hashes stronger than SHA-1 (e.g., SHA-256) is recommended,
	if these
	algorithms are available in implementations (see <xref
	target="RFC5702">RFC 5702</xref> and <xref
	target="RFC4509">RFC 4509</xref>).
      </t>

      <t>
    Also at the time of publication, digital signature algorithms 
    based on Elliptic Curve (EC) Cryptography with DNSSEC <xref target="RFC6605"/>
    are being standardized and implemented.
    The use of EC has benefits in terms 
    of size. On the other hand, one has to balance that against the 
    amount of validating resolver implementations that will not 
    recognize EC signatures and thus treat the zone as insecure. Beyond 
    the observation of this trade-off, we will not discuss further 
    considerations.
      </t>

    </section> <!-- Key algorithm -->
    
    <section anchor="key sizes" title="Key Sizes">
      <t>
	This section assumes RSA keys, as suggested in the previous section.
      </t>

      <t>
	DNSSEC signing keys should be large enough to avoid all known
	cryptographic attacks during the effectivity period of the key.  To date,
	despite huge efforts, no one has broken a regular 1024-bit key;
	in fact, the best completed attack is estimated to be the
	equivalent of a 700-bit key.  An attacker breaking a 1024-bit
	signing key would need to expend phenomenal amounts of networked
	computing power in a way that would not be detected in order to
	break a single key.  Because of this, it is estimated that most
	zones can safely use 1024-bit keys for at least the next ten
	years (A 1024-bit asymmetric key has an approximate equivalent
	strength of a symmetric 80-bit key).
      </t>
      <t>
	Depending on local policy (e.g. owners of keys that are used as extremely high value trust
	anchors, or non-anchor keys that may be difficult to roll
	over), you may want to use lengths longer than 1024 bits.
	Typically, the next larger key size used is 2048 bits, which
	has the approximate equivalent strength of a symmetric 112-bit
	key (e.g. <xref target="RFC3766">RFC 3766</xref>). Signing and 
        verifying with a 2048-bit key takes of course longer than with
	a 1024-bit key. The increase depends on software and hardware
	implementations, but public operations (such as verification)
	are about four times slower, while private operations (such as signing)
	slow down about eight times.
      </t>

      <t>
	Another way to decide on the size of key to use is to remember
	that the effort it takes for an attacker to break a
	1024-bit key is the same regardless of how the key is used.  If
	an attacker has the capability of breaking a 1024-bit DNSSEC
	key, he also has the capability of breaking one of the many
	1024-bit TLS trust anchor keys that are currently installed in web
	browsers.  If the value of a DNSSEC key is lower to the attacker
	than the value of a TLS trust anchor, the attacker will use the
	resources to attack the latter.
      </t>
      <t>
	It is possible that there will be an unexpected improvement in the
	ability for attackers to break keys, and that such an attack
	would make it feasible to break 1024-bit keys but not 2048-bit
	keys.  If such an improvement happens, it is likely that there
	will be a huge amount of publicity, particularly because of the
	large number of 1024-bit TLS trust anchors built into popular
	web browsers. At that time, all 1024-bit keys (both ones with
	parent zones and ones that are trust anchors) can be rolled over
	and replaced with larger keys.
      </t>
      <t>
	Earlier documents (including the previous version of this
	document) urged the use of longer keys in situations where a
	particular key was "heavily used".  That advice may have been
	true 15 years ago, but it is not true today when using RSA
	algorithms and keys of 1024 bits or higher.
      </t>
      
    </section> <!-- Key sizes -->
    
    <section title="Private Key Storage">
      <t>
	It is preferred that, where possible, zone private keys and
	the zone file master copy that is to be signed be kept and used
	in off-line, non-network-connected, physically secure machines
	only.  Periodically, an application can be run to add
	authentication to a zone by adding RRSIG and NSEC/NSEC3 RRs.  Then the
	augmented file can be transferred.
      </t>
      
      <t>
	When relying on dynamic update <xref target="RFC3007"/>, or any
	other update mechanism that runs at a regular interval
	to manage a signed zone, be aware that at least one private key
	of the zone will have to reside on the master server (or
	reside on an HSM to which the server has access).  This key is
	only as secure as the amount of exposure the server receives
	to unknown clients and the security of the host.  Although not
	mandatory, one could administer a zone using a "hidden master"
	scheme to minimize the risk. In this arrangement the master
	that processes the updates is unavailable to general
	hosts on the Internet; it is not listed in the NS RRset. The
	name servers in the NS RRset are able to receive zone updates
	through IXFR, AXFR, or an out-of-band distribution mechanism,
	possibly in combination with NOTIFY or another mechanism to
	trigger zone replication.
      </t>
      
      <t>
	The ideal situation is to have a one-way information flow to
	the network to avoid the possibility of tampering from the
	network.  Keeping the zone master on-line on the network
	and simply cycling it through an off-line signer does not do
	this.  The on-line version could still be tampered with if the
	host it resides on is compromised.  For maximum security, the
	master copy of the zone file should be off-net and should not
	be updated based on an unsecured network mediated
	communication.
      </t>
      <t>
	The ideal situation may not be achievable because of economic
	tradeoffs between risks and costs.  For instance, keeping a
	zone file off-line is not practical and will increase the
	costs of operating a DNS zone. So in practice the machines on
	which zone files are maintained will be connected to a
	network. Operators are advised to take security measures to
	shield unauthorized access to the master copy in order to
	prevent modification of DNS data before its signed.
      </t>
      
      <t>
	Similarly the choice for storing a private key in an HSM will
	be influenced by a tradeoff between various concerns:
      
	<list style="symbols">
	  <t> 
	    The risks that an unauthorized person has unnoticed
	    read-access to the private key
	  </t>
	  <t>
	    The remaining window of opportunity for the attacker.
	  </t>
	  <t>
	    The economic impact of the possible attacks (for a TLD
	    that impact will typically be higher than for an
	    individual users).
	  </t>
	  <t>
	    The costs of rolling the (compromised) keys. (The
	    costs of rolling a ZSK is lowest and the costs of rolling a
	    KSK that is in wide use as a trust anchor is highest.)
	  </t>
	  <t>
	    The costs of buying and maintaining an HSM.
	  </t>
	</list>
	
	
      </t>
      <t>
	For dynamically updated secured zones <xref
	target="RFC3007"/>, both the master copy and the private key
	that is used to update signatures on updated RRs will need to
	be on-line.
      </t>
      
    </section>
    
    <section title="Key Generation">
      <t>
	Careful generation of all keys is a sometimes overlooked but
	absolutely essential element in any cryptographically
	secure system.  The strongest algorithms used with the longest
	keys are still of no use if an adversary can guess enough to
	lower the size of the likely key space so that it can be
	exhaustively searched.  Technical suggestions for the
	generation of random keys will be found in <xref
	target="RFC4086">RFC 4086</xref> and <xref
	target="NIST-SP-800-90A">NIST SP 800-90A</xref>. In particular,
	one should carefully assess whether the random number
	generator used during key generation adheres to these
	suggestions. Typically, HSMs tend to provide a good facility for key
	generation.
      </t>
      <t>
	Keys with a long effectivity period are particularly sensitive
	as they will represent a more valuable target and be subject
	to attack for a longer time than short-period keys.  It is
	preferred that long-term key generation occur
	off-line in a manner isolated from the network via an air gap
	or, at a minimum, high-level secure hardware.
      </t>
      
    </section> <!-- Key Generation -->

    
    <section title="Differentiation for 'High-Level' Zones?">
      
      <t>
	An earlier version of this document (<xref
	target="RFC4641">RFC 4641</xref>) made a differentiation
	between key lengths for KSKs used for zones that are high in the DNS hierarchy
	and those for KSKs used low down.
      </t>
      <t>
	This distinction is now considered not relevant. Longer key
	lengths for keys higher in the hierarchy are not useful because
	the cryptographic guidance is that everyone should use keys that
	no one can break. Also, it is impossible to judge which zones
	are more or less valuable to an attacker. An attack can only
	take place if the key compromise goes unnoticed and the attacker
	can act as a man-in-the-middle (MITM). For example, if example.com is
	compromised and the attacker forges answers for
	somebank.example.com. and sends them out during an MITM, when the attack
	is discovered, it will be simple to prove that example.com has been
	compromised and the KSK will be rolled. 

<!--
 Designing  a long-term
	successful attack is difficult for keys at any level.
-->

      </t>
      
    </section> <!-- High level -->
  </section>    <!-- cryptographic considerations -->
</section> <!-- Key sec considerations -->


  
<?rfc linefile="81:draft-ietf-dnsop-rfc4641bis.xml"?>
    
    <?rfc?><?rfc linefile="1:Rollover.xml"?>
<!-- Included from Rollover.xml -->
<!-- $Id -->


<section anchor="sigs_keyrolls_policies" title="Signature Generation, Key Rollover, and Related Policies">

    <section anchor="keyroll" title="Key Rollovers">

      <t>
	Regardless of whether a zone uses periodic key rollovers,
	or only rolls keys in case of an irregular event,
	key rollovers are a fact of life when using DNSSEC.
	Zone administrators who are in the process of rolling
	their keys have to take into account that data published in
	previous versions of their zone still lives in caches. When
	deploying DNSSEC, this becomes an important consideration;
	ignoring data that may be in caches may lead to loss of
	service for clients.
      </t>
      <t>
	The most pressing example of this occurs when zone material
	signed with an old key is being validated by a resolver that
	does not have the old zone key cached. If the old key is no
	longer present in the current zone, this validation fails,
	marking the data "Bogus".  Alternatively, an attempt could be
	made to validate data that is signed with a new key against an
	old key that lives in a local cache, also resulting in data
	being marked "Bogus".
      </t>
	
	<t>
    The typographic conventions used in the diagrams below are explained in
    <xref target="typography" />.
	</t>

      <section anchor="ZSK-Roll" title="Zone Signing Key Rollovers">
	<t>
	  If the choice for splitting zone and key signing keys has
	  been made, then those two types of keys can be rolled
	  separately and zone signing keys can be rolled without taking
	  into account DS records from the parent or the configuration
	  of such a key as trust anchor.
	</t>

	<t> 
	  For "Zone Signing Key rollovers", there are two ways to make
	  sure that during the rollover data still cached can be
	  verified with the new key sets or newly generated signatures
	  can be verified with the keys still in caches. One schema,
	  described in <xref target="pre-pub-zsk"/>, uses key pre-publication;
	  the other uses double signatures (<xref
	  target="dub-sig-zsk" />). The pros and cons are described in <xref target="zsk-pro-con"/>.
	</t>
	
	<section anchor="pre-pub-zsk" title="Pre-Publish Zone Signing Key Rollover">
	  <t>
	    This section shows how to perform a ZSK rollover without
	    the need to sign all the data in a zone twice -- the
	    "Pre-Publish key rollover". This method has advantages in
	    the case of a key compromise. If the old key is
	    compromised, the new key has already been distributed in
	    the DNS. The zone administrator is then able to quickly
	    switch to the new key and remove the compromised key from
	    the zone.  Another major advantage is that the zone size
	    does not double, as is the case with the Double Signature
	    ZSK rollover.<!--  A small "how-to" for this kind of rollover
	    can be found in <xref target="zskhowto" />.-->

	    <figure anchor="pre-publish-key-rollover-fig" title="Pre-Publish Key Rollover">
	      <preamble>
		Pre-Publish key rollover from DNSKEY_Z_10 to DNSKEY_Z_11 involves four stages as follows:
	      </preamble>
	<?rfc?><?rfc linefile="1:pre-publish-key-rollover-figure.xml"?><artwork>
 ---------------------------------------------------------- 
  initial            new DNSKEY          new RRSIGs       
 ----------------------------------------------------------
  SOA_0              SOA_1               SOA_2              
  RRSIG_Z_10(SOA)    RRSIG_Z_10(SOA)     RRSIG_Z_11(SOA)   

  DNSKEY_K_1         DNSKEY_K_1          DNSKEY_K_1        
  DNSKEY_Z_10        DNSKEY_Z_10         DNSKEY_Z_10       
                     DNSKEY_Z_11         DNSKEY_Z_11
  RRSIG_K_1(DNSKEY)  RRSIG_K_1(DNSKEY)   RRSIG_K_1(DNSKEY) 
 ------------------------------------------------------------ 

 ------------------------------------------------------------ 
  DNSKEY removal
 ------------------------------------------------------------ 
  SOA_3
  RRSIG_Z_11(SOA)

  DNSKEY_K_1
  DNSKEY_Z_11

  RRSIG_K_1(DNSKEY)
 ------------------------------------------------------------
</artwork>
<?rfc linefile="74:Rollover.xml"?>
	  </figure>

	    <list style="hanging">
	      <t hangText="initial:"> Initial version of the zone: DNSKEY_K_1
	      is the Key Signing Key. DNSKEY_Z_10 is used to sign all
	      the data of the zone, i.e., it is the Zone Signing Key.
	      </t>
	      <t hangText="new DNSKEY:"> DNSKEY_Z_11 is introduced into
	      the key set (note that no signatures are generated with
	      this key yet, but this does not secure against brute
	      force attacks on its public key). The minimum duration
	      of this pre-roll phase is the time it takes for the
	      data to propagate to the authoritative servers, plus
	      TTL value of the key set.
	      <!--This equates to two times the Maximum Zone TTL. -->
	      </t>

	      <t hangText="new RRSIGs:"> At the "new RRSIGs" stage (SOA serial
	      2), DNSKEY_Z_11 is used to sign the data in the zone
	      exclusively  (i.e., all the signatures from DNSKEY_Z_10 are
	      removed from the zone). DNSKEY_Z_10 remains published in
	      the key set. This way, data that was loaded into caches
	      from the zone in the "new DNSKEY" step can still be verified with
	      key sets fetched from this version of the zone.
	      The minimum time that the key set including DNSKEY_Z_10
	      is to be published is the time that it takes for
	      zone data from the previous version of the zone to
	      expire from old caches, i.e., the time it takes for
	      this zone to propagate to all authoritative servers,
	      plus the Maximum Zone TTL value of any of the data
	      in the previous version of the zone.
	      </t>

	      <t hangText="DNSKEY removal:"> DNSKEY_Z_10 is removed from the
	      zone. The key set, now only containing DNSKEY_K_1 and
	      DNSKEY_Z_11, is re-signed with the DNSKEY_K_1 and DNSKEY_Z_11.

	      </t>
	    </list>
	  </t>
	  <t> The above scheme can be simplified by always
	  publishing the "future" key immediately after the rollover.
	  The scheme would look as follows (we show two rollovers); the
	  future key is introduced in "new DNSKEY" as DNSKEY_Z_12 and again
	  a newer one, numbered 13, in "new DNSKEY (II)":

	    <figure anchor="Pre-publish-two-rolovers-fig" title="Pre-Publish Zone Signing Key Rollover, Showing Two Rollovers">
            <preamble/>
	    <?rfc?><?rfc linefile="1:Pre-publish-two-rolovers.xml"?><artwork>
    initial             new RRSIGs          new DNSKEY
   -----------------------------------------------------------------
    SOA_0               SOA_1               SOA_2
    RRSIG_Z_10(SOA)     RRSIG_Z_11(SOA)     RRSIG_Z_11(SOA)

    DNSKEY_K_1          DNSKEY_K_1          DNSKEY_K_1
    DNSKEY_Z_10         DNSKEY_Z_10         DNSKEY_Z_11
    DNSKEY_Z_11         DNSKEY_Z_11         DNSKEY_Z_12
    RRSIG_K_1(DNSKEY)   RRSIG_K_1 (DNSKEY)  RRSIG_K_1(DNSKEY)
    ----------------------------------------------------------------

    ----------------------------------------------------------------
    new RRSIGs (II)        new DNSKEY (II)
    ----------------------------------------------------------------
    SOA_3                  SOA_4
    RRSIG_Z_12(SOA)        RRSIG_Z_12(SOA)

    DNSKEY_K_1             DNSKEY_K_1
    DNSKEY_Z_11            DNSKEY_Z_12
    DNSKEY_Z_12            DNSKEY_Z_13
    RRSIG_K_1(DNSKEY)      RRSIG_K_1(DNSKEY)
    ----------------------------------------------------------------
</artwork>
<?rfc linefile="123:Rollover.xml"?>
	    </figure>

	    Note that the key introduced in the "new DNSKEY" phase is not
	    used for production yet; the private key can thus be
	    stored in a physically secure manner and does not need to
	    be 'fetched' every time a zone needs to be signed.
	    
	  </t>

	  </section>

	  <section anchor="dub-sig-zsk" title="Double Signature Zone Signing Key Rollover">

	    <t>This section shows how to perform a ZSK key rollover
	    using the double zone data signature scheme, aptly named
	    "Double Signature rollover".
	    </t>
	    <t>During the "new DNSKEY" stage the new version of the zone
	    file will need to propagate to all authoritative servers
	    and the data that exists in (distant) caches will need to
	    expire, requiring at least the propagation delay plus the
	    Maximum Zone TTL of previous versions of the zone.

	    <figure anchor="double-sig-zsk-roll-fig" title="Double Signature Zone Signing Key Rollover">
            <preamble>

        Double Signature ZSK rollover involves three stages
        as follows:

            </preamble>
	    <?rfc?><?rfc linefile="1:Double-Sig-ZSK-Roll.xml"?><artwork>
   ----------------------------------------------------------------
   initial             new DNSKEY         DNSKEY removal
   ----------------------------------------------------------------
   SOA_0               SOA_1              SOA_2
   RRSIG_Z_10(SOA)     RRSIG_Z_10(SOA)
                       RRSIG_Z_11(SOA)    RRSIG_Z_11(SOA)
   DNSKEY_K_1          DNSKEY_K_1         DNSKEY_K_1
   DNSKEY_Z_10         DNSKEY_Z_10
                       DNSKEY_Z_11        DNSKEY_Z_11
   RRSIG_K_1(DNSKEY)   RRSIG_K_1(DNSKEY)  RRSIG_K_1(DNSKEY)
   ----------------------------------------------------------------
</artwork>
<?rfc linefile="154:Rollover.xml"?>
	      <!--
		  Stages of Deployment for Double Signature Zone Signing
		  Key Rollover.
	      -->
	    </figure>

	    <list style="hanging">
            <t hangText="initial:"> Initial Version
	    of the zone: DNSKEY_K_1 is the Key Signing Key. DNSKEY_Z_10 is used
	    to sign all the data of the zone, i.e., it is the
	    Zone Signing Key.
	    </t>
	    <t hangText="new DNSKEY:"> At the "New DNSKEY" stage (SOA
	    serial 1) DNSKEY_Z_11 is introduced into the key set and
	    all the data in the zone is signed with DNSKEY_Z_10 and
	    DNSKEY_Z_11. The rollover period will need to continue
	    until all data from version 0 of the zone has been
	    replaced in all secondary servers and then has expired from
	    remote caches. This will take at least the propagation delay plus the Maximum Zone
	    TTL of version 0 of the zone.

	    </t>
	    <t hangText="DNSKEY removal:"> DNSKEY_Z_10 is removed from
	    the zone as are all signatures created with it.
	    The key set, now only containing DNSKEY_Z_11, is
	    re-signed with DNSKEY_K_1 and DNSKEY_Z_11.</t>
	    </list>
	    </t>

	    <t> At every instance, RRSIGs from the previous version of
	    the zone can be verified with the DNSKEY RRset from the
	    current version and vice-versa.
	    The duration of the "new DNSKEY"
	    phase and the period between rollovers should be at least
	    the progation delay to secondary servers plus the Maximum Zone TTL
	    of the previous version of the zone.

	    </t>
<!--
	    <t>Making sure that the "new DNSKEY" phase lasts until the
	    signature expiration time of the data in the initial version of the
	    zone is recommended. This way all caches are cleared of the old
	    signatures.  However, this duration could be
	    considerably longer than the Maximum Zone TTL, making the
	    rollover a lengthy procedure.
	    </t>
-->
	    <t>Note that in this example we assumed that the zone was
	    not modified during the rollover. New data can be
	    introduced in the zone as long as it is signed with both
	    keys.
	    </t>


	  </section> <!--double sig rollover-->


	  <section anchor="zsk-pro-con" title="Pros and Cons of the Schemes">

	    <t>
	      <list style="hanging">
		<t hangText="Pre-Publish key rollover:">
		  This rollover does not involve signing the zone data
		  twice. Instead, before the actual rollover, the
		  new key is published in the key set and thus is
		  available for cryptanalysis attacks. A small
		  disadvantage is that this process requires four
		  stages. Also the Pre-Publish scheme involves more
		  parental work when used for KSK rollovers as
		  explained in <xref target="diff_zsk_ksk"/>.
		</t>


		<t hangText="Double Signature ZSK rollover:">
		  The drawback of this signing scheme is that during the
		  rollover the number of signatures in your zone doubles;
		  this may be prohibitive if you have very big zones. An
		  advantage is that it only requires three stages.

		</t>

	      </list>
	    </t>

	  </section> <!-- Pros and cons of the schemes -->



	</section><!--Zone Signing key rollovers-->

	<section  anchor="ksk-rollover" title="Key Signing Key Rollovers">

	  <t> 
	    For the rollover of a Key Signing Key, the same
	    considerations as for the rollover of a Zone Signing Key
	    apply. However, we can use a Double Signature scheme to
	    guarantee that old data (only the apex key set) in caches
	    can be verified with a new key set and vice versa.  Since
	    only the key set is signed with a KSK, zone size
	    considerations do not apply.

	    <figure anchor="double-sig-ksk-roll-fig" title="Stages of Deployment for a Double Signature Key Signing Key Rollover">
	      <preamble/>
	      <?rfc?><?rfc linefile="1:Double-Sig-KSK-Roll.xml"?><artwork>
---------------------------------------------------------------------
 initial            new DNSKEY        DS change    DNSKEY removal
---------------------------------------------------------------------
Parent: 
 SOA_0 -----------------------------> SOA_1 ------------------------>
 RRSIG_par(SOA) --------------------> RRSIG_par(SOA) --------------->
 DS_K_1 ----------------------------> DS_K_2 ----------------------->
 RRSIG_par(DS) ---------------------> RRSIG_par(DS) ---------------->

Child:
 SOA_0              SOA_1 -----------------------> SOA_2
 RRSIG_Z_10(SOA)    RRSIG_Z_10(SOA) -------------> RRSIG_Z_10(SOA)

 DNSKEY_K_1         DNSKEY_K_1 ------------------>
                    DNSKEY_K_2 ------------------> DNSKEY_K_2
 DNSKEY_Z_10        DNSKEY_Z_10 -----------------> DNSKEY_Z_10
 RRSIG_K_1(DNSKEY)  RRSIG_K_1 (DNSKEY) ---------->
                    RRSIG_K_2 (DNSKEY) ----------> RRSIG_K_2(DNSKEY)
---------------------------------------------------------------------
</artwork>
<?rfc linefile="258:Rollover.xml"?>
	    </figure>

	    <list style="hanging"> 
	      <t hangText="initial:">
		Initial version of the zone.  The parental DS points
		to DNSKEY_K_1. Before the rollover starts, the child
		will have to verify what the TTL is of the DS RR that
		points to DNSKEY_K_1 -- it is needed during the
		rollover and we refer to the value as TTL_DS.
	      </t>

	      <t hangText="new DNSKEY:">
		During the "new DNSKEY" phase, the zone administrator
		generates a second KSK, DNSKEY_K_2. The key is provided
		to the parent, and the child will have to wait until a
		new DS RR has been generated that points to
		DNSKEY_K_2. After that DS RR has been published on all
		servers authoritative for the parent's zone, the zone
		administrator has to wait at least TTL_DS to make sure
		that the old DS RR has expired from caches.
	  </t>

          <t hangText="DS change:"> 
	    The parent replaces DS_K_1 with DS_K_2.
          </t>

	  <t hangText="DNSKEY removal:"> 
	    DNSKEY_K_1 has been removed.
	  </t>
	  </list>
	  </t>
	  <t>
	    The scenario above puts the responsibility for maintaining
	    a valid chain of trust with the child. It also is based on
	    the premise that the parent only has one DS RR (per
	    algorithm) per zone.  An alternative mechanism has been
	    considered.  Using an established trust relation, the
	    interaction can be performed in-band, and the removal of
	    the keys by the child can possibly be signaled by the
	    parent. In this mechanism, there are periods where there
	    are two DS RRs at the parent.
	  </t>
	  <section anchor="5011KSK" title="Special Considerations for RFC 5011 KSK rollover">
	  <t>
	    The scenario sketched above assumes that the KSK is not in
	    use as a trust anchor too but that validating name servers
	    exclusively depend on the parental DS record to establish
	    the zone's security. If it is known that validating
	    name servers have configured trust anchors, then that needs
	    to be taken into account. Here we assume that zone administrators
	    will deploy <xref target="RFC5011">RFC 5011</xref>
	    style rollovers.
	  </t>
	  <t>
	    RFC 5011 style rollovers increase the duration of key
	    rollovers: the key to be removed must first be
	    revoked. Thus, before the DNSKEY_K_1 removal phase,
	    DNSKEY_K_1 must be published for one more Maximum Zone TTL
	    with the REVOKE bit set. The revoked key must be
	    self-signed, so in this phase the DNSKEY RRset must also
	    be signed with DNSKEY_K_1.
	  </t>

	  </section><!-- "Special Considerations for RFC 5011 KSK rollover" -->>
	</section><!--Key signing key rollovers-->


      <section anchor="diff_zsk_ksk" title="Difference Between ZSK and KSK Rollovers">

	<t> Note that KSK rollovers and ZSK rollovers are different in the
	sense that a KSK rollover requires interaction with the parent (and
	possibly replacing of trust anchors) and the ensuing delay while waiting
	for it.
	</t>

	<t>
	  A ZSK rollover can be handled in two different ways, meaningful: Pre-Publish (<xref
	  target="pre-pub-zsk"/>) and Double Signature (<xref
	  target="dub-sig-zsk"/>).
	</t>
	<t>
	  As the KSK is used to validate the key set and because the
	  KSK is not changed during a ZSK rollover, a cache is able to
	  validate the new key set of the zone.  A Pre-Publish
	  method is also possible for KSKs, known as the Double-DS rollover.
	  The name being a give away, the record that needs to be pre-published is the DS RR at the parent.
	  The Pre-Publish method has some drawbacks for KSKs. We first describe the
	  rollover scheme and then indicate these drawbacks.

	  <figure anchor="pre-pubkish-ksk-roll-fig" title="Stages of Deployment for a Double-DS Key Signing Key Rollover">
          <preamble/>
	      <?rfc?><?rfc linefile="1:Pre-Publish-KSK-Roll.xml"?><artwork>
--------------------------------------------------------------------
  initial         new DS         new DNSKEY       DS removal
--------------------------------------------------------------------
Parent:
  SOA_0           SOA_1 ------------------------> SOA_2
  RRSIG_par(SOA)  RRSIG_par(SOA) ---------------> RRSIG_par(SOA)
  DS_K_1          DS_K_1 ----------------------->
                  DS_K_2 -----------------------> DS_K_2
  RRSIG_par(DS)   RRSIG_par(DS) ----------------> RRSIG_par(DS)

Child:
  SOA_0 -----------------------> SOA_1 ---------------------------->
  RRSIG_Z_10(SOA) -------------> RRSIG_Z_10(SOA) ------------------>

  DNSKEY_K_1 ------------------> DNSKEY_K_2 ----------------------->
  DNSKEY_Z_10 -----------------> DNSKEY_Z_10 ---------------------->
  RRSIG_K_1 (DNSKEY) ----------> RRSIG_K_2 (DNSKEY) --------------->
--------------------------------------------------------------------
</artwork>
<?rfc linefile="350:Rollover.xml"?>
	  </figure>

	  When the child zone wants to roll, it notifies the
	  parent during the "new DS" phase and submits the new key (or
	  the corresponding DS) to the parent.
	  The parent publishes DS_K_1 and DS_K_2, pointing to
	  DNSKEY_K_1 and DNSKEY_K_2, respectively. During the rollover ("new DNSKEY"
          phase), which
	  can take place as soon as the new DS set propagated through
	  the DNS, the child replaces DNSKEY_K_1 with
   	  DNSKEY_K_2. Immediately after that ("DS/DNSKEY removal" phase),
          it can notify the parent that the old DS record can be deleted.
	</t>

        <t> 
	  The drawbacks of this scheme are that, during the
	  "new DS" phase, the parent cannot verify the match between the
	  DS_K_2 RR and DNSKEY_K_2 using the DNS -- as DNSKEY_K_2 is not
	  yet published. Besides, we introduce a
	  "security lame" key (see <xref target="lame"/>). Finally, the
	  child-parent interaction consists of two steps. The "Double
	  Signature" method only needs one interaction.
	  
	</t>
      </section> <!-- Difference Between ZSK and KSK Rollovers -->


      <section title="Rollover for a Single Type Signing Key rollover" anchor="STSrollover">
	
	<t>
	  The rollover of a DNSKEY when a Single Type Signing Scheme
	  is used is subject to the same requirement as the rollover
	  of a KSK or ZSK: During any stage of the rollover, the chain
	  of trust needs to continue to validate for any combination
	  of data in the zone as well as data that may still live in
	  distant caches.
	</t>
	<t>
	  There are two variants for this rollover. Since the choice
	  for a Single Type Signing Scheme is motivated by operational
	  simplicity we describe the most straightforward
	  rollover scheme first.

	  <figure anchor="single-type-roll-fig" title="Stages of the Straightforward rollover in a Single Type Signing Scheme">
	      <?rfc?><?rfc linefile="1:Single-type-roll.xml"?><artwork>
  ----------------------------------------------------------------
  initial           new DNSKEY      DS change     DNSKEY removal
  ----------------------------------------------------------------
Parent:
  SOA_0 --------------------------> SOA_1 ---------------------->
  RRSIG_par(SOA) -----------------> RRSIG_par(SOA) ------------->
  DS_S_1 -------------------------> DS_S_2 --------------------->
  RRSIG_par(DS_S_1) --------------> RRSIG_par(DS_S_2) ---------->

Child:
  SOA_0             SOA_1 ----------------------> SOA_2
  RRSIG_S_1(SOA)    RRSIG_S_1(SOA) ------------->
                    RRSIG_S_2(SOA) -------------> RRSIG_S_2(SOA)
  DNSKEY_S_1        DNSKEY_S_1 ----------------->
                    DNSKEY_S_2 -----------------> DNSKEY_S_2
  RRSIG_S_1(DNSKEY) RRSIG_S_1(DNSKEY) ---------->
                    RRSIG_S_2(DNSKEY) ----------> RRSIG_S_2(DNSKEY)
  -----------------------------------------------------------------
</artwork>
<?rfc linefile="395:Rollover.xml"?>
	  </figure>	

	    <list style="hanging"> 
	      <t hangText="initial:">
		Parental DS points to DNSKEY_S_1. All RRsets in the zone are signed with DNSKEY_S_1.
	      </t>
	      <t hangText="new DNSKEY:">
		A new key (DNSKEY_S_2) is introduced and all the RRsets are signed with both DNSKEY_S_1 and DNSKEY_S_2.
	      </t>
	      <t hangText="DS change:">
		After the DNSKEY RRset with the two keys had time to
		propagate into distant caches (that is the key set
		exclusively containing DNSKEY_S_1 has been expired) the
		parental DS record can be changed.
	      </t>
	      <t hangText="DNSKEY removal:">
		After the DS RRset containing DS_S_1 has expired from
		distant caches, DNSKEY_S_1 can be removed from the DNSKEY
		RRset.
	      </t>
	    </list>
	  </t>
	  <t>
	    There is a second variety of this rollover, during which
	    one introduces a new DNSKEY into the key set and signs the
	    key set with both keys while signing the zone data with
	    only the original DNSKEY_S_1. One replaces the DNSKEY_S_1
	    signatures with signatures made with DNSKEY_S_2 at the moment
	    of DNSKEY_S_1 removal.
	  </t>
	  <t>
	    The second variety of this rollover can be considered when
	    zone size considerations prevent the introduction of
	    double signatures over all data of the zone, although in
	    that case choosing for a KSK/ZSK split may be a better
	    option.
	  </t>
	  <t>
	    The Double-DS rollover scheme is compatible with a rollover
	    using a Single Type Signing Scheme, although in order to
	    maintain a valid chain of trust, the zone data would need
	    to be published with double signatures or a double 
	    key set. Since this leads to
	    increase in zone and packet size at both child and parent,
	    there are little benefits to a Double-DS rollover with a
	    Single Type Signing Scheme.
	  </t>

   <t>
   There is also a second variety of the Double-DS rollover, during
   which one introduces a new DNSKEY into the key set and submits the
   new DS to the parent. The new key is not yet used to sign RRsets.
   One replaces the DNSKEY_S_1 signatures with signatures
   made with DNSKEY_S_2 at the moment that DNSKEY_S_2 and DS_S_2 have
   been propagated.
   </t>

   <t>
   Again, this second variety of this rollover can be considered when
   zone size considerations prevent the introduction of double
   signatures over all of the zone data although also in this case,
   choosing to employ a KSK/ZSK split may be a better option.
   </t>

      </section>


      <section title="Algorithm rollovers" anchor="KAR">
      <t>
	A special class of key rollover is the one needed for a change
	of signature algorithms (either adding a new algorithm, removing an
	old algorithm, or both). Additional steps are needed to retain
	integrity during this rollover. We first describe the generic
	case; special considerations for rollovers that involve
	trust anchors and single type keys are discussed thereafter.
      </t>

      <t>
	There exist a conservative and a liberal approach for algorithm
	rollover. This has to do with section 2.2 in RFC 4035 <xref target="RFC4035"/>:

<artwork>

    There MUST be an RRSIG for each RRset using at least one DNSKEY of
    each algorithm in the zone apex DNSKEY RRset.  The apex DNSKEY RRset
    itself MUST be signed by each algorithm appearing in the DS RRset
    located at the delegating parent (if any).

</artwork>

	The conservative approach interprets this section very strictly, meaning
	that it expects that every RRset has a valid signature for every algorithm
	signalled by the zone apex DNSKEY RRset - including RRsets in caches.
	The liberal approach uses a more loose interpretation of the section
	and limits the rule to RRsets in the zone at the authoritative name servers.
	There is a reasonable argument for saying that this is valid, because the specific section is a subsection
	of section 2. in RFC 4035: Zone Signing.
      </t>

      <t>
	When following the more liberal approach, algorithm rollover is just as
	easy as a regular Double-Signature KSK rollover (<xref target="ksk-rollover"/>).
	Note that the Double-DS rollover method cannot be used, since that would 
	introduce a parental DS of which the apex DNSKEY RRset has not been signed
	with the introduced algorithm. 
      </t>

      <t>
	However, there are implementations of validators known that follow the 
	more conservative approach. Performing a Double-Signature KSK algorithm rollover
	will temporarily make your zone appear as Bogus by such validators during the
	rollover. Therefore, the rollover described in this section will explain the stages of
	deployment assuming the conservative approach.
      </t>
      
      <t>
	When adding a new algorithm, the signatures should be added
	first.  After the TTL of RRSIGS has expired, and caches have
	dropped the old data covered by those signatures, the DNSKEY
	with the new algorithm can be added.
      </t>

      <t>
	After the new algorithm has been added, the DS record can be
	exchanged using Double Signature Key Rollover.  The 
	Pre-Publish key rollover method cannot be used to change algorithms.
      </t>
      <t>
	When removing an old algorithm, the DS for the algorithm should be
	removed from the parent zone first, followed by the DNSKEY and the
	signatures (in the child zone).
      </t>
      <t>
	<xref target="alg-rollover-fig"/> describes the steps.

<!--
	The underscored number indicates the algorithm and ZSK and KSK
	indicate the obvious difference in key use. For example
	DNSKEY_K_1 is a the DNSKEY RR representing the public part
	of the old key signing key of algorithm type 1 while
	RRSIG_Z_2(SOA) is the RRSIG RR made with the private part
	of the new zone signing key of algorithm type 2 over a SOA RR.
	It is assumed that the key that signs
	the SOA RR also signes all other non-DNSKEY RRset data.
-->

      <figure anchor="alg-rollover-fig" title="Stages of Deployment during an Algorithm Rollover">
	<preamble>
	  <!-- nothing -->
	</preamble>
	<?rfc?><?rfc linefile="1:Algorithm-rollover-figure.xml"?><artwork>
----------------------------------------------------------------
 initial              new RRSIGs           new DNSKEY
----------------------------------------------------------------
Parent:
 SOA_0 -------------------------------------------------------->
 RRSIG_par(SOA) ----------------------------------------------->
 DS_K_1 ------------------------------------------------------->
 RRSIG_par(DS_K_1) -------------------------------------------->

Child:
 SOA_0                SOA_1                SOA_2
 RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)
                      RRSIG_Z_2(SOA)       RRSIG_Z_2(SOA)
  
 DNSKEY_K_1           DNSKEY_K_1           DNSKEY_K_1
                                           DNSKEY_K_2
 DNSKEY_Z_1           DNSKEY_Z_1           DNSKEY_Z_1
                                           DNSKEY_Z_2
 RRSIG_K_1(DNSKEY)    RRSIG_K_1(DNSKEY)    RRSIG_K_1(DNSKEY)
                                           RRSIG_K_2(DNSKEY)

----------------------------------------------------------------
 new DS               DNSKEY removal       RRSIGs removal
----------------------------------------------------------------
Parent:
 SOA_1 ------------------------------------------------------->
 RRSIG_par(SOA) ---------------------------------------------->
 DS_K_2 ------------------------------------------------------>
 RRSIG_par(DS_K_2) ------------------------------------------->

Child:
 -------------------> SOA_3                SOA_4 
 -------------------> RRSIG_Z_1(SOA)     
 -------------------> RRSIG_Z_2(SOA)       RRSIG_Z_2(SOA)
                     
 ------------------->
 -------------------> DNSKEY_K_2           DNSKEY_K_2
 ------------------->
 -------------------> DNSKEY_Z_2           DNSKEY_Z_2
 ------------------->
 -------------------> RRSIG_K_2(DNSKEY)    RRSIG_K_2(DNSKEY)
----------------------------------------------------------------
</artwork>
<?rfc linefile="546:Rollover.xml"?>
      </figure>

      <list style="hanging">
      <t hangText="initial:">
	Describes state of the zone before any transition is done.
	The number of the keys may vary,
        but all keys (in DNSKEY records) for the zone use the same algorithm.
      </t>
      <t hangText="new RRSIGs:">
	The signatures made with the new key over all
	records in the zone are added, but the key itself is not.
	This step is needed to propagate the signatures created with
	the new algorithm to the caches.
	If this is not done, it is possible for a resolver
	to retrieve the new DNSKEY RRset (containing the new algorithm)
	but to have RRsets in its cache with signatures created by the old
	DNSKEY RRset (i.e. without the new algorithm).
      </t>
      <t>
        The RRSIG for the DNSKEY RRset does not need to be
        pre-published (since these records will travel together), and
        does not need special processing in order to keep them synchronized.
      </t>
      <t hangText="new DNSKEY:">
	After the old data has expired from caches, the new key can be
	added to the zone.
      </t>
      <t hangText="new DS:">
	After the cache data for the old DNSKEY RRset has expired, the
	DS record for the new key can be added to the parent zone and
	the DS record for the old key can be removed in the same step.
      </t>
      <t hangText="DNSKEY removal:">
	After the cache data for the old DS RRset has expired, the old
	algorithm can be removed.  This time the old key needs to be
	removed first, before removing the old signatures.
      </t>
      <t hangText="RRSIGs removal:">
	After the cache data for the old DNSKEY RRset has
	expired, the old signatures can also be removed during this step.
      </t>
      </list>
	</t>

      <t>
	Below we deal with a few special cases of algorithm rollovers.
	<list style="hanging">

	  <t hangText="1: Single Type Signing Scheme Algorithm
	  Rollover:">when you have chosen not to differentiate
	  between Zone and Key signing keys (<xref
	  target="SingleTypeAlg"/>).</t>

	  <t hangText="2: RFC 5011 Algorithm Rollover:">when trust anchors can track the
	  roll via RFC 5011 style rollover (<xref
	  target="5011style"/>).</t>

	  <t hangText="3: 1 and 2 combined:">when a Single Type
	  Signing Scheme Algorithm rollover is performed with RFC 5011 style (<xref
	  target="5011andSingleType"/>).</t>

	</list>
	In addition to the narrative below, these special cases are represented in 
	<xref target="single-type-algorithm-roll-fig"/>,
	<xref target="5011-algorithm-roll-fig"/> and
	<xref target="single-type-5011-roll-fig"/>
	in <xref target="AlgoFigures"/>.
      </t>

      <section anchor="SingleTypeAlg" title="Single Type Signing Scheme Algorithm Rollover">
	<t>
	  If one key is used that acts both as ZSK and KSK, the same
	  scheme and figure as above applies whereby all DNSKEY_Z_*
	  records from the table are removed and all RRSIG_Z_* are
	  replaced with RRSIG_S_*. All DNSKEY_K_* records are replaced with DNSKEY_S_*
	  and all RRSIG_K_* records are replaced with RRSIG_S_*. The requirement to sign with both
	  algorithms and make sure that old RRSIGS have the opportunity
	  to expire from distant caches before introducing the new
	  algorithm in the DNSKEY RRset is still valid.
	</t>
	<t> 
	  Also see <xref target="single-type-algorithm-roll-fig"/> in <xref target="AlgoFigures"/>.
	</t>
      </section>

      <section anchor="5011style" title="Algorithm rollover, RFC 5011 style">
	<t>
	  Trust anchor algorithm rollover is almost as simple as a regular
	  RFC 5011 based rollover. However, the old trust anchor must
	  be revoked before it is removed from the zone.
	</t>

	<t>
	  The timeline (see <xref target="5011-algorithm-roll-fig"/> in <xref target="AlgoFigures"/>) is similar to that of <xref target="alg-rollover-fig"/> above, but after the
	  "new DS" step, an additional step is required where the DNSKEY is
	  revoked.  The details of this step ("revoke DNSKEY") are shown in
	  figure <xref target="revoke-key-fig"/> below.

	<figure anchor="revoke-key-fig" title="The Revoke DNSKEY state that is added to an algorithm rollover when RFC 5011 is in use.">
	  <preamble>
	    <!-- nothing -->
	  </preamble>
	  <?rfc?><?rfc linefile="1:revoke-key-figure.xml"?><artwork>
---------------------------------
  revoke DNSKEY
---------------------------------
Parent:
  ----------------------------->
  ----------------------------->
  ----------------------------->
  ----------------------------->

Child:
  SOA_3
  RRSIG_Z_1(SOA)
  RRSIG_Z_2(SOA)

  DNSKEY_K_1_REVOKED
  DNSKEY_K_2
  DNSKEY_Z_1
  DNSKEY_Z_2
  RRSIG_K_1(DNSKEY)
  RRSIG_K_2(DNSKEY)
--------------------------------
</artwork>
<?rfc linefile="649:Rollover.xml"?>
	</figure>

	  There is one exception to the requirement from RFC 4035 quoted in
	  section 4.1.5 above: while all zone data
	  must be signed with an unrevoked key, it is permissible
	  to sign the key set with a revoked key. The somewhat esoteric
	  argument follows.
	</t>
	
	<t>
	  Resolvers that do not understand the RFC 5011 Revoke flag
	  will handle DNSKEY_K_1_REVOKED the same as if it was
	  DNSKEY_K_1. In other words, they will handle the revoked key as
	  a normal key, and thus RRsets signed with this key will validate.
	  As a result, the signature matches the algorithm listed in the
	  DNSKEY RRset. Resolvers that do implement RFC 5011
	  will remove DNSKEY_K_1 from the set of trust anchors. That
	  is okay, since they have already added DNSKEY_K_2 as the new
	  trust anchor. Thus, algorithm 2 is the only signaled
	  algorithm by now. That means, we only need RRSIG_K_2(DNSKEY)
	  to authenticate the DNSKEY RRset, and we still are compliant
	  with section 2.2 from RFC 4035: There must be an RRSIG for
	  each RRset using at least one DNSKEY of each algorithm in
	  the zone apex DNSKEY RRset.
         </t>
  
      </section>
      <section anchor="5011andSingleType" title="Single Signing Type Algorithm Rollover, RFC 5011 style">
	<t>
	  Combining the Single Signing Type Scheme Algorithm Rollover and RFC 5011 style rollovers is
	  not trivial, see <xref target="single-type-5011-roll-fig"/> in <xref target="AlgoFigures"/>.
	</t>

	<t>
	  Should you choose to perform an RFC 5011 style rollover with a Single Signing Type key then remember that
	  section 2.1, RFC 5011 states:
<artwork>

    Once the resolver sees the REVOKE bit, it MUST NOT use this key
    as a trust anchor or for any other purpose except to validate
    the RRSIG it signed over the DNSKEY RRset specifically for the
    purpose of validating the revocation.

</artwork>

          This means that if you revoke DNSKEY_S_1, it cannot be
          used to validate its signatures over non-DNSKEY
          RRsets. Thus, those RRsets should be signed with a shadow
          key, DNSKEY_Z_1, during the algorithm rollover.  This
          shadow key can be introduced at the same time the signatures
          are pre-published, in step 2 (new RRSIGs). The shadow key
          must be removed at the same time the revoked DNSKEY_S_1 is
          removed from the zone. De-facto you temporarily falling back
          to a KSK/ZSK split model.
	</t>

	<t>
	  In other words, the rule that at every RRset there must be
	  at least one signature for each algorithm used in the DNSKEY
	  RRset still applies. This means that a different key with
	  the same algorithm, other than the revoked key, must sign
	  the entire zone. This can be the ZSK. Thus, more operations are
	  needed if the Single Type Signing Scheme is used. Before
	  rolling the algorithm, a new key must be introduced with the
	  same algorithm as the key that is candidate for
	  revocation. That key can than temporarily act as ZSK during
	  the algorithm rollover.
	</t>

	<t>
	  Just like with algorithm rollover in RFC 5011 style, while all zone
	  data must be signed with an unrevoked key, it is permissible
	  to sign the key set with a revoked key, for the same esoteric
	  argument described in <xref target="5011style"/>.
	</t>

      <t>
	The lesson of all of this is that a Single Type Signing
	scheme algorithm rollover using RFC 5011 is as
	complicated as the name of the rollover implies, one is better off
	explicitly using a split key temporarily.
      </t>

      </section>

     
      <section anchor="NSEC-NSEC3" title="NSEC to NSEC3 algorithm rollover">
      <t>
	A special case is the rollover from an NSEC signed zone to an
	NSEC3 signed zone. In this case algorithm numbers are used to
	signal support for NSEC3 but they do not mandate the use of
	NSEC3. Therefore, NSEC records should remain in the zone until
	the rollover to a new algorithm has completed and the new
	DNSKEY RRset has populated distant caches, at the end of
	the "new DNSKEY" stage. At that point
	the validators that have not implemented NSEC3 will treat the
	zone as unsecured as soon as they follow the chain of trust to
	the DS that points to a DNSKEY of the new algorithm, while
	validators that support NSEC3 will happily validate using
	NSEC. Turning on NSEC3 can then be done during the "new DS" step,
	increasing the serial number, realizing that this involves a re-signing
	of the zone and the introduction of the NSECPARAM record in
	order to signal authoritative servers to start serving NSEC3
	authenticated denial of existence.
      </t>
      <t>
	Summarizing, an NSEC to NSEC3 rollover is an ordinary algorithm
	rollover whereby NSEC is used all the time and only after that
	rollover finished NSEC3 needs to be deployed. The
	procedures are also listed in Sections 10.4 and 10.5 of
	<xref target="RFC5155">RFC 5155</xref>.
      </t>      
      </section>

    </section><!-- key algorithm rollover-->


	<!-- Adopted from gilles - ambivalent on whether this is
	     useful -->
	<section anchor="autokeyroll" title="Considerations for Automated Key Rollovers">
	  <t>
	    As keys must be renewed periodically, there is some
	    motivation to automate the rollover process. Consider the
	    following:
	  </t>
	  <t>
	    <list style="symbols">
	      <t>
		ZSK rollovers are easy to automate as only the child
		zone is involved.
	      </t>

	      <t>
		A KSK rollover needs interaction between parent and
		child.  Data exchange is needed to provide the new
		keys to the parent; consequently, this data must be
		authenticated and integrity must be guaranteed in
		order to avoid attacks on the rollover.
	      </t>

	    </list>
	  </t>

	</section> <!-- Automated Key Rollovers -->

      </section><!--Key rollover-->

      <section anchor="emergency" title="Planning for Emergency Key Rollover">

	<t>
	  This section deals with preparation for a possible key
	  compromise. It is advised to have a documented procedure
	  ready for when a key compromise is suspected or confirmed.
	</t>
	
	<t> 
	  When the private material of one of your keys is compromised
	  it can be used by an attacker for as long as a valid trust chain
	  exists.  A
	  trust chain remains intact for
	  <list style="symbols">
	    <t> 
	      as long as a signature over the compromised key in the
	      trust chain is valid, and
	    </t>
	    <t> 
	      as long as the DS RR in the parent zone points to the
	      compromised key, and
	    </t>
	    <t> 
	      as long as the key is anchored in a resolver and is used
	      as a starting point for validation (this is generally
	      the hardest to update).
	  </t>
	</list>
	
	
	</t>
	<t>
	  While a trust chain to your compromised key exists, your
	  namespace is vulnerable to abuse by anyone who has obtained
	  illegitimate possession of the key. Zone administrators have to
	  make a decision as to whether the abuse of the compromised key is
	  worse than having data in caches that cannot be
	  validated. If the zone administrator chooses to break the trust
	  chain to the compromised key, data in caches signed with
	  this key cannot be validated. However, if the zone
	  administrator chooses to take the path of a regular
	  rollover, during the rollover the malicious key holder
	  can continue to spoof data so that it appears to be valid.
	</t>

	<section title="KSK Compromise">

	  <t> 
	    A compromised KSK can be used to sign the key set of an
	    attacker's version of the zone. That zone could be used to poison the
	    DNS.
	   </t>

          <t> 
	    A zone containing a DNSKEY RRset with a compromised KSK is
	    vulnerable as long as the compromised KSK is configured as
	    trust anchor or a DS record in the parent zone points to it.
	  </t>
	  
	   <t>
	     Therefore, when the KSK has been compromised, the trust
	     anchor or the parent DS record should be replaced as soon as
	     possible. It is local policy whether to break the trust
	     chain during the emergency rollover. The trust chain
	     would be broken when the compromised KSK is removed from
	     the child's zone while the parent still has a DS record pointing
	     to the compromised KSK (the assumption is that there is
	     only one DS record at the parent. If there are multiple DS records
	     this does not apply -- however the chain of trust of this
	     particular key is broken).  
	   </t>
	   
	   <t> 
	     Note that an attacker's version of the zone still uses the compromised
	     KSK and the presence of the corresponding DS record in
	     the parent would cause the data in this zone to appear as
	     valid. Removing the compromised key would cause the
	     attacker's version of the zone to appear as valid and the original zone
	     as Bogus. Therefore, we advise not to remove the KSK
	     before the parent has a DS record for the new KSK in
	     place.
	   </t>

	   <section title="Emergency Key Rollover Keeping the Chain of Trust Intact">
	     
	     <t>
	       If we follow the advice to perform an emergency key rollover in a manner that keeps the chain of trust intact,
	       the timing of the replacement
	       of the KSK is somewhat critical. The goal is to remove
	       the compromised KSK as soon as the new DS RR is
	       available at the parent.  We therefore have to make
	       sure that the signature made with a new KSK over the
	       key set that contains the compromised KSK expires just
	       after the new DS appears at the parent. Expiration of
	       that signature will cause expiration of that key set
	       from the caches.
	     </t>
	     
	     <t>
	       The procedure is as follows:
	       <list style="numbers">


          <t>Introduce a new KSK into the key set, keep the
          compromised KSK in the key set. Lower the TTL for DNSKEYs
	  so that the DNSKEY RRset will expire from caches sooner.
	  </t>

          <t>Sign the key set, with a short validity period. The validity
             period should expire shortly after the DS is expected to appear
             in the parent and the old DSes have expired from caches.
             This provides an upper limit on how long the compromised KSK
             can be used in a replay attack.
          </t>

	  <t>Upload the DS for this new key to the parent.</t>

          <t>Follow the procedure of the regular KSK rollover: Wait
          for the DS to appear at the authoritative servers and then
          wait as long as the TTL of the old DS RRs. If necessary, re-sign the DNSKEY RRset
          and modify/extend the expiration time.
          </t>

         <t> Remove the compromised
             DNSKEY RR from the zone and re-sign the key set using your
             "normal" TTL and signature validity period.
	 </t>

        </list>
	
     </t>

           <t>
          An additional danger of a key compromise is that the
          compromised key could be used to facilitate a legitimately looking
          DNSKEY/DS rollover and/or name server changes at the parent. When
          that happens, the domain may be in dispute. An
          authenticated out-of-band and secure notify mechanism to
          contact a parent is needed in this case.
                  </t>
                  <!-- This is only when as DNSSEC keys are used to
                  validate the rollover -->
                  <t>
                  Note that this is only a problem when the DNSKEY and or
                  DS records are used for authentication to the parent.
                  </t>

	</section> <!-- Keeping the Chain of Trust Intact -->

	<section title="Emergency Key Rollover Breaking the Chain of Trust">
        <t> 
	  There are two methods to perform an emergency key rollover in a manner that breaks
	  the chain of trust. The first
	  method causes the child zone to appear 'Bogus' to validating
	  resolvers. The other causes the child zone to appear
	  'insecure'. These are described below.
	</t>
	
	<t>
	  In the method that causes the child zone to appear 'Bogus'
	  to validating resolvers, the child zone replaces the current
	  KSK with a new one and re-signs the key set. Next, it sends
	  the DS of the new key to the parent. Only after the parent
	  has placed the new DS in the zone is the child's chain of
	  trust repaired. Note that until that time, the child zone
	  is still vulnerable to spoofing: the attacker is still in
	  possesion of the compromised key that the DS points to.
	</t>
        <t>
	  An alternative method of breaking the chain of trust is by
	  removing the DS RRs from the parent zone altogether. As a
	  result, the child zone would become insecure.
	</t>
      </section> <!-- Breaking the Chain of Trust -->
      
      
    </section><!--KSK compromise-->
    
    <section title="ZSK Compromise">
      
      <t>
	Primarily because there is no interaction with the parent required
	when a ZSK is compromised, the situation is less severe than
	with a KSK compromise. The zone must still be re-signed with a
	new ZSK as soon as possible. As this is a local operation and
	requires no communication between the parent and child, this
	can be achieved fairly quickly. However, one has to take into
	account that -- just as with a normal rollover -- the immediate
	disappearance of the old compromised key may lead to
	verification problems.  Also note that until the RRSIG
	over the compromised ZSK has expired, the zone may be still
	at risk.
      </t>
    </section><!--ZSK compromise-->
    
    <section title="Compromises of Keys Anchored in Resolvers">
      
      <t>
	A key can also be pre-configured in resolvers as a trust anchor.
	If trust anchor keys are compromised, the administrators of
	resolvers using these keys should be notified of this
	fact. Zone administrators may consider setting up a mailing
	list to communicate the fact that a SEP key is about to be
	rolled over. This communication will of course need to be
	authenticated by some means, e.g. by using digital signatures.
      </t>
      <t>
	End-users faced with the task of updating an anchored key
	should always verify the new key. New keys should be
	authenticated out-of-band, for example, through the use of an
	announcement website that is secured using Transport Layer Security
	(TLS) <xref target="RFC5246"/>.
	  </t>
    </section><!--Pre-configured key compromise-->

    <section title="Stand-by Keys">
	<t>
	Stand-by keys are keys that are published in your zone, but
	are not used to sign RRsets. There are two reasons why someone
	would want to use stand-by keys. One is to speed up the
	emergency key rollover. The other is to recover from a disaster
	that leaves your production private keys inaccessible.
        </t>

	<t>
	The way to deal with stand-by keys differs for ZSKs and KSKs.
	To make a stand-by ZSK, you need to publish its DNSKEY RR.
	To make a stand-by KSK, you need to get its DS RR published at the parent.
        </t>

        <t>
        Assuming you have your DNS operation at location A, to prepare stand-by keys
        you need to:

	<list style="symbols">
        <t>Generate a stand-by ZSK and KSK. Store them safely in a different
	   location (B) than the currently used ZSK and KSK (that are at location A).</t>
	<t>Pre-publish the DNSKEY RR of the stand-by ZSK in the zone.</t>
	<t>Pre-publish the DS of the stand-by KSK in the parent zone.</t>
        </list>

        Now suppose a disaster occurs and disables access to the currently used keys.
        To recover from that situation, follow these procedures:
  
	<list style="symbols">
	<t>Set up your DNS operations and import the stand-by keys from location B.</t>
	<t>Post-publish the current ZSK and sign the zone with the stand-by keys.</t>
	<t>After some time, when the new signatures have been propagated, 
	   the old ZSK and DS can be removed.</t>
	<t>Generate a new stand-by key set at a different location and continue "normal" operation.</t>
	</list>
	</t>

    </section> <!--Stand-by Keys -->


      </section> <!--Planning for key compromise -->


      <!--  -->

      <section anchor="parents" title="Parent Policies">


	<section title="Initial Key Exchanges and Parental Policies Considerations">

	  <t> The initial key exchange is always subject to the
	  policies set by the parent.  It is specifically important in
	  a registry-registrar model where the key material is to be
	  passed from the DNS operator to the (parent) registry via a registrar,
	  where both DNS operator and registrar are selected by the
	  registrant and might be different organisations. When
	  designing a key exchange policy, one should take into account
	  that the authentication and authorization mechanisms used
	  during a key exchange should be as strong as the
	  authentication and authorization mechanisms used for the
	  exchange of delegation information between parent and
	  child. That is, there is no implicit need in DNSSEC to make
	  the authentication process stronger than it is for regular DNS.</t>


	  <t> Using the DNS itself as the source for the actual DNSKEY
	  material has the benefit that it reduces the chances of user
	  error. A DNSKEY query tool can make use of the
	  SEP bit <xref target="RFC4035"/> to select the proper
	  key from a DNSSEC key set, thereby reducing the chance that
	  the wrong DNSKEY is sent. It can validate the self-signature
	  over a key; thereby verifying the ownership of the private
	  key material. Fetching the DNSKEY from the DNS ensures that
	  the chain of trust remains intact once the parent publishes
	  the DS RR indicating the child is secure.  </t>

	  <t> Note: out-of-band verification is still needed when the
	  key material is fetched for the first time, even via DNS.
	  The parent can never be
	  sure whether or not the DNSKEY RRs have been spoofed.
	  </t>

	  <t> With some type of key rollovers, the DNSKEY is not
	  pre-published and a DNSKEY query tool is not able to retrieve
	  the successor key. In this case, the out-of-band method is
	  required. This also allows the child to determine the digest
	  algorithm of the DS record.
	  </t>

	</section>

	<section title="Storing Keys or Hashes?">

	  <t>When designing a registry system one should consider
	  whether to store the DNSKEYs and/or the corresponding DSes.
	  Since a child zone might wish to have a DS published using a
	  message digest algorithm not yet understood by the registry,
	  the registry can't count on being able to generate the DS
	  record from a raw DNSKEY.  Thus, we suggest that registry
	  systems should be able to store DS RRs, even if they also
	  store DNSKEYs (see also <xref
	  target="I-D.ietf-dnsop-dnssec-trust-anchor">draft-ietf-dnsop-dnssec-trust-anchor</xref>).
	  </t>

	  <t>
	    The storage considerations also relate to the design of
	    the customer interface and the method by which data is
	    transferred between registrant and registry: Will the
	    child zone administrator be able to upload DS RRs with
	    unknown hash algorithms or does the interface only allow
	    DNSKEYs? When registries support the Extensible
	    Provisioning Protocol (EPP) <xref target="RFC5910"/>,
	    that can be used for registrar-registry interactions since
	    that protocol allows the transfer of both DS and optionally
	    DNSKEY RRs. There is no standardized way for moving the
	    data between the customer and the registrar.  Different registrars have different mechanisms,
	    ranging from simple web interfaces to various APIs. In
	    some cases the use of the DNSSEC extensions to EPP may be
	    applicable.
	  </t>

	  <t>Having an
	  out-of-band mechanism, such as a registry directory (e.g., Whois),
	  to find out which keys are used to generate DS Resource Records for
	  specific owners and/or zones may also help with
	  troubleshooting.
	  </t>

	</section>

	<section title="Security Lameness" anchor="lame">

	  <t> Security lameness is defined as the state whereby the
	  parent has a DS RR pointing to a non-existing DNSKEY
	  RR. Security lameness may occur temporarily during a
	  Double-DS rollover scheme. However care should be taken that
	  not all DS RRs are security lame which may cause the child's
	  zone to be marked "Bogus" by verifying DNS clients.
	  </t>

	 <t> As part of a comprehensive delegation check, the parent could,
	 at key exchange time, verify that the child's key is actually
	 configured in the DNS.
	  However, if a parent does not understand the hashing algorithm used
	  by the child, the parental checks are limited to only comparing the key
	  id.
	  </t>

	  <t>
	    Child zones should be very careful in removing DNSKEY material,
	    specifically SEP keys, for which a DS RR exists.
	  </t>

	  <t> Once a zone is "security lame", a fix (e.g., removing a
	  DS RR) will take time to propagate through the DNS.

	  </t>
	</section>

	<section anchor="DSvalidity" title="DS Signature Validity Period">

	  <t>
	    Since the DS can be replayed as long as it has a valid
	    signature, a short signature validity period for the DS
	    RRSIG minimizes the time a child is vulnerable in the case
	    of a compromise of the child's KSK(s).  A signature
	    validity period that is too short introduces the
	    possibility that a zone is marked "Bogus" in case of a
	    configuration error in the signer. There may not be enough
	    time to fix the problems before signatures expire (this is
	    a generic argument; also see <xref target="sigval"/>).
	    Something as mundane as zone administrator unavailability during
	    weekends shows the need for DS signature validity periods
	    longer than two days. Just like any signature validity period,
	    we suggest an absolute minimum for
	    the DS signature validity period of a few days.
	  </t>

	  <t>
	    The maximum signature validity period of the DS record
	    depends on how long child zones are willing to be
	    vulnerable after a key compromise. On the other hand,
	    shortening the DS signature validity period increases
	    the operational risk for the parent. Therefore, the parent
	    may have policy to use a signature validity period that
	    is considerably longer than the child would hope for.
	  </t>

	  <t> 
	    A compromise between the policy/operational constraints of the
	    parent and minimizing damage for the child may result in a
	    DS signature validity period somewhere between a week and
	    months.
	  </t>
	  
	  <t>
	    In addition to the signature validity period, which sets a
	    lower bound on the number of times the zone administrator will
	    need to sign the zone data and which sets an upper bound
	    to the time a child is vulnerable after key compromise,
	    there is the TTL value on the DS RRs. Shortening the TTL
	    reduces the damage of a successful replay attack. It does
	    mean that the authoritative servers will see more
	    queries. But on the other hand, a short TTL lowers the
	    persistence of DS RRsets in caches thereby increasing the
	    speed with which updated DS RRsets propagate through the
	    DNS.
	  </t>
	</section>
	<section title="Changing DNS Operators" anchor="changing-operators">
	    <t>
	      The parent-child relation is often described in terms of
	      a registry-registrar-registrant model, where a registry maintains the
	      parent zone, and the registrant (the user of the
	      child-domain name) deals with the registry through an
	      intermediary called a registrar. (See <xref
	      target="RFC3375"/> for a comprehensive
	      definition). Registrants may out-source the maintenance
	      of their DNS system, including the maintenance of DNSSEC
	      key material, to the registrar or to another third
	      party, which we will call the DNS operator. The DNS
	      operator who has control over the DNS zone and its keys
	      may prevent the registrant to make a timely move to a
	      different DNS operator.

	    </t>
	    
	    <t>
	      For various reasons, a registrant may want to move
	      between DNS operators.  How easy this move will be
	      depends principally on the DNS operator from which the
	      registrant is moving (the losing operator), as they have
	      control over the DNS zone and its keys.  The following
	      sections describe the two cases: where the losing
	      operator cooperates with the new operator (the gaining
	      operator), and where the two do not cooperate.
	    </t>
	  <section title="Cooperating DNS operators" anchor="cooperating_registrars">

	    <t>
	    In this scenario, it is assumed that the losing operator will not
	    pass any private key material to the gaining operator (that would
	    constitute a trivial case) but is otherwise fully cooperative.
	    </t>

	    
	    <t>
	      In this environment, the change could be made with a
	      Pre-Publish ZSK rollover whereby the losing operator
	      pre-publishes the ZSK of the gaining operator, combined
	      with a Double Signature KSK rollover where the two
	      registrars exchange public keys and independently
	      generate a signature over those key sets that they
	      combine and both publish in their copy of the zone. Once
	      that is done they can use their own private keys to sign
	      any of their zone content during the transfer.

 	    <figure anchor="operator-roll-fig" title="Rollover for cooperating operators">
	<?rfc?><?rfc linefile="1:Operator-roll.xml"?><artwork>
 ------------------------------------------------------------
 initial            |        pre-publish                    |
 ------------------------------------------------------------
 Parent:
  NS_A                            NS_A          
  DS_A                            DS_A           
 ------------------------------------------------------------
 Child at A:            Child at A:        Child at B:
  SOA_A0                 SOA_A1             SOA_B0
  RRSIG_Z_A(SOA)         RRSIG_Z_A(SOA)     RRSIG_Z_B(SOA)
                           
  NS_A                   NS_A               NS_B
  RRSIG_Z_A(NS)          NS_B               RRSIG_Z_B(NS)
                         RRSIG_Z_A(NS)

  DNSKEY_Z_A             DNSKEY_Z_A         DNSKEY_Z_A            
                         DNSKEY_Z_B         DNSKEY_Z_B
  DNSKEY_K_A             DNSKEY_K_A         DNSKEY_K_A            
                         DNSKEY_K_B         DNSKEY_K_B
  RRSIG_K_A(DNSKEY)      RRSIG_K_A(DNSKEY)  RRSIG_K_A(DNSKEY)
                         RRSIG_K_B(DNSKEY)  RRSIG_K_B(DNSKEY)
 ------------------------------------------------------------

 ------------------------------------------------------------
       redelegation                 |   post migration      |
 ------------------------------------------------------------
 Parent:
           NS_B                           NS_B
           DS_B                           DS_B
 ------------------------------------------------------------
 Child at A:        Child at B:           Child at B:

  SOA_A1             SOA_B0                SOA_B1
  RRSIG_Z_A(SOA)     RRSIG_Z_B(SOA)        RRSIG_Z_B(SOA)

  NS_A               NS_B                  NS_B
  NS_B               RRSIG_Z_B(NS)         RRSIG_Z_B(NS)
  RRSIG_Z_A(NS)

  DNSKEY_Z_A         DNSKEY_Z_A
  DNSKEY_Z_B         DNSKEY_Z_B            DNSKEY_Z_B
  DNSKEY_K_A         DNSKEY_K_A
  DNSKEY_K_B         DNSKEY_K_B            DNSKEY_K_B            
  RRSIG_K_A(DNSKEY)  RRSIG_K_A(DNSKEY)
  RRSIG_K_B(DNSKEY)  RRSIG_K_B(DNSKEY)     RRSIG_K_B(DNSKEY)
 ------------------------------------------------------------
</artwork>
<?rfc linefile="1271:Rollover.xml"?>
 	    </figure>

		In this figure A denotes the losing operator and
		B the gaining operator. RRSIG_Z is the RRSIG
		produced by a ZSK, RRSIG_K is produced with a KSK, the
		appended A or B indicates the producers of the key
		pair. "Child at A" is how the zone content is represented
 		by the losing DNS operator and "Child at B" is how the
 		zone content is represented by the gaining DNS
		operator.
	      </t>

		<t>
		The zone is initially delegated from the parent to the name servers
		of operator A. Operator A uses his own ZSK and KSK to sign the zone.
		The cooperating operator A will pre-publish the new NS record and
		the ZSK and KSK of
		operator B, including the RRSIG over the DNSKEY RRset generated
		by the KSK of B. Operator B needs to publish the same DNSKEY RRset.
		When that DNSKEY RRset has populated the caches, the redelegation can be
		made. And after all DNSSEC records related to A have expired from
		the caches, operator B can stop publishing the keys and signatures
		belonging to operator A.
		</t>
		
	    <t>
		The requirement to exchange signatures has a couple of drawbacks.
		It requires more operational overhead, because not only the operators have to exchange
		public keys, they also have to exchange the signatures of the new DNSKEY RRset.
		Also, it disallows the children to refresh the signatures when they expire for a
		certain period.
		Both drawbacks do not exist if you replace the Double Signature KSK rollover with a
		Double-DS KSK rollover.
		See <xref target="coop_registrars" /> in <xref target="DNSOPFigures" /> for the diagram.
		</t>

	    <t>
		Thus, if the registry and registrars allow for DS records to
	      be published that do not point to a published DNSKEY in the child zone,
	      the Double-DS KSK rollover is preferred (also known as Pre-Publication KSK Rollover, see <xref target="pre-pubkish-ksk-roll-fig"/>),
	      in combination with the Pre-Publish ZSK rollover. This does not require to share the KSK signatures between the
	      operators. Both the losing and the gaining operator still need to publish the public ZSK of each other.
	    </t>

	  </section>
	  <section title="Non Cooperating DNS Operators" anchor="non_cooperating_registrars">

	      <t>
	      In the non-cooperative case matters are more complicated. The
	      losing operator may not cooperate and
	      leave the data in the DNS as is. In the extreme case
	      the losing operator may become obstructive and publish
	      a DNSKEY RR with a high TTL and corresponding signature
	      validity period so that registrar A's DNSKEY could end up in
	      caches for (in theory at least) tens of years.
	    </t>
	    
	    <t>
	      The problem arises when a validator tries to validate
	      with the losing operator's key and there is no
	      signature material produced with the losing operator
	      available in the delegation path after redelegation from
	      the losing operator to the gaining operator has taken
	      place.  One could imagine a rollover scenario where the
	      gaining operator pulls all RRSIGs created by the losing
	      operator and publishes those in conjunction with its own
	      signatures, but that would not allow any changes in the
	      zone content. Since a redelegation took place, the NS
	      RRset has - by definition - changed so such rollover
	      scenario will not work. Besides if zone transfers are
	      not allowed by the losing operator and NSEC3 is
	      deployed in the losing operator's zone, then the
	      gaining operator's zone will not have certainty that
	      all of A's RRSIGs are transferred.
	    </t>
	    <t>
	      The only viable option for the registrant is to publish
	      its zone unsigned and ask the registry to remove the DS RR
	      pointing to the losing operator's DNSKEY.
	    </t>
	    <t>
	      Note that some behavior of resolver implementations may aid in
              the process of changing DNS operators:
		<list style="symbols">
		<t>TTL sanity checking, as described in RFC 2308
		   <xref target="RFC2308"/>, will limit the impact
		   the actions of an obstructive, losing operator.
		   Resolvers that implement TTL sanity checking will
		   use an upper limit for TTLs on RRsets in responses.
		</t>
		<t>If RRsets at the zone cut (are about to) expire,
		the resolver restarts its search above the zone cut.
		Otherwise, the resolver risks to keep using a name server
		that might be undelegated by the parent.
		</t>
		<t>Limiting the time DNSKEYs that seem to be unable to validate
		signatures are cached and/or trying to recover from cases where
		DNSKEYs do not seem to be able to validate data, also
		reduces the effects of the problem of non-cooperating registars.
		</t>
		</list>
	    </t>
	    <t>
	      However, there is no operational methodology to work
	      around this business issue, and proper contractual
	      relationships between all involved parties seems to be
	      the only solution to cope with these problems. It should
	      be noted that in many cases, the problem with temporary
	      broken delegations already exists when a zone changes
	      from one DNS operator to another. Besides, it is often
	      the case that when operators are changed, the services
	      that that zone references also change operator, possibly
	      involving some downtime.
	    </t>
	    <t>
	      In any case, to minimise such problems, the classic
	      configuration is to have relative short TTL on all
	      involved resource records. That will solve many of the
	      problems regarding changes to a zone regardless of
	      whether DNSSEC is used.

	    </t>
	    
	    
	</section><!--noncooperative registrars-->
      </section>
    </section><!-- Parental policies -->



    <section anchor="time" title="Time in DNSSEC">
      <t>
	Without DNSSEC, all times in the DNS are relative. The SOA
	fields REFRESH, RETRY, and EXPIRATION are timers used to
	determine the time elapsed after a slave server synchronized
	with a master server. The Time to Live (TTL) value and the SOA
	RR minimum TTL parameter <xref target="RFC2308" /> are used to
	determine how long a forwarder should cache data (or negative responses) after it has
	been fetched from an authoritative server. By using a
	signature validity period, DNSSEC introduces the notion of an
	absolute time in the DNS. Signatures in DNSSEC have an
	expiration date after which the signature is marked as invalid
	and the signed data is to be considered Bogus.
      </t>
      <t>
	The considerations in this section are all qualitative and
	focused on the operational and managerial issues. A more
	thorough quantitative analysis of rollover timing parameters
	can be found in <xref
	target="I-D.ietf-dnsop-dnssec-key-timing">draft-ietf-dnsop-dnssec-key-timing</xref>
      </t>

      <section anchor="time_considerations" title="Time Considerations">

	<t>
	  Because of the expiration of signatures, one should consider the
	  following:
	</t>
	<t>
	  <list style="symbols">

	    <t>
	      We suggest the Maximum Zone TTL of your zone data to be a
	      fraction of your signature validity period.

	      <list style="hanging">
		<t>
		  If the TTL was of similar order as the signature
		  validity period, then all RRsets fetched during the
		  validity period would be cached until the signature
		  expiration time.  <xref target="RFC4033">Section 8.1
		  of RFC 4033</xref> suggests that "the resolver may
		  use the time remaining before expiration of the
		  signature validity period of a signed RRset as an
		  upper bound for the TTL". As a result, query load on
		  authoritative servers would peak at signature
		  expiration time, as this is also the time at which
		  records simultaneously expire from caches.
		</t>
		<t>
		  To avoid query load peaks, we suggest the TTL on all
		  the RRs in your zone to be at least a few times
		  smaller than your signature validity period.
		</t>
	      </list>
	    </t>
	    <t>
	      We suggest the signature publication period to end at
	      least one Maximum Zone TTL duration (but preferably 
	      a minumum of a few days) before the end of the signature validity period.
	      <list style="hanging">

		<t>
		  Re-signing a zone shortly before the end of the
		  signature validity period may cause simultaneous
		  expiration of data from caches. This in turn may
		  lead to peaks in the load on authoritative
		  servers. To avoid this, schemes are deployed whereby
		  the zone is periodically visited for a re-signing
		  operation and those signatures that are within a so
		  called Refresh Period from signature expiration
		  are recreated. Also see <xref target="sigval"/>
		  below.
		</t>

		<t>
		In case of an operational error, you would have one
		Maximum Zone TTL duration to resolve the problem.
		Re-signing a zone a few days before the end of the 
		signature validity period ensures the signatures
		will survive a weekend in case of such operational havoc.
		This is called the Refresh Period (see <xref target="sigval"/>).
		</t>

	      </list>
	    </t>
	    <t>
	      We suggest the Minimum Zone TTL to be long enough to
	      both fetch and verify all the RRs in the trust chain. In
	      workshop environments, it has been demonstrated <xref
	      target="NIST-workshop" /> that a low TTL (under 5 to 10
	      minutes) caused disruptions because of the following two
	      problems:

	      <list style="hanging">
		
		<t>
		  1. During validation, some data may expire before
		  the validation is complete. The validator should be
		  able to keep all data until it is completed. This
		  applies to all RRs needed to complete the chain of
		  trust: DS, DNSKEY, RRSIG, and the final answers,
		  i.e., the RRset that is returned for the initial
		  query.
		</t>
		<t>
		  2. Frequent verification causes load on recursive
		  name servers. Data at delegation points, DS, DNSKEY, and
		  RRSIG RRs benefit from caching. The TTL on those should be
		  relatively long. Data at the leafs in the DNS tree
		  has less impact on recursive name servers.
		</t>
	      </list>
	    </t>
	    <t>
	      Slave servers will need to be able to fetch newly signed
	      zones well before the RRSIGs in the zone served by the
	      slave server pass their signature expiration time.
	      <list style="hanging">
		
		
		<t>
		  When a slave server is out of synchronization with its master
		  and data in a zone is signed by expired signatures,
		  it may be better for the slave server not to give
		  out any answer.
		</t>

		<t>
		  Normally, a slave server that is not able to contact
		  a master server for an extended period will expire a
		  zone. When that happens, the server will respond
		  differently to queries for that zone. Some servers
		  issue SERVFAIL, whereas others turn off the 'AA' bit
		  in the answers.

		  The time of expiration is set in the SOA
		  record and is relative to the last successful refresh
		  between the master and the slave servers. There exists no
		  coupling between the signature expiration of RRSIGs in
		  the zone and the expire parameter in the SOA.
		</t>

		<t>
		  If the server serves a DNSSEC-secured zone, then it may
		  happen that the signatures expire well before the SOA
		  expiration timer counts down to zero. It is not possible
		  to completely prevent this by modifying
		  the SOA parameters.
		</t>
		<t>
		  However, the effects can be minimized where the SOA
		  expiration time is equal to or shorter than the
		  Refresh Period (see <xref target="sigval"/>).
		</t>

		<t>
		  The consequence of an authoritative server not being
		  able to update a zone for an extended period of time
		  is that signatures may expire. In this case,
		  non-secure resolvers will continue to be able to
		  resolve data served by the particular slave servers
		  while security-aware resolvers will experience
		  problems because of answers being marked as Bogus.
		</t>


		<t>
		  We suggest the SOA expiration timer being approximately
		  one third or a quarter of the signature validity period.
		  It will allow problems with transfers from the master server
		  to be noticed before the actual signature times out.
		</t>


		<t>
		  We also suggest that operators of name servers that
		  supply secondary services develop systems to identify
		  upcoming signature expirations in zones they slave and
		  take appropriate action where such an event is detected.
		</t>

		<t>
		  When determining the value for the expiration parameter
		  one has to take the following into account: what are the
		  chances that all my secondaries expire the zone? How quickly
		  can I reach the administrators of the secondary servers to
		  load a valid zone? These questions are not DNSSEC-specific
		  but may influence the choice of your signature
		  validity periods.
	      </t>
	      </list>
	    </t>

	  </list>
	</t>
      </section> <!-- time considerations -->


    <section title="Signature Validity Periods" anchor="sigval">

      <section title="Maximum Value">
      <t>
	The first consideration for choosing a maximum signature
	validity period is the risk of a replay attack. For low-value,
	long-term stable resources, the risks may be minimal and the
	signature validity period may be several months. Although
	signature validity periods of many years are allowed, the same
	operational habit arguments as in <xref
	target="rolling-ksk-ta"/> play a role: when a zone is re-signed
	with some regularity, then zone administrators remain conscious about the
	operational necessity of re-signing.
      </t>
      </section>
      <section title="Minimum Value">
	<t> 
	  The minimum value of the signature validity period is set for
	  the time by which one would like to survive operational
	  failure in provisioning: what is the time that a failure
	  will be noticed, what is the time that action is expected to
	  be taken? By answering these questions, availability of
	  zone administrators during (long) weekends or time taken to access backup media
	  can be taken into account. The result could easily suggest a
	  minimum signature validity period of a few days.
	</t>
	<t>
	  Note however, the argument above is assuming that zone data
	  has just been signed and published when the problem
	  occurred. In practice it may be that a zone is signed
	  according to a frequency set by the Re-Sign Period whereby
	  the signer visits the zone content and only refreshes
	  signatures that are close to expiring: the signer will only
	  refresh signatures if they are within the Refresh Period
	  from the signature expiration time.  The Re-Sign Period must
	  be smaller than the Refresh Period in order for zone data to
	  be signed in a timely fashion.
	</t>
	<t>
	  If an operational problem occurs during re-signing, then the
	  signatures in the zone to expire first are the ones
	  that have been generated longest ago. In the worst case,
	  these signatures are the Refresh Period minus the Re-Sign
	  Period away from signature expiration.
	</t>
	<t>
	  To make matters slightly more complicated, some signers vary
	  the signature validity period over a small range (the jitter
	  interval) so that not all signatures expire at the same
	  time. 
	</t>
	<t>
	  In other words, the minimum signature validity period is
	  set by first choosing the Refresh Period (usually a few
	  days), then defining the Re-Sign Period in such a way that 
	  the Refresh Period minus the Re-Sign Period, minus the maximum
	  jitter sets the time in which operational havoc can be resolved.
	</t>

	<t>
	  The relationship between signature times is illustrated in
	  <xref target="signature-fig" />. 

	<figure anchor="signature-fig" title="Signature Timing Parameters">
	<?rfc?><?rfc linefile="1:SignatureFigure.xml"?><artwork>
 Inception          Signing                                 Expiration
 time               time                                    time
 |                  |                                 |     |     |
 |------------------|---------------------------------|.....|.....|
 |                  |                                 |     |     |
                                                        +/-jitter

 | Inception offset |                                       |
 |<---------------->|            Validity Period            |
 |               |<---------------------------------------->|

                          
 Inception          Signing Reuse   Reuse   Reuse   New     Expiration
 time               time                            RRSIG   time
 |                  |       |       |       |       |       |
 |------------------|-------------------------------|-------|
 |                  |       |       |       |       |       |
                     <-----> <-----> <-----> <----->
                   Resign Period
                    
                                       |                  |
                                       |<-Refresh Period->|
                                       |                  |
</artwork>
<?rfc linefile="1665:Rollover.xml"?>
	</figure>	

	  Note that in the figure the validity of the signature starts shortly before the
	  signing time. That is done to deal with 
	  validators that might have some clock skew. The inception offset
	  should be chosen so that you minimize the false negatives to a 
	  reasonable level.
	</t>
      </section>
      <section title="Differentiation between RRsets">
	<t>
	  It is possible to vary signature validity periods between
	  signatures over different RRsets in the zone. In practice,
	  this could be done when zones contain highly volatile data
	  (which may be the case in Dynamic Update environments). Note
	  however that the risk of replay (e.g., by stale secondary
	  servers) is what should be leading in determining the
	  signature validity period, since the TTLs on the data itself
	  are still the primary parameter for cache expiry.  
	</t>
	<t>
	  In some cases, the risk of replaying existing data might be
	  different from the risk of replaying the denial of data. In
	  those cases the signature validity period on NSEC or NSEC3
	  records may be tweaked accordingly.
	</t>
	<t>
	  When a zone contains secure delegations, then a relatively
	  short signature validity period protects the child against
	  replay attacks in the case the child's key is compromised
	  (see <xref target="DSvalidity"/>). Since there is a higher
	  operational risk for the parent registry when choosing a
	  short validity period and a higher operational risk for
	  the child when choosing a long validity period, some (price)
	  differentiation may occur for validity periods between
	  individual DS RRs in a single zone.
	</t>
	<t>
	  There seem to be no other arguments for differentiation in
	  validity periods.
	</t>
      </section>
      
    </section>
    
    
    </section> <!-- time in DNS -->


      
      
    </section><!-- Signature generation key rollover and related policies -->
<?rfc linefile="83:draft-ietf-dnsop-rfc4641bis.xml"?>
    
    <?rfc?><?rfc linefile="1:NSEC_NSEC3.xml"?>
<!-- Included from NSEC_NSEC3.xml -->
<!-- $Id -->

<section anchor="nsec_nsec3" title="Next Record type">
  <t>
    One of the design tradeoffs made during the development of DNSSEC
    was to separate the signing and serving operations instead of
    performing cryptographic operations as DNS requests are being
    serviced. It is therefore necessary to create records that cover
    the very large number of non-existent names that lie between the
    names that do exist.
  </t>
  <t>
    There are two mechanisms to provide authenticated proof of
    non-existence of domain names in DNSSEC: a clear-text one and an
    obfuscated-data one.  Each mechanism:
    <list style="symbols">
      <t>
	includes a list of all the RRTYPEs present, which can be used
	to prove the non-existence of RRTYPEs at a certain name;
      </t>
      <t>
	stores only the name for which the zone is authoritative (that
	is, glue in the zone is omitted); and
      </t>
      <t>
	uses a specific RRTYPE to store information about the RRTYPEs
	present at the name: the clear-text mechanism uses NSEC, and
	the obfuscated-data mechanism uses NSEC3.
      </t>
    </list>
  </t>
  
  <section title="Differences between  NSEC and NSEC3">
    <t>
      The clear text mechanism (NSEC) is implemented using a sorted
      linked list of names in the zone.  The obfuscated-data mechanism
      (NSEC3) is similar but first hashes the names using a one-way
      hash function, before creating a sorted linked list of the
      resulting (hashed) strings.
    </t>
 
    <t>
      The NSEC record requires no cryptographic operations aside from
      the validation of its associated signature record. It is human
      readable and can be used in manual queries to determine correct
      operation.  The disadvantage is that it allows for "zone
      walking", where one can request all the entries of a zone by
      following the linked list of NSEC RRs via the "Next Domain Name"
      field.
    </t>
    <t>
      Though all agree DNS data is accessible through query
      mechanisms, a side effect of NSEC is that it allows the contents
      of a zone file to be enumerated in full by sequential
      queries. Whilst for some zone administrators this behavior is acceptable
      or even desirable, for others it is undesirable for policy,
      regulatory or other reasons.  This is the first difference
      between NSEC and NSEC3.
    </t>
    <t>
      The second difference between NSEC and NSEC3 is that NSEC
      requires a signature over every RR in the zone file, thereby
      ensuring that any denial of existence is cryptographically
      signed. However, in a large zone file containing many delegations,
      very few of which are to signed zones, this may produce
      unacceptable additional overhead, especially where insecure
      delegations are subject to frequent update (a typical example
      might be a TLD operator with few registrants using secure
      delegations). NSEC3 allows intervals between two such
      delegations to "Opt-out" in which case they may contain one or more
      insecure delegations, thus reducing the size and
      cryptographic complexity of the zone at the expense of the
      ability to cryptographically deny the existence of names in a
      specific span.
    </t>
    <t>
      The NSEC3 record uses a hashing method of the requested name.
      To increase the workload required to guess entries in the zone,
      the number of hashing iterations can be specified in the NSEC3
      record. Additionally, a salt can be specified that also modifies
      the hashes. Note that NSEC3 does not give full protection
      against information leakage from the zone.
    </t>
  </section>
  <section title="NSEC or NSEC3">

    <t> 
      The first motivation to deploy NSEC3, prevention of zone
      enumeration, only makes sense when zone content is not highly
      structured or trivially guessable. Highly structured zones such
      as in-addr.arpa., ip6.arpa. and e164.arpa. can be trivially
      enumerated using ordinary DNS properties, while for small zones
      that only contain records in the APEX and a few common
      names such as "www" or "mail", guessing zone content and
      proving completeness is also trivial when using NSEC3.
    </t>
    <t>
      In those cases, the use of NSEC is preferred to ease the work
      required by signers and validating resolvers.
    </t>
    <t>
      
      For large zones where there is an implication of "not readily
      available" names, such as those where one has to sign a
      non-disclosure agreement before obtaining it, NSEC3 is
      preferred. The second reason to consider NSEC3 is opt-out, which
	can reduce the number of NSEC3 records required.  This is discussed
	further below (<xref target="opt-out"/>).</t>
    
  </section>
  
  <section title="NSEC3 parameters">
	<t>
	NSEC3 is controlled by
	a number of parameters, some of which can be varied: this section
	discusses the choice of those parameters.
	</t>
    <section title="NSEC3 Algorithm">
    <t>
      The NSEC3 hashing algorithm is performed on the Fully Qualified
      Domain Name (FQDN) in its uncompressed form. This ensures brute
      force work done by an attacker for one FQDN cannot be
      re-used for another FQDN attack, as these entries are,
      by definition unique.
    </t>
      <t>
	At the moment of writing, there is only one NSEC3 Hashing
	algorithm defined. <xref target="RFC5155"/> specifically calls
	out: "When a new hash algorithm for use with NSEC3 is
	specified, a transition mechanism MUST also be
	defined."
	 Therefore this document does not consider NSEC3 hash
	algorithm transition.
	</t>

    </section>
    <section title="NSEC3 Iterations">
      <t>
	One of the concerns with NSEC3 is that a pre-calculated dictionary attack could be performed in order to assess
	if certain domain names exist within a zone or not. Two
	mechanisms are introduced in the NSEC3 specification to
	increase the costs of such dictionary attacks: Iterations and
	Salt.
      </t>
      
	<t>
  	Iterations define the number of additional times the hash
	  function has been performed. A higher value results in greater
	resiliency against dictionary attacks, at a higher computational
	cost for both the server and resolver.
	</t>

      <t>
	<xref target="RFC5155">RFC 5155 Section 10.3</xref> considers the trade-offs
	between incurring cost during the signing process and imposing
	costs to the validating name server, while still providing a
	reasonable barrier against dictionary attacks. It provides
	useful limits of iterations for a given RSA key size. These
	are 150 iterations for 1024 bit keys, 500 iterations for 2048
	bit keys and 2,500 iterations for 4096 bit keys. Choosing
	a value of 100 iterations is deemed to be a sufficiently costly yet
	not excessive value: In the worst case scenario, the performance of your
	name servers would be halved, regardless of key size <xref target="nsec3-hash-performance"/>.
      </t>
    </section>
    <section title="NSEC3 Salt">
      <t>
	While the NSEC3 iterations parameter increases the cost of
	hashing a dictionary word, the NSEC3 salt reduces the lifetime
	for which that calculated hash can be used. A change of the
	salt value by the zone administrator would cause an attacker to lose
	all precalculated work for that zone.
      </t>
      <t>
	The FQDN, which is part of the value that is hashed,
	already ensures that brute force work for one name can not
	be re-used to attack other name (e.g. in other domains) due
	to their uniqueness.
      </t>

      <t>
	The salt of all NSEC3 records in a zone needs to be the same.
	Since changing the salt requires all the NSEC3 records to be
	regenerated, and thus requires generating new RRSIG's over
	these NSEC3 records, it makes sense to align the change of
	the salt with a change of the Zone Signing Key, as that
	process in itself already usually requires all RRSIG's to be
	regenerated. If there is no critical dependency on incremental
	signing and the zone can be signed with little effort,
	there is no need for such alignment. However, unlike Zone
	Signing Key changes, NSEC3 salt changes do not need special
	rollover procedures.  It is possible to change the salt each
	time the zone is updated.
      </t>
    </section>
    <section anchor="opt-out" title="Opt-out">
      <t>
	The Opt-Out mechanism was introduced to allow for a gradual
	introduction of signed records in zones that contain mostly
	delegation records. The use of the OPT-OUT flag changes the
	meaning of the NSEC3 span from authoritative denial of the
	existence of names within the span to a proof that DNSSEC is
	not available for the delegations within the span.
	This allows for the addition or removal of the
	delegations covered by the span without recalculating or re-
	signing RRs in the NSEC3 RR chain.
      </t>
      <t>
	Opt-Out is specified to be used only over delegation points
	and will therefore only bring relief to zones with a large
	number of insecure delegations. This consideration typically holds for large
	top-level-domains and similar zones; in most other
	circumstances, Opt-Out should not be deployed. Further
	considerations can be found in <xref target="RFC5155">
	Section 12.2 of RFC 5155</xref>.
	
      </t>
    </section>
  </section>
</section>
<?rfc linefile="85:draft-ietf-dnsop-rfc4641bis.xml"?>
    
    
    
    
    
    <section title="Security Considerations">
      
      <t> 
	DNSSEC adds data integrity to the DNS. This document tries to
	assess the operational considerations to maintain a stable and
	secure DNSSEC service. Not taking into account the 'data
	propagation' properties in the DNS will cause validation
	failures and may make secured zones unavailable to
	security-aware resolvers.  
      </t>
      
      
    </section><!--Security considerations-->
    
    
    <section title="IANA considerations">
      <t>
	There are no IANA considerations with respect to this document
      </t>
    </section>
    
    <section title="Contributors and Acknowledgments">
      <t>
	Significant parts of the text of this document is copied from <xref
	target="RFC4641">RFC 4641</xref>. That document was edited by
	Olaf Kolkman and Miek Gieben. Other people that contributed or
	where otherwise involved in that work were in random order:
	Rip Loomis, Olafur Gudmundsson, Wesley Griffin, Michael
	Richardson, Scott Rose, Rick van Rein, Tim McGinnis, Gilles
	Guette, Olivier Courtay, Sam Weiler, Jelte Jansen, Niall
	O'Reilly, Holger Zuleger, Ed Lewis, Hilarie Orman, Marcos
	Sanz, Peter Koch, Mike StJohns, Emma Bretherick, Adrian
	Bedford, Lindy Foster, and O. Courtay.
	</t>
	<t>
	  For this version of the document we would like to
	  acknowledge a few people for significant contributions:
	  <list style="hanging">

	    <t hangText="Paul Hoffman">for his contribution on the choice of
	    cryptographic parameters and addressing some of the
	    trust anchor issues;</t>
	    
	    <t hangText="Jelte Jansen">who provided the initial
	    text in <xref target="KAR"/>;</t>    
	    
	    <t hangText="Paul Wouters">who provided the initial text for <xref
	    target="nsec_nsec3"/> and Alex Bligh who improved it;</t>
	    
	    <t hangText="Erik Rescorla">whose blogpost on "the Security of ZSK
	    rollovers" inspired text in <xref
	    target="zsk-ksk-motivation"/>;</t>
	    
	    <t hangText="Stephen Morris">who made a pass on English style and
	    grammar;</t>
	    
	    <t hangText="Olafur Gudmundsson and Ondrej Sury">who provided input
	    on <xref target="KAR"/> based on actual operational
	    experience.</t>

	    <t hangText="Rickard Bellgrim">reviewed the document extensively.</t>

	  </list>
	</t>
	<t> The figure in <xref target="sigval"/> was adapted from
	the OpenDNSSEC user documentation.
	</t>
	<t>
	  In addition valuable contributions in the form of text,
	  comments, or review where provided by Mark Andrews, Patrik Faltstrom, Tony
	  Finch, Alfred Hoenes, Bill Manning, Scott Rose, Wouter Wijngaards,
	  Antoin Verschuren, Marc Lampo, George Barwood, and Sebastian Castro.
	</t>
	
	
      </section><!-- Acknowledgments -->
      
            
      
  </middle>
  
  
  <back>
    
    
    <references title='Normative References'>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.1034.xml"?>

<reference anchor='RFC1034'>

<front>
<title abbrev='Domain Concepts and Facilities'>Domain names - concepts and facilities</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>Information Sciences Institute (ISI)</organization></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1034' />
<format type='TXT' octets='129180' target='ftp://ftp.isi.edu/in-notes/rfc1034.txt' />
</reference>
<?rfc linefile="177:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.1035.xml"?>

<reference anchor='RFC1035'>

<front>
<title abbrev='Domain Implementation and Specification'>Domain names - implementation and specification</title>
<author initials='P.' surname='Mockapetris' fullname='P. Mockapetris'>
<organization>USC/ISI</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal>
<phone>+1 213 822 1511</phone></address></author>
<date year='1987' day='1' month='November' /></front>

<seriesInfo name='STD' value='13' />
<seriesInfo name='RFC' value='1035' />
<format type='TXT' octets='125626' target='ftp://ftp.isi.edu/in-notes/rfc1035.txt' />
</reference>
<?rfc linefile="178:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4033.xml"?>

<reference anchor='RFC4033'>

<front>
<title>DNS Security Introduction and Requirements</title>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='R.' surname='Austein' fullname='R. Austein'>
<organization /></author>
<author initials='M.' surname='Larson' fullname='M. Larson'>
<organization /></author>
<author initials='D.' surname='Massey' fullname='D. Massey'>
<organization /></author>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<date year='2005' month='March' />
<abstract>
<t>The Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System.  This document introduces these extensions and describes their capabilities and limitations.  This document also discusses the services that the DNS security extensions do and do not provide.  Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4033' />
<format type='TXT' octets='52445' target='ftp://ftp.isi.edu/in-notes/rfc4033.txt' />
</reference>
<?rfc linefile="179:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4034.xml"?>

<reference anchor='RFC4034'>

<front>
<title>Resource Records for the DNS Security Extensions</title>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='R.' surname='Austein' fullname='R. Austein'>
<organization /></author>
<author initials='M.' surname='Larson' fullname='M. Larson'>
<organization /></author>
<author initials='D.' surname='Massey' fullname='D. Massey'>
<organization /></author>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<date year='2005' month='March' />
<abstract>
<t>This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collection of resource records and protocol modifications that provide source authentication for the DNS. This document defines the public key (DNSKEY), delegation signer (DS), resource record digital signature (RRSIG), and authenticated denial of existence (NSEC) resource records. The purpose and format of each resource record is described in detail, and an example of each resource record is given.</t><t> This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535. [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4034' />
<format type='TXT' octets='63879' target='ftp://ftp.isi.edu/in-notes/rfc4034.txt' />
</reference>
<?rfc linefile="180:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4035.xml"?>

<reference anchor='RFC4035'>

<front>
<title>Protocol Modifications for the DNS Security Extensions</title>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='R.' surname='Austein' fullname='R. Austein'>
<organization /></author>
<author initials='M.' surname='Larson' fullname='M. Larson'>
<organization /></author>
<author initials='D.' surname='Massey' fullname='D. Massey'>
<organization /></author>
<author initials='S.' surname='Rose' fullname='S. Rose'>
<organization /></author>
<date year='2005' month='March' />
<abstract>
<t>This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collection of new resource records and protocol modifications that add data origin authentication and data integrity to the DNS. This document describes the DNSSEC protocol modifications. This document defines the concept of a signed zone, along with the requirements for serving and resolving by using DNSSEC. These techniques allow a security-aware resolver to authenticate both DNS resource records and authoritative DNS error indications.</t><t> This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535. [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4035' />
<format type='TXT' octets='130589' target='ftp://ftp.isi.edu/in-notes/rfc4035.txt' />
</reference>
<?rfc linefile="181:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4509.xml"?>

<reference anchor='RFC4509'>

<front>
<title>Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)</title>
<author initials='W.' surname='Hardaker' fullname='W. Hardaker'>
<organization /></author>
<date year='2006' month='May' />
<abstract>
<t>This document specifies how to use the SHA-256 digest type in DNS Delegation Signer (DS) Resource Records (RRs).  DS records, when stored in a parent zone, point to DNSKEYs in a child zone. [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4509' />
<format type='TXT' octets='14155' target='ftp://ftp.isi.edu/in-notes/rfc4509.txt' />
</reference>
<?rfc linefile="182:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.5155.xml"?>

<reference anchor='RFC5155'>

<front>
<title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existence</title>
<author initials='B.' surname='Laurie' fullname='B. Laurie'>
<organization /></author>
<author initials='G.' surname='Sisson' fullname='G. Sisson'>
<organization /></author>
<author initials='R.' surname='Arends' fullname='R. Arends'>
<organization /></author>
<author initials='D.' surname='Blacka' fullname='D. Blacka'>
<organization /></author>
<date year='2008' month='March' />
<abstract>
<t>The Domain Name System Security (DNSSEC) Extensions introduced the NSEC resource record (RR) for authenticated denial of existence.  This document introduces an alternative resource record, NSEC3, which similarly provides authenticated denial of existence.  However, it also provides measures against zone enumeration and permits gradual expansion of delegation-centric zones. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5155' />
<format type='TXT' octets='112338' target='http://www.rfc-editor.org/rfc/rfc5155.txt' />
</reference>
<?rfc linefile="183:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.5702.xml"?>

<reference anchor='RFC5702'>

<front>
<title>Use of SHA-2 Algorithms with RSA in DNSKEY and RRSIG Resource Records for DNSSEC</title>
<author initials='J.' surname='Jansen' fullname='J. Jansen'>
<organization /></author>
<date year='2009' month='October' />
<abstract>
<t>This document describes how to produce RSA/SHA-256 and RSA/SHA-512 DNSKEY and RRSIG resource records for use in the Domain Name System Security Extensions (RFC 4033, RFC 4034, and RFC 4035). [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5702' />
<format type='TXT' octets='19425' target='http://www.rfc-editor.org/rfc/rfc5702.txt' />
</reference>
<?rfc linefile="184:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.I-D.draft-ietf-dnsext-dnssec-bis-updates-17.xml"?>

<reference anchor='I-D.ietf-dnsext-dnssec-bis-updates'>
<front>
<title>Clarifications and Implementation Notes for DNSSECbis</title>

<author initials='S' surname='Weiler' fullname='Samuel Weiler'>
    <organization />
</author>

<author initials='D' surname='Blacka' fullname='David Blacka'>
    <organization />
</author>

<date month='March' day='12' year='2012' />

<abstract><t>This document is a collection of technical clarifications to the DNSSECbis document set.  It is meant to serve as a resource to implementors as well as a repository of DNSSECbis errata.  This document updates the core DNSSECbis documents (RFC4033, RFC4034, and RFC4035) as well as the NSEC3 specification (RFC5155).  It also defines NSEC3 and SHA-2 as core parts of the DNSSECbis specification.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-dnsext-dnssec-bis-updates-17' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-dnsext-dnssec-bis-updates-17.txt' />
</reference>
<?rfc linefile="185:draft-ietf-dnsop-rfc4641bis.xml"?>
    </references>
    
    
    
    
    <references title='Informative References'>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.1995.xml"?>

<reference anchor='RFC1995'>

<front>
<title>Incremental Zone Transfer in DNS</title>
<author initials='M.' surname='Ohta' fullname='Masataka Ohta'>
<organization>Computer Center Tokyo Institute of Technology</organization>
<address>
<postal>
<street>2-12-1, O-okayama</street>
<street>Meguro-ku</street>
<city>Tokyo</city>
<code>152</code>
<country>JP</country></postal>
<phone>+81 3 57343299</phone>
<facsimile>+81 3 57343415</facsimile>
<email>mohta@necom830.hpcl.titech.ac.jp</email></address></author>
<date year='1996' month='August' />
<abstract>
<t>This document proposes extensions to the DNS protocols to provide an incremental zone transfer (IXFR) mechanism.</t></abstract></front>

<seriesInfo name='RFC' value='1995' />
<format type='TXT' octets='16810' target='ftp://ftp.isi.edu/in-notes/rfc1995.txt' />
</reference>
<?rfc linefile="192:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.1996.xml"?>

<reference anchor='RFC1996'>

<front>
<title>A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)</title>
<author initials='P.' surname='Vixie' fullname='Paul Vixie'>
<organization>Internet Software Consortium</organization>
<address>
<postal>
<street>Star Route Box 159A</street>
<city>Woodside</city>
<region>CA</region>
<code>94062</code>
<country>US</country></postal>
<phone>+1 415 747 0204</phone>
<email>paul@vix.com</email></address></author>
<date year='1996' month='August' />
<abstract>
<t>This memo describes the NOTIFY opcode for DNS, by which a master server advises a set of slave servers that the master's data has been changed and that a query should be initiated to discover the new data.</t></abstract></front>

<seriesInfo name='RFC' value='1996' />
<format type='TXT' octets='15247' target='ftp://ftp.isi.edu/in-notes/rfc1996.txt' />
</reference>
<?rfc linefile="193:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.2119.xml"?>

<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' octets='4723' target='ftp://ftp.isi.edu/in-notes/rfc2119.txt' />
<format type='HTML' octets='17491' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5777' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>
<?rfc linefile="194:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.2308.xml"?>

<reference anchor='RFC2308'>

<front>
<title abbrev='DNS NCACHE'>Negative Caching of DNS Queries (DNS NCACHE)</title>
<author initials='M.' surname='Andrews' fullname='Mark Andrews'>
<organization>CSIRO - Mathematical and Information Sciences</organization>
<address>
<postal>
<street>Locked Bag 17</street>
<street>North Ryde NSW 2113</street>
<country>AUSTRALIA</country></postal>
<phone>+61 2 9325 3148</phone>
<email>Mark.Andrews@cmis.csiro.au</email></address></author>
<date year='1998' month='March' />
<area>Applications</area>
<keyword>domain name system</keyword>
<keyword>DNS</keyword>
<abstract>
<t>

   [RFC1034] provided a description of how to cache negative responses.

   It however had a fundamental flaw in that it did not allow a name

   server to hand out those cached responses to other resolvers, thereby

   greatly reducing the effect of the caching.  This document addresses

   issues raise in the light of experience and replaces [RFC1034 Section

   4.3.4].
</t>
<t>



   Negative caching was an optional part of the DNS specification and

   deals with the caching of the non-existence of an RRset [RFC2181] or

   domain name.

</t>
<t>


   Negative caching is useful as it reduces the response time for

   negative answers.  It also reduces the number of messages that have

   to be sent between resolvers and name servers hence overall network

   traffic.  A large proportion of DNS traffic on the Internet could be

   eliminated if all resolvers implemented negative caching.  With this

   in mind negative caching should no longer be seen as an optional part

   of a DNS resolver.
</t></abstract></front>

<seriesInfo name='RFC' value='2308' />
<format type='TXT' octets='41428' target='ftp://ftp.isi.edu/in-notes/rfc2308.txt' />
<format type='XML' octets='41491' target='http://xml.resource.org/public/rfc/xml/rfc2308.xml' />
</reference>
<?rfc linefile="195:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.3007.xml"?>

<reference anchor='RFC3007'>

<front>
<title>Secure Domain Name System (DNS) Dynamic Update</title>
<author initials='B.' surname='Wellington' fullname='B. Wellington'>
<organization /></author>
<date year='2000' month='November' />
<abstract>
<t>This document proposes a method for performing secure Domain Name System (DNS) dynamic updates. [STANDARDS TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='3007' />
<format type='TXT' octets='18056' target='ftp://ftp.isi.edu/in-notes/rfc3007.txt' />
</reference>
<?rfc linefile="196:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.3375.xml"?>

<reference anchor='RFC3375'>

<front>
<title>Generic Registry-Registrar Protocol Requirements</title>
<author initials='S.' surname='Hollenbeck' fullname='S. Hollenbeck'>
<organization /></author>
<date year='2002' month='September' /></front>

<seriesInfo name='RFC' value='3375' />
<format type='TXT' octets='46022' target='http://www.rfc-editor.org/rfc/rfc3375.txt' />
</reference>
<?rfc linefile="197:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.3766.xml"?>

<reference anchor='RFC3766'>

<front>
<title>Determining Strengths For Public Keys Used For Exchanging Symmetric Keys</title>
<author initials='H.' surname='Orman' fullname='H. Orman'>
<organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<date year='2004' month='April' />
<abstract>
<t>Implementors of systems that use public key cryptography to exchange symmetric keys need to make the public keys resistant to some predetermined level of attack.  That level of attack resistance is the strength of the system, and the symmetric keys that are exchanged must be at least as strong as the system strength requirements.  The three quantities, system strength, symmetric key strength, and public key strength, must be consistently matched for any network protocol usage.  While it is fairly easy to express the system strength requirements in terms of a symmetric key length and to choose a cipher that has a key length equal to or exceeding that requirement, it is harder to choose a public key that has a cryptographic strength meeting a symmetric key strength requirement.  This document explains how to determine the length of an asymmetric key as a function of a symmetric key strength requirement.  Some rules of thumb for estimating equivalent resistance to large-scale attacks on various algorithms are given.  The document also addresses how changing the sizes of the underlying large integers (moduli, group sizes, exponents, and so on) changes the time to use the algorithms for key exchange.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract></front>

<seriesInfo name='BCP' value='86' />
<seriesInfo name='RFC' value='3766' />
<format type='TXT' octets='55939' target='ftp://ftp.isi.edu/in-notes/rfc3766.txt' />
</reference>
<?rfc linefile="198:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4086.xml"?>

<reference anchor='RFC4086'>

<front>
<title>Randomness Requirements for Security</title>
<author initials='D.' surname='Eastlake' fullname='D. Eastlake'>
<organization /></author>
<author initials='J.' surname='Schiller' fullname='J. Schiller'>
<organization /></author>
<author initials='S.' surname='Crocker' fullname='S. Crocker'>
<organization /></author>
<date year='2005' month='June' />
<abstract>
<t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t><t> Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract></front>

<seriesInfo name='BCP' value='106' />
<seriesInfo name='RFC' value='4086' />
<format type='TXT' octets='114321' target='ftp://ftp.isi.edu/in-notes/rfc4086.txt' />
</reference>
<?rfc linefile="199:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4641.xml"?>

<reference anchor='RFC4641'>

<front>
<title>DNSSEC Operational Practices</title>
<author initials='O.' surname='Kolkman' fullname='O. Kolkman'>
<organization /></author>
<author initials='R.' surname='Gieben' fullname='R. Gieben'>
<organization /></author>
<date year='2006' month='September' />
<abstract>
<t>This document describes a set of practices for operating the DNS with security extensions (DNSSEC). The target audience is zone administrators deploying DNSSEC.</t><t> The document discusses operational aspects of using keys and signatures in the DNS. It discusses issues of key generation, key storage, signature generation, key rollover, and related policies.</t><t> This document obsoletes RFC 2541, as it covers more operational ground and gives more up-to-date requirements with respect to key sizes and the new DNSSEC specification. This memo provides information for the Internet community.</t></abstract></front>

<seriesInfo name='RFC' value='4641' />
<format type='TXT' octets='79894' target='http://www.rfc-editor.org/rfc/rfc4641.txt' />
</reference>
<?rfc linefile="200:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.4949.xml"?>

<reference anchor='RFC4949'>

<front>
<title>Internet Security Glossary, Version 2</title>
<author initials='R.' surname='Shirey' fullname='R. Shirey'>
<organization /></author>
<date year='2007' month='August' />
<abstract>
<t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security.  The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026).  The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t></abstract></front>

<seriesInfo name='RFC' value='4949' />
<format type='TXT' octets='867626' target='http://www.rfc-editor.org/rfc/rfc4949.txt' />
</reference>
<?rfc linefile="201:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.5011.xml"?>

<reference anchor='RFC5011'>

<front>
<title>Automated Updates of DNS Security (DNSSEC) Trust Anchors</title>
<author initials='M.' surname='StJohns' fullname='M. StJohns'>
<organization /></author>
<date year='2007' month='September' />
<abstract>
<t>This document describes a means for automated, authenticated, and authorized updating of DNSSEC "trust anchors". The method provides protection against N-1 key compromises of N keys in the trust point key set. Based on the trust established by the presence of a current anchor, other anchors may be added at the same place in the hierarchy, and, ultimately, supplant the existing anchor(s).</t><t> This mechanism will require changes to resolver management behavior (but not resolver resolution behavior), and the addition of a single flag bit to the DNSKEY record. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5011' />
<format type='TXT' octets='30138' target='http://www.rfc-editor.org/rfc/rfc5011.txt' />
</reference>
<?rfc linefile="202:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.5910.xml"?>

<reference anchor='RFC5910'>

<front>
<title>Domain Name System (DNS) Security Extensions Mapping for the Extensible Provisioning Protocol (EPP)</title>
<author initials='J.' surname='Gould' fullname='J. Gould'>
<organization /></author>
<author initials='S.' surname='Hollenbeck' fullname='S. Hollenbeck'>
<organization /></author>
<date year='2010' month='May' />
<abstract>
<t>This document describes an Extensible Provisioning Protocol (EPP) extension mapping for the provisioning and management of Domain Name System security (DNSSEC) extensions for domain names stored in a shared central repository.  Specified in XML, this mapping extends the EPP domain name mapping to provide additional features required for the provisioning of DNS security extensions.  This document obsoletes RFC 4310. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5910' />
<format type='TXT' octets='72490' target='http://www.rfc-editor.org/rfc/rfc5910.txt' />
</reference>
<?rfc linefile="203:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.6605.xml"?>

<reference anchor='RFC6605'>

<front>
<title>Elliptic Curve Digital Signature Algorithm (DSA) for DNSSEC</title>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'>
<organization /></author>
<author initials='W.C.A.' surname='Wijngaard' fullname='W.C.A. Wijngaard'>
<organization /></author>
<date year='2012' month='April' />
<abstract>
<t>This document describes how to specify Elliptic Curve Digital Signature Algorithm (DSA) keys and signatures in DNS Security (DNSSEC).  It lists curves of different sizes and uses the SHA-2 family of hashes for signatures. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6605' />
<format type='TXT' octets='14332' target='http://www.rfc-editor.org/rfc/rfc6605.txt' />
</reference>
<?rfc linefile="204:draft-ietf-dnsop-rfc4641bis.xml"?>
      
      <reference anchor="NIST-workshop" target="http://www.ietf.org/mail-archive/web/dnsop/current/msg01020.html">
	<front>
	  <title>NIST DNSSEC workshop notes</title>
	  
	  <author initials="S." surname="Rose" fullname="Scott Rose">
	  </author>

	  <date day="2" month="July" year="2001" />

	</front>
      </reference>
      
      
      <reference anchor="NIST-SP-800-90A">
	<front>
	  <title>
	    Recommendation for Random Number Generation Using
	    Deterministic Random Bit Generators (Revised)
	  </title>
	  
	  <author initials="E." surname="Barker" fullname="Elaine Barker">
	    <organization>Computer Security Division, Information Technology Laboratory
	    
	    </organization>
	  </author>
	  <author initials="J." surname="Kelsey" fullname="John Kelsey">
	    <organization>Computer Security Division, Information Technology Laboratory
	    
	    </organization>
	  </author>
	  
	  
	  <date year="2007" month="March"/>
	</front>
	<seriesInfo name="NIST Special Publication" value="800-90" />
      </reference>

      <?rfc?><?rfc linefile="1:bibxml/reference.RFC.5246.xml"?>

<reference anchor='RFC5246'>

<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'>
<organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2008' month='August' />
<abstract>
<t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5246' />
<format type='TXT' octets='222395' target='http://www.rfc-editor.org/rfc/rfc5246.txt' />
</reference>
<?rfc linefile="243:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.I-D.draft-ietf-dnsop-dnssec-key-timing-02.xml"?>

<reference anchor='I-D.ietf-dnsop-dnssec-key-timing'>
<front>
<title>DNSSEC Key Timing Considerations</title>

<author initials='S' surname='Morris' fullname='Stephen Morris'>
    <organization />
</author>

<author initials='J' surname='Ihren' fullname='Johan Ihren'>
    <organization />
</author>

<author initials='J' surname='Dickinson' fullname='John Dickinson'>
    <organization />
</author>

<date month='March' day='10' year='2011' />

<abstract><t>This document describes the issues surrounding the timing of events in the rolling of a key in a DNSSEC-secured zone.  It presents timelines for the key rollover and explicitly identifies the relationships between the various parameters affecting the process.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-dnssec-key-timing-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-dnsop-dnssec-key-timing-02.txt' />
</reference>
<?rfc linefile="244:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.I-D.draft-ietf-dnsop-dnssec-dps-framework-07.xml"?>

<reference anchor='I-D.ietf-dnsop-dnssec-dps-framework'>
<front>
<title>DNSSEC Policy & Practice Statement Framework</title>

<author initials='F' surname='Ljunggren' fullname='Fredrik Ljunggren'>
    <organization />
</author>

<author initials='A' surname='Eklund-Lowinder' fullname='Anne-Marie Eklund-Lowinder'>
    <organization />
</author>

<author initials='T' surname='Okubo' fullname='Tomofumi Okubo'>
    <organization />
</author>

<date month='March' day='8' year='2012' />

<abstract><t>This document presents a framework to assist writers of DNSSEC Policy and Practice Statements such as Domain Managers and Zone Operators on both the top-level and secondary level, who is managing and operating a DNS zone with Security Extensions (DNSSEC) implemented.  In particular, the framework provides a comprehensive list of topics that should be considered for inclusion into a DNSSEC Policy definition and Practice Statement.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-dnssec-dps-framework-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-dnsop-dnssec-dps-framework-07.txt' />
</reference>
<?rfc linefile="245:draft-ietf-dnsop-rfc4641bis.xml"?>
      <?rfc?><?rfc linefile="1:bibxml/reference.I-D.draft-ietf-dnsop-dnssec-trust-anchor-04.xml"?>

<reference anchor='I-D.ietf-dnsop-dnssec-trust-anchor'>
<front>
<title>DNSSEC Trust Anchor Configuration and Maintenance</title>

<author initials='M' surname='Larson' fullname='Matt Larson'>
    <organization />
</author>

<author initials='O' surname='Gudmundsson' fullname='Olafur Gudmundsson'>
    <organization />
</author>

<date month='October' day='23' year='2010' />

<abstract><t>This document recommends a preferred format for specifying trust anchors in DNSSEC validating security-aware resolvers and describes how such a resolver should initialize trust anchors for use.  This document also describes different mechanisms for keeping trust anchors up to date over time.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-dnssec-trust-anchor-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-dnsop-dnssec-trust-anchor-04.txt' />
</reference>
<?rfc linefile="246:draft-ietf-dnsop-rfc4641bis.xml"?>

      <reference anchor="nsec3-hash-performance">
	<front>
	  <title>NSEC3 Hash Performance</title>
	  
	  <author initials="Y." surname="Schaeffer" fullname="Yuri Schaeffer">
	    <organization>NLnet Labs</organization>
	  </author>
	  
	  <date month ="March" year="2010" />
	</front>
	<seriesInfo name="NLnet Labs document" value="2010-02" />
      </reference>
      
    </references>

    <section title="Terminology" anchor="terminology">
      
      <t> 
	In this document, there is some jargon used that is defined in
	other documents. In most cases, we have not copied the text
	from the documents defining the terms but have given a more
	elaborate explanation of the meaning. Note that these
	explanations should not be seen as authoritative.
      </t>
      
      <t>
	<list style="hanging">
	  
	  <t hangText="Anchored key:">
	    A DNSKEY configured in resolvers around the globe. This key
	    is hard to update, hence the term anchored.
	  </t>
	  	  
	  <t hangText="Bogus:">
	    Also see <xref target="RFC4033">Section
	    5 of RFC 4033</xref>.  An RRset in DNSSEC is marked "Bogus" when a
	    signature of an RRset does not validate against a DNSKEY.
	  </t>
  	  
	  <t hangText="Key rollover:">
	    A key rollover (also called key supercession in some
	    environments) is the act of replacing one key pair with
	    another at the end of a key effectivity period.
	  </t>

	  <t hangText="Key Signing Key or KSK:">
	    A Key Signing Key (KSK) is a key that is used exclusively for
	    signing the apex key set.  The fact that a key is a KSK is
	    only relevant to the signing tool.
	  </t>
	  
	  <t hangText="Key size:">
	    The term 'key size' can be substituted by 'modulus size'
	    throughout the document for RSA keys. It is mathematically more correct to
	    use modulus size for RSA keys, but as this is a document directed at
	    operators we feel more at ease with the term key size.
	  </t>
	  
	  <t hangText="Private and public keys:">
	    DNSSEC secures the DNS through the use of public key
	    cryptography. Public key cryptography is based on the
	    existence of two (mathematically related) keys, a public
	    key and a private key. The public keys are published in
	    the DNS by use of the DNSKEY Resource Record (DNSKEY
	    RR). Private keys should remain private.
	  </t>
	  
	  <t hangText="Refresh Period:">
	    The period before the expiration time of the signature, during which the signature is refreshed by the signer.
	  </t>

	  <t hangText="Re-Sign Period:">
		This refers to the frequency
		with which a signing pass on the zone is performed. The Re-Sign
		Period defines when the zone is exposed to the signer. During a
		signing pass, not all signatures in the zone may be regenerated:
		that depends on the Refresh Period.
	  </t>
	  
	  <t hangText="Secure Entry Point (SEP) key:">
	    A KSK that has a DS record in the parent zone pointing to it or is
	    configured as a trust anchor. Although not required by the
	    protocol, we suggest that the SEP flag <xref
	    target="RFC4034"/> is set on these keys.
	  </t>
	  <t hangText="Self-signature:">
            This only applies to signatures over DNSKEYs; a signature
            made with DNSKEY x, over DNSKEY x is called a
            self-signature.  Note: without further information,
            self-signatures convey no trust. They are useful to check
            the authenticity of the DNSKEY, i.e., they can be used as
            a hash.
	  </t>
	  <t hangText="Signing Jitter:">
            A random variation in the signature validity
	    period of RRSIGs in a zone to prevent all of them expiring at the same time.
	  </t>	  

	  <t hangText="Signer:">
	    The system that has access to the private key material and
	    signs the Resource Record sets in a zone. A signer may be
	    configured to sign only parts of the zone, e.g., only
	    those RRsets for which existing signatures are about to
	    expire.
	  </t>

	  <t hangText="Singing the zone file:">
	    The term used for the event where an administrator joyfully
	    signs its zone file while producing melodic sound patterns.
	  </t>

	  <t hangText="Single Type Signing Scheme:">
	    A signing scheme whereby the distinction between Zone Signing Keys
	    and Key Signing Keys is not made.
	  </t>
	  
	  <t hangText="Zone administrator:">
	    The 'role' that is responsible for signing a zone and
	    publishing it on the primary authoritative server.
	  </t>

	  <t hangText="Zone Signing Key (ZSK):">
	    A key that is used for signing all data in a zone
	    (except, perhaps, the DNSKEY RRset).  The fact that a
	    key is a ZSK is only relevant to the signing tool.
	  </t>

	</list>
	
      </t>
    </section>
    
        <section anchor="typography" title="Typographic Conventions">
      <t>
	The following typographic conventions are used in this document:
	
	<list style="hanging">
	  <t hangText="Key notation:">
	    A key is denoted by DNSKEY_x_y, where x is an identifier
	    for the type of key: K for Keys Signing Key, Z for Zone
	    Signing Key and S when there is no distinction made
	    between KSK and ZSKs but the key is used as a secure entry
	    point. The 'y' denotes a number or an identifier, y could be thought
	    of as the key id.
	  </t>

  	  <t hangText="RRsets ignored:">
	    If the signatures of non-DNSKEY RRsets have the same
	    parameters as the SOA, then those are not
	    mentioned; e.g., in the example below, the SOA is signed
	    with the same parameters as the foo.example.com A RRset
	    and the latter is therefore ignored in the abbreviated
	    notation.
	  </t>

	  <t hangText="RRset notations:">
	    RRs are only denoted by the type. All other information
	    -- owner, class, rdata, and TTL -- is left out. Thus:
	    "example.com 3600 IN A 192.0.2.1" is reduced to
	    "A". RRsets are a list of RRs. A example of this would
	    be "A1, A2", specifying the RRset containing two "A"
	    records. This could again be abbreviated to just "A".
	  </t>
	  <t hangText="Signature notation:">
	    Signatures are denoted as RRSIG_x_y(type), which means
	    that the RRset with the specific RRtype 'type' is signed with DNSKEY_x_y.
	  </t>
	  
	  <t hangText="SOA representation:">
	    SOAs are represented as SOA_x, where x is the serial
	    number.
	  </t>

	  <t hangText="Zone representation:">
	    Using the above notation we have simplified the
	    representation of a signed zone by leaving out all
	    unnecessary details such as the names and by
	    representing all data by "SOA_x"
	  </t>

	</list>
	
	Using this notation the following signed zone:
	
	<figure>
	  <artwork>
 example.com.  3600  IN SOA   ns1.example.com. olaf.example.net. (
                         2005092303 ; serial
                         450        ; refresh (7 minutes 30 seconds)
                         600        ; retry (10 minutes)
                         345600     ; expire (4 days)
                         300        ; minimum (5 minutes)
                         )
        3600    RRSIG    SOA 5 2 3600 20120824013000 (
                         20100424013000 14 example.com.
                         NMafnzmmZ8wevpCOI+/JxqWBzPxrnzPnSXfo
                         ...
                         OMY3rTMA2qorupQXjQ== )
        3600    NS       ns1.example.com.
        3600    NS       ns2.example.com.
        3600    NS       ns3.example.com.
        3600    RRSIG    NS 5 2 3600 20120824013000 (
                         20100424013000 14 example.com.
                         p0Cj3wzGoPFftFZjj3jeKGK6wGWLwY6mCBEz
                         ...
                         +SqZIoVHpvE7YBeH46wuyF8w4XknA4Oeimc4
                         zAgaJM/MeG08KpeHhg== )
        3600    TXT      "Net::DNS  domain"
        3600    RRSIG    TXT 5 2 3600 20120824013000 (
                         20100424013000 14 example.com.
                         o7eP8LISK2TEutFQRvK/+U3wq7t4X+PQaQkp
                         ...
                         BcQ1o99vwn+IS4+J1g== )
        300     NSEC     foo.example.com. NS SOA TXT RRSIG NSEC DNSKEY
        300     RRSIG    NSEC 5 2 300 20120824013000 (
                         20100424013000 14 example.com.
                         JtHm8ta0diCWYGu/TdrE1O1sYSHblN2i/IX+
                         ...
                         PkXNI/Vgf4t3xZaIyw== )
        3600    DNSKEY   256 3 5 (
                         AQPaoHW/nC0fj9HuCW3hACSGiP0AkPS3dQFX
                         ...
                         sAuryjQ/HFa5r4mrbhkJ
                         ) ; key id = 14
        3600    DNSKEY   257 3 5 (
                         AQPUiszMMAi36agx/V+7Tw95l8PYmoVjHWvO
                         ...
                         oy88Nh+u2c9HF1tw0naH
                         ) ; key id = 15
        3600    RRSIG    DNSKEY 5 2 3600 20120824013000 (
                         20100424013000 14 example.com.
                         HWj/VEr6p/FiUUiL70QQWtk+NBIlsJ9mdj5U
                         ...
                         QhhmMwV3tIxJk2eDRQ== )
        3600    RRSIG    DNSKEY 5 2 3600 20120824013000 (
                         20100424013000 15 example.com.
                         P47CUy/xPV8qIEuua4tMKG6ei3LQ8RYv3TwE
                         ...
                         JWL70YiUnUG3m9OL9w== )
foo.example.com.  3600  IN A 192.0.2.2
        3600    RRSIG    A 5 3 3600 20120824013000 (
                         20100424013000 14 example.com.
                         xHr023P79YrSHHMtSL0a1nlfUt4ywn/vWqsO
                         ...
                         JPV/SA4BkoFxIcPrDQ== )
        300     NSEC     example.com. A RRSIG NSEC
        300     RRSIG    NSEC 5 3 300 20120824013000 (
                         20100424013000 14 example.com.
                         Aaa4kgKhqY7Lzjq3rlPlFidymOeBEK1T6vUF
                         ...
                         Qe000JyzObxx27pY8A== )
 	  </artwork>
	</figure>
	
	is reduced to the following representation:
	
	<figure>
	  <artwork>
         SOA_2005092303
         RRSIG_Z_14(SOA_2005092303)
         DNSKEY_K_14
         DNSKEY_Z_15
         RRSIG_K_14(DNSKEY)
         RRSIG_Z_15(DNSKEY)
	  </artwork>
	</figure>
	
	
	
	
	The rest of the zone data has the same signature as the SOA
	record, i.e., an RRSIG created with DNSKEY 14.
	
      </t>
      
    </section>


    <section title="Transition Figures for Special Case Algorithm Rollovers" anchor="AlgoFigures">
      <t> The figures in this Appendix complement and illustrate the special
      cases of algorithm rollovers as described in <xref
      target="KAR"/>.

	<figure anchor="single-type-algorithm-roll-fig" title="Single Type Signing Scheme Algorithm Roll">
	  <preamble>
	  </preamble>
	  <?rfc?><?rfc linefile="1:Single-Type-Algorithm-Roll.xml"?><artwork>
----------------------------------------------------------------
 initial              new RRSIGs           new DNSKEY
----------------------------------------------------------------
Parent:
 SOA_0 -------------------------------------------------------->
 RRSIG_par(SOA) ----------------------------------------------->
 DS_S_1 ------------------------------------------------------->
 RRSIG_par(DS_S_1) -------------------------------------------->

Child:
 SOA_0                SOA_1                SOA_2
 RRSIG_S_1(SOA)       RRSIG_S_1(SOA)       RRSIG_S_1(SOA)
                      RRSIG_S_2(SOA)       RRSIG_S_2(SOA)
  
 DNSKEY_S_1           DNSKEY_S_1           DNSKEY_S_1
                                           DNSKEY_S_2
 RRSIG_S_1(DNSKEY)    RRSIG_S_1(DNSKEY)    RRSIG_S_1(DNSKEY)
                      RRSIG_S_2(DNSKEY)    RRSIG_S_2(DNSKEY)

----------------------------------------------------------------
 new DS               DNSKEY removal       RRSIGs removal
----------------------------------------------------------------
Parent:
 SOA_1 ------------------------------------------------------->
 RRSIG_par(SOA) ---------------------------------------------->
 DS_S_2 ------------------------------------------------------>
 RRSIG_par(DS_S_2) ------------------------------------------->

Child:
 -------------------> SOA_3                SOA_4 
 -------------------> RRSIG_S_1(SOA)     
 -------------------> RRSIG_S_2(SOA)       RRSIG_S_2(SOA)
                     
 ------------------->
 -------------------> DNSKEY_S_2           DNSKEY_S_2
 -------------------> RRSIG_S_1(DNSKEY)
 -------------------> RRSIG_S_2(DNSKEY)    RRSIG_S_2(DNSKEY)
----------------------------------------------------------------
</artwork>
<?rfc linefile="534:draft-ietf-dnsop-rfc4641bis.xml"?>
	  <postamble>
	  </postamble>
	</figure>

	Also see <xref target="SingleTypeAlg"/>.
	
	<figure anchor="5011-algorithm-roll-fig" title="RFC 5011 Style algorithm roll">
	  <preamble>
	  </preamble>
	  <?rfc?><?rfc linefile="1:5011-algorithm-roll.xml"?><artwork>
----------------------------------------------------------------
 initial              new RRSIGs           new DNSKEY
----------------------------------------------------------------
Parent:
 SOA_0 -------------------------------------------------------->
 RRSIG_par(SOA) ----------------------------------------------->
 DS_K_1 ------------------------------------------------------->
 RRSIG_par(DS_K_1) -------------------------------------------->

Child:
 SOA_0                SOA_1                SOA_2
 RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)
                      RRSIG_Z_2(SOA)       RRSIG_Z_2(SOA)
  
 DNSKEY_K_1           DNSKEY_K_1           DNSKEY_K_1
                                           DNSKEY_K_2
 DNSKEY_Z_1           DNSKEY_Z_1           DNSKEY_Z_1
                                           DNSKEY_Z_2
 RRSIG_K_1(DNSKEY)    RRSIG_K_1(DNSKEY)    RRSIG_K_1(DNSKEY)
                                           RRSIG_K_2(DNSKEY)

----------------------------------------------------------------
 new DS               revoke DNSKEY        DNSKEY removal
----------------------------------------------------------------
Parent:
 SOA_1 ------------------------------------------------------->
 RRSIG_par(SOA) ---------------------------------------------->
 DS_K_2 ------------------------------------------------------>
 RRSIG_par(DS_K_2) ------------------------------------------->

Child:
 -------------------> SOA_3                SOA_4 
 -------------------> RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)    
 -------------------> RRSIG_Z_2(SOA)       RRSIG_Z_2(SOA)
                     
 -------------------> DNSKEY_K_1_REVOKED
 -------------------> DNSKEY_K_2           DNSKEY_K_2
 ------------------->
 -------------------> DNSKEY_Z_2           DNSKEY_Z_2
 -------------------> RRSIG_K_1(DNSKEY)
 -------------------> RRSIG_K_2(DNSKEY)    RRSIG_K_2(DNSKEY)
----------------------------------------------------------------

 RRSIGs removal
----------------------------------------------------------------
Parent:
 ------------------------------------->
 ------------------------------------->
 ------------------------------------->
 ------------------------------------->

Child:
 SOA_5
 RRSIG_Z_2(SOA)

 DNSKEY_K_2
 DNSKEY_Z_2
 RRSIG_K_2(DNSKEY)
----------------------------------------------------------------
</artwork>
<?rfc linefile="544:draft-ietf-dnsop-rfc4641bis.xml"?>
	  <postamble>
	  </postamble>
	</figure>

	Also see <xref target="5011style"/>.

	<figure anchor="single-type-5011-roll-fig" title="RFC 5011 algorithm roll in a Single Type Signing Scheme Environment">
	  <preamble>
	  </preamble>
	  <?rfc?><?rfc linefile="1:single-type-5011-roll.xml"?><artwork>
----------------------------------------------------------------
 initial              new RRSIGs           new DNSKEY
----------------------------------------------------------------
Parent:
 SOA_0 -------------------------------------------------------->
 RRSIG_par(SOA) ----------------------------------------------->
 DS_S_1 ------------------------------------------------------->
 RRSIG_par(DS_S_1) -------------------------------------------->

Child:
 SOA_0                SOA_1                SOA_2
 RRSIG_S_1(SOA)
 RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)
                      RRSIG_S_2(SOA)       RRSIG_S_2(SOA)

 DNSKEY_S_1           DNSKEY_S_1           DNSKEY_S_1
 DNSKEY_Z_1           DNSKEY_Z_1           DNSKEY_Z_1
                                           DNSKEY_S_2 
 RRSIG_S_1(DNSKEY)    RRSIG_S_1(DNSKEY)    RRSIG_S_1(DNSKEY)
                      RRSIG_S_2(DNSKEY)    RRSIG_S_2(DNSKEY)

----------------------------------------------------------------
 new DS               revoke DNSKEY        DNSKEY removal
----------------------------------------------------------------
Parent:
 SOA_1 ------------------------------------------------------->
 RRSIG_par(SOA) ---------------------------------------------->
 DS_S_2 ------------------------------------------------------>
 RRSIG_par(DS_S_2) ------------------------------------------->

Child:
 -------------------> SOA_3                SOA_4 
 -------------------> RRSIG_Z_1(SOA)       RRSIG_Z_1(SOA)    
 -------------------> RRSIG_S_2(SOA)       RRSIG_S_2(SOA)
                     
 -------------------> DNSKEY_S_1_REVOKED
 -------------------> DNSKEY_S_2           DNSKEY_S_2
 -------------------> DNSKEY_Z_1           
 -------------------> RRSIG_S_1(DNSKEY)    RRSIG_S_1(DNSKEY)
 -------------------> RRSIG_S_2(DNSKEY)    RRSIG_S_2(DNSKEY)

----------------------------------------------------------------
 RRSIGs removal
----------------------------------------------------------------
Parent:
 ------------------------------------->
 ------------------------------------->
 ------------------------------------->
 ------------------------------------->

Child:
 SOA_5
 RRSIG_S_2(SOA)

 DNSKEY_S_2
 RRSIG_S_2(DNSKEY)
----------------------------------------------------------------
</artwork>
<?rfc linefile="554:draft-ietf-dnsop-rfc4641bis.xml"?>
	  <postamble>
	  </postamble>
	</figure>

	Also see <xref target="5011andSingleType"/>.
      </t>
    </section>

    <section title="Transition Figure for Changing DNS Operators" anchor="DNSOPFigures">
      <t> The figure in this Appendix complements and illustrates the special
      case of changing DNS operators as described in <xref target="cooperating_registrars"/>.

	<figure anchor="coop_registrars" title="An alternative rollover approach for cooperating operators">
	  <preamble>
	  </preamble>
	  <?rfc?><?rfc linefile="1:CoopRegistrars.xml"?><artwork>
 ------------------------------------------------------------
 new DS             |        pre-publish                    |
 ------------------------------------------------------------
 Parent:
  NS_A                            NS_A
  DS_A DS_B                       DS_A DS_B
 ------------------------------------------------------------
 Child at A:            Child at A:        Child at B:
  SOA_A0                 SOA_A1             SOA_B0
  RRSIG_Z_A(SOA)         RRSIG_Z_A(SOA)     RRSIG_Z_B(SOA)

  NS_A                   NS_A               NS_B
  RRSIG_Z_A(NS)          NS_B               RRSIG_Z_B(NS)
                         RRSIG_Z_A(NS)
 
  DNSKEY_Z_A             DNSKEY_Z_A         DNSKEY_Z_A
                         DNSKEY_Z_B         DNSKEY_Z_B
  DNSKEY_K_A             DNSKEY_K_A         DNSKEY_K_B
  RRSIG_K_A(DNSKEY)      RRSIG_K_A(DNSKEY)  RRSIG_K_A(DNSKEY)
                         RRSIG_K_B(DNSKEY)  RRSIG_K_B(DNSKEY)
 ------------------------------------------------------------

 ------------------------------------------------------------
       redelegation                 |   post migration      |
 ------------------------------------------------------------
 Parent:
           NS_B                           NS_B
           DS_A DS_B                      DS_B
 ------------------------------------------------------------
 Child at A:        Child at B:           Child at B:

  SOA_A1             SOA_B0                SOA_B1
  RRSIG_Z_A(SOA)     RRSIG_Z_B(SOA)        RRSIG_Z_B(SOA)

  NS_A               NS_B                  NS_B
  NS_B               RRSIG_Z_B(NS)         RRSIG_Z_B(NS)
  RRSIG_Z_A(NS)

  DNSKEY_Z_A         DNSKEY_Z_A
  DNSKEY_Z_B         DNSKEY_Z_B            DNSKEY_Z_B
  DNSKEY_K_A         DNSKEY_K_B            DNSKEY_K_B            
  RRSIG_K_A(DNSKEY)  RRSIG_K_B(DNSKEY)     RRSIG_K_B(DNSKEY)

 ------------------------------------------------------------
</artwork>
<?rfc linefile="570:draft-ietf-dnsop-rfc4641bis.xml"?>
	  <postamble>
	  </postamble>
	</figure>
      </t>
    </section>
    
    <section anchor="DED" title="Document Editing History">
      <t>
      [To be removed prior to publication as an RFC]
      </t>
      <section title="draft-ietf-dnsop-rfc4641-00">
	<t>
	  Version 0 was differs from RFC 4641 in the following ways.
	  <list style="symbols">
	    <t>
	      Status of this memo appropriate for I-D
	    </t>
	    <t>
	      TOC formatting differs.
	    </t>
	    <t>
	      Whitespaces, linebreaks, and pagebreaks may be slightly different
	      because of xml2rfc generation.
	    </t>
	    <t>
	      References slightly reordered.
	    </t>
	    <t>
	      Applied the errata from
	      http://www.rfc-editor.org/errata_search.php?rfc=4641
	    </t>
	    <t>
	      Inserted trivial "IANA considerations" section.
	    </t>
	  </list>

	  In other words it should not contain substantive changes in
	  content as intended by the working group for the original RFC 4641.
	  </t>
	</section>
	<section title="version 0->1">
	  <t>Cryptography details rewritten.
	  (See http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/cryptography_flawed)
	  </t>
	  <t>
	    <list style="symbols">
	      <t>Reference to NIST 800-90 added</t>
	      <t>RSA/SHA256 is being recommended in addition to RSA/SHA1.</t>
	      <t> Complete rewrite of <xref target="key sizes"/>
	      removing the table and suggesting a keysize of 1024 for
	      keys in use for less than 8 years, issued up to at least
	      2015.  </t>
	      <t>Replaced the reference to Schneiers' applied cryptography with a reference to RFC 4949.
	      </t>
	      <t> Removed the KSK for high level zones consideration</t>
	    </list>
	  </t>
	  <t>
	    Applied some differentiation with respect of the use of a
	    KSK for parent or trust anchor relation
	    http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/differentiation_trustanchor_parent
	  </t>
	  <t>
	    http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/rollover_assumptions
	  </t>
	  <t>
	    Added <xref target="KAR"/> as suggested by Jelte Jansen in
	    http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/Key_algorithm_roll
	  </t> 
	  
	  <t>
	    Added <xref target="non_cooperating_registrars"/> Issue
	    identified by Antoin Verschuren
	    http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/non-cooperative-registrars
	  </t>
	  <t>
	  In <xref target="terminology"/>: ZSK does not necessarily sign the DNSKEY RRset.
	  </t>
	</section>
	
	<section title="version 1->2">
	  <t>
	    <list style="symbols">
	      <t>
		Significant rewrite of <xref target="keys"/> whereby the
		argument is made that the timescales for rollovers are
		made purely on operational arguments hopefully resolving
		http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/discussion_of_timescales
	      </t>
	      <t>
		Added <xref target="nsec_nsec3"/> based on
		http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/NSEC-NSEC3
	      </t>
	      <t>
		Added a reference to <xref
		target="I-D.ietf-dnsop-dnssec-key-timing">draft-morris-dnsop-dnssec-key-timing</xref>
		for the quantitative analysis on keyrolls 
	      </t>
	      <t> 
		Updated <xref target="changing-operators"/> to reflect
		that the problem occurs when changing DNS operators, and
		not DNS registrars, also added the table indicating the
		redelegation procedure. Added text about the fact that
		implementations will dismiss keys that fail to validate
		at some point.
	      </t>
	      <t> 
		Updated a number of references.
	      </t>
	      
	    </list>
	  </t>
	</section>
	<section title="version 2->3">
	  <t>
	  <list style="symbols">
	    
	    <t>
	      Added bulleted list to serve as an introduction on the
	      decision tree in <xref target="keys"/>.
	    </t>
	   
	    <t>
	      In section <xref target="zsk-ksk-motivation"/>:
	    <list style="symbols">
	      <t>
		tried to motivate that key length is not a strong
		motivation for KSK ZSK split (based on
		http://www.educatedguesswork.org/2009/10/on_the_security_of_zsk_rollove.html)
	      </t>
	      <t>
		Introduced Common Signing Key terminology and made the
		arguments for the choice of a Common Signing Key more
		explicit.
	      </t>
	      <t>
		Moved the SEP flag considerations to its own paragraph
	      </t>
	    </list>
	    </t>
	    
	    <t>
	      In a few places in the document, but section <xref
	      target="sigs_keyrolls_policies"/> in particular the
	      comments from Patrik Faltstrom (On Mar 24, 2010) on the
	      clarity on the roles of the registrant, dns operator,
	      registrar and registry was addressed.
	    </t>
	    <t>
	      Added some terms based on
	      http://www.nlnetlabs.nl/svn/rfc4641bis/trunk/open-issues/timing_terminology
	    </t>
	    <t>
	      Added paragraph 2 and clarified the second but last
	      paragraph of <xref target="rolling-ksk-ta"/>.
	    </t>
	    <t>
	      Clarified the table and some text in <xref
	      target="KAR"/>. Also added some text on what happens
	      when the algorithm rollover also involves a roll from
	      NSEC to NSEC3.
	    </t>
	    <t>
	      Added a paragraph about rolling KSKs that are also
	      configured as trust anchors in <xref target="ksk-rollover"/>
	    </t>
	    <t>
	      Added <xref target="STSrollover"/>.
	    </t>

	    <t>
	      Added <xref target="sigval"/> to address issue "Signature_validity"
	    </t>

	  </list>
	  </t>
	</section>


	<section title="version 3->4">
	  <t>
	  <list style="symbols">
	    <t>Stephen Morris submitted a large number of language, style and editorial nits.</t>
	    <t><xref target="KAR"/> improved based on comments from  Olafur Gudmundsson and Ondrej Sury.</t>
	    <t>Tried to improve consistency of notation in the various rollover figures</t>
	  </list>
	  </t>
	</section>

	<section title="version 4->5">
	  <t>
	  <list style="symbols">
	    <t>Improved consistency of notation</t>

	    <t>Matthijs Mekking provided substantive feedback on algorithm rollover and suggested the content of the subsections of <xref target="KAR"/> and the content of the figures in <xref target="AlgoFigures"/></t>
	  </list>
	  </t>
	</section>

	<section title="version 5->6">
	  <t>
	  <list style="symbols">
	    <t>More improved consistency of notation and some other nits</t>

	    <t>Review of Rickard Bellgrim</t>

	    <t>Review of Sebastian Castro</t>

	    <t>Added a section about Stand-by keys</t>

	    <t>Algorithm rollover: Conservative or Liberal Approach</t>

	    <t>Added a reference to NSEC3 hash performance report</t>

	    <t>More clarifications on the topic of non cooperating operators</t>

	  </list>
	  </t>
	</section>

	<section title="version 6->7">
	  <t>
	  <list style="symbols">
	    <t>Fixed minor nits.</t>

	    <t>Clarified the Double DS Rollover in Changing DNS Operator sections.</t>

	    <t>Adjusted STSS Rollover Figures.</t>

	    <t>Remove the ZSK RRSIGs over DNSKEY RRset in Figures.</t>

            <t>Added text: second variety on STSS Double DS Rollover.</t>

            <t>Reviewed by Antoin Verschuren, Marc Lampo, George Barwood.</t>
	  </list>
	  </t>
	</section>

	<section title="version 7->8">
	  <t>
	  <list style="symbols">
            <t>Signatures over DNSKEY RRset does not need to be propagated in the
		new RRSIGS step.</t>
	  </list>
	  </t>
	</section>

	<section title="version 8->9">
	  <t>
	  <list style="symbols">
            <t>Peter Koch and Stephen Morris review</t>
	    <t>Editorial changes</t>
	    <t>Added <xref target="DNSOPFigures"/> for clarifying the
		alternative approach on rollover for cooperating operators.</t>
            <t>Added a paragraph to explain the rollover
		described in the figure in a bit more detail, in
		 <xref target="changing-operators"/>.</t>
	  </list>
	  </t>
	</section>

	<section title="version 9->10">
	  <t>
	  <list style="symbols">
            <t>Final nits</t>
            <t>Symbolic references</t>
	  </list>
	  </t>
	</section>

	<section title="version 10->11">
	  <t>
	  <list style="symbols">
            <t>More review (Alfred Hoenes, Marc Lampo)</t>
	  </list>
	  </t>
	</section>

	<section title="Subversion information">
	  <t>www.nlnetlabs.nl/svn/rfc4641bis/</t>
	  <t>$Id: draft-ietf-dnsop-rfc4641bis.xml 118 2012-04-12 08:55:16Z matje $</t>
	</section>
      </section>

    </back>
    
  </rfc>
  

PAFTECH AB 2003-20262026-04-24 11:57:30