<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->


<!ENTITY RFC5050 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5050.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5234.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4648.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2045.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>



<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->

<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>


<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->



<rfc category="std" ipr="trust200902" submissionType="independent" docName="draft-farrell-ni-00">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="NI URIs">URIs for Named Information</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Stephen Farrell" initials="S." 
            surname="Farrell">
      <organization>Trinity College Dublin</organization>
      <address>
        <postal>
          <street></street>
          <!-- Reorder these if your country does things differently -->
          <city>Dublin</city>
          <region></region>
          <code>2</code>
          <country>Ireland</country>
        </postal>
        <phone>+353-1-896-2354</phone>
        <email>stephen.farrell@cs.tcd.ie</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Christian Dannewitz" initials="C" surname="Dannewitz">
      <organization>University of Paderborn</organization>
      <address>
         <postal>
            <street></street>
            <city>Paderborn</city>
            <!--code> 12345</code-->
            <country>Germany</country>
         </postal>
         <email>cdannewitz@upb.de</email>
      </address>
      </author>

    <author fullname="Borje Ohlman" initials="B" surname="Ohlman">
      <organization>Ericsson</organization>
      <address>
         <postal>
            <street></street>
            <code> S-16480</code>
            <city>Stockholm</city>
            <country>Sweden</country>
         </postal>
         <email>Borje.Ohlman@ericsson.com</email>
      </address>
      </author>

    <author fullname="Dirk Kutscher" initials="D." 
            surname="Kutscher">
      <organization>NEC</organization>
      <address>
        <postal>
          <street>Kurfuersten-Anlage 36</street>
          <!-- Reorder these if your country does things differently -->
          <city>Heidelberg</city>
          <region></region>
          <code></code>
          <country>Germany</country>
        </postal>
        <phone></phone>
        <email>kutscher@neclab.eu</email>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date month="March" year="2011" />

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>IETF</area>

    <workgroup>Network Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>Network of Information</keyword>
    <keyword>Information centric networking</keyword>
	<keyword>NetInf</keyword>
	<keyword>SAIL</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>
	This document defines a URI-based name form for objects intended to be used
for information-centric networking and more generally. The name form defined
here allows for the various forms of hash-based binding between the name and
the named-object, as well as supporting human-readable and hierarchical names.

      </t>
    </abstract>
  </front>
  
  <middle>

	<section title="Introduction">

	<t>[[Text in double square brackets (like this) is commentary.]]</t> 

	<t>
	  URIs <xref target="RFC3986"/> are used in various protocols
	  for identifying resources. In many deployments those URIs
	  contain strings that are hash function outputs in order to
	  ensure uniqueness in terms of mapping the URI to a specific
	  resource, or to make URIs hard to guess for security
	  reasons. However, there is no standard way to interpret
	  those strings and so today in general only the creator of
	  the URI knows how to use the hash function output.
	</t>

	<t>
	  In the context of information-centric networking <xref
	  target="ref.netinf-design"/> <xref target="ref.ccn"/> and
	  elsewhere there is value in being able to compare a
	  presented resource against the URI that was de-referenced in
	  order to access that resource. If a cryptographically-strong
	  comparison function can be used then this allows for many
	  forms of in-network storage, without requiring as much trust
	  in the infrastructure used to present the resource. The
	  outputs of hash functions can be used in this manner, if
	  presented in a standard way.  There are also many other
	  potential uses for these hash outputs, for example, in terms
	  of binding the URI to an owner via signatures and public
	  keys, mapping between names, handling versioning etc. Many
	  such uses can be based on "wrapping" the object with
	  meta-data, e.g.  including signatures, public key
	  certificates etc.
	</t>

	<t>
	  We therefore define the "ni" URI scheme that allows for, but
	  does not insist upon, checking of the integrity of the
	  URI/resource mapping.
	</t>

	<t>
	  Hash-function outputs however are not human memorable, and
	  cannot easily be used to construct a hierarchical namespace,
	  which some protocols and applications may require. The URI
	  scheme therefore also allows for human-readable strings to
	  be used with, or instead of, the hash function output
	  strings.
	</t>

	<t>
	  We expect it will be beneficial for applications to be able
	  to map between human-readable URIs and URIs that allow for
	  validation of integrity the URI/resource mapping.  However,
	  in order to keep our scheme simple and more broadly
	  applicable, all considerations for how to map between URIs
	  and for how to access resources using these URIs are to be
	  specified elsewhere. In this memo, we simply define a form
	  of URI that can be used hopefully in many different
	  contexts.
	</t>

	<t>
	  The URI scheme defined here could be thought of as being
	  similar to URLs with the ability to verify the URL/resource
	  mapping. However, we envisage these URIs actually being of
	  most use in applications where the resource is not located
	  at a particular place in a network topology, but can rather
	  be cached in many places.
	</t>

	<t>
	  Syntax definitions in this memo are specified according to
	  ABNF <xref target="RFC4648"/>.
	</t>

	</section>


	
	<section title="Hash Strings">

	<t>
	  We start with specifying how the outputs from hash functions
	  are handled.
	</t>

	<t>
	  Hash outputs are binary values that MUST be base64 encoded
	  with line-feeds, spaces and terminating "=" characters
	  removed.  These values MUST be immediately preceded with a
	  hash algorithm identifier and a separator character (":").
	  For example, the start of such a value might look like:
	  "sha256:NDc0NzgyMGVmOGQ3OGU0..."
	</t>

	<t>
	  Hash values MAY be followed by a function identifier, naming
	  the function to be used to verify that hash.  If the
	  function identifier is omitted, then the application needs
	  to know how to verify the URI/resource mapping if that is
	  desired.
	</t>

	<t>
	  In many cases the input to the hash function will the actual
	  resource itself as presented by whatever protocol uses the
	  name and this is the default when the function identifier is
	  omitted.  This is what would be in the body of a HTTP
	  response, were the URI used in a HTTP GET message and were
	  the object returned in a 200 OK HTTP response with no
	  fragmentation.
	</t>

	<t>
	  The function identifier allows for cases where the resource
	  is actually presented with additional information
	  (e.g. meta-data) or is wrapped in other encoding. One way in
	  which this is expected to be used is when the resource is
	  presented with an accompanying digital signature. In that
	  case the signature could be presented along with the
	  resource and the hash function could be calculated over some
	  combination of the resource and signature, or, just over the
	  signature bits. (Note that the signature bits themselves are
	  not part of the name in this example.)
	</t>

	<t>
	  Since we want to be able to verify the hash value against
	  the resource, and since sometimes this will involve the
	  resource being wrapped in some other format that allows
	  inclusion of meta-data or security data, it may be the case
	  that the protocol that presents the resource identifies it
	  as having the "wrapped" type. In order to support
	  applications that require typing for the resource itself (as
	  opposed to its "wrapped" form) we also allow a hash value to
	  be accompanied with an "inner" type that identifies the type
	  of the resource, rather than the wrapper. We do this using
	  MIME types appended after the function identifier.
	</t>

	<t>
	  Note that the "/" character from the MIME type MUST be
	  percent encoded in order to conform to the ABNF below.  That
	  is "application/jpeg" will be presented as
	  "application%2fjpeg". <!-- or "application%2Fjpeg". -->
	</t>
	<t>
	[[Should or must we allow "%2F" as well?]]
	</t>

	<t>
	  The "default" function-identifier, which is the only one
	  defined here, is denoted with the string "id" and means that
	  the resource when returned can be directly fed into the hash
	  function without any canonicalization required, so this is
	  the "identity" function. Of course, the hash based
	  comparison may fail if some middlebox or access protocol has
	  re-encoded the resource in some way.
	</t>

	<t>
	  The "id" function identifier can be used if an "inner" MIME
	  type should be added to the name.
	</t>

	<t>
	  [["id" may not be the best tag for this, since it may
	  confuse, not sure what else to use.]]
	</t>

	<t>
	  Hash algorithm identifiers and function identifiers are to
	  be registered, in an IANA registry (see the "IANA
	  Considerations" section below).
	</t>

	<t>
	  [[There may already be a usable hash function registry. But
	  if we're going to be interested in truncated hashes then we
	  may need our own.]]
	</t>

<t>
Let's call a value encoded as above a "hash-string."  We could define it
thusly:
	</t>
	<figure>
	  <artwork>
hash-string = hashalg ":" b64value 
                  [ ":" function-identifier [ ":" mime-type ] ]

hashalg = identifier

function-identifier = identifier

identifier = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

mime-type = type %2f subtype
	  </artwork>
	</figure>

	<t>
	  b64value is a string based on the 64-character subset of
	  US-ASCII as defined in <xref target="RFC4648"/>.  mime-type
	  is based on the Content-Type header field syntax as
	  specified in <xref target="RFC2045"/>, but using %2f as a
	  delimiter between type and subtype instead of "/", and
	  without parameters.
	</t>

	<t>
	  [[Complete formal ABNF spec of b64value to be provided in a
	  future revision of this memo.]]
	</t>

	<t>
	  It is important to note that implementations are NOT
	  REQUIRED to support any cryptographic operations, that is,
	  as necessary, they need to be able to parse, route, log, and
	  resolve names with any of the above fields, but do not have
	  to verify anything cryptographic.
	</t>

<t>
  Implementations that do support cryptographic operations MUST offer
  applications a way (e.g. via an API) to compare an ni name with a
  resource.  The set of cryptographic operations to be supported
  (e.g. the set of supported function identifiers), is an
  implementation decision and is not further specified. Where an
  implementation does not support the operation needed to verify a ni
  object, it MUST return an error distinct from the case where the
  name-to-object comparison failed, e.g. due to a hash mismatch.
</t>

	<t>
	Implementations that create names such as these MUST
	ensure that it is possible to validate the mapping from
	the name to the resource, should other implementations
	choose to do that validation. That is, when creating a
	name like this, make sure that you do it right!
	</t>

	<t>
	  Note that not all protocols and applications making use of
	  this URI form will require strong integrity assurances when
	  doing name/resource comparisons. For this reason, we expect
	  it to be relatively common to use truncated hashes in URIs.
	</t>

      </section>

	<section title="URI Scheme">

	<t>
	  Our URIs consist of the scheme, an optional authority part
	  and then a "local" part which is a possibly empty sequence
	  of either hash-strings or any other string who's encoding is
	  allowed. As with the local part, the authority part may be
	  either a hash-string or any other string who's encoding is
	  allowed.
	</t>

	<t>
	  The semantics of the authority part are not further defined
	  here, but MUST be specified by any protocol or application
	  making use of these URIs.
	</t>

	<t>	
	  The "local" part is intended to contain an identifier for
	  the resource in question that is meaningful in the context
	  of the authority.
	</t>

	<t>
	  Note that where the authority part is omitted and where the
	  local part is not a hash-string, then this may be a
	  significant probability for accidental name collisions.
	  Protocols and applications using this URI scheme MUST take
	  care of such collisions, if they matter.  Note that this is
	  also true, even if the authority part is present, unless
	  there is some strict authority-part registration scheme in
	  force and where spoofing is hard.
	</t>

	<t>
	  One obvious thing to use for the authority part is a Fully
	  Qualified Domain Name (FQDN), possibly with a port number,
	  in which case applications using these URIs could make use
	  of the Domain Name System (DNS) and TCP. Again though - such
	  uses are outside the scope of this specification. In
	  general, there will be no guarantee that the resource can be
	  accessed at that host:port even in that case.
	</t>

	<t>
	[[ABNF to be fixed later. Note that the syntax below
	allows "ni:///" as a valid name - whether that is
	good or bad, and if good, what "ni:///" might mean
	is for future study.]]
	</t>

	<figure>
	  <artwork>
ni-name = scheme ":" hier-part
hier-part = "//" [authority] "/" *(local-part "/") ["/"]

scheme = "ni"

authority = hash-string | other-string ;(delimiters %-encoded)

local-part = hash-string | other-string ;(delimiters %-encoded)

	  </artwork>
	</figure>

	<t>
	  [[Formal ABNF of other-string to be specified in a future revision of this memo.]]
	</t>
	</section>
	
	<section title="Examples">

	<t>The longer examples in this section flow over lines, but
	the meaning should be clear enough.</t>

	<figure>
	  <artwork>
1) ni://tcd.ie/cs8053-exam-2012
		</artwork>
	</figure>

	<t>Example 1 is quite like a HTTP URL, and simply shows that "normal" URI forms
	can be used with ni names.</t>

	<figure>
	  <artwork>
2) ni:///weather-in-dublin-today  
	  </artwork>
	</figure>
	<t>
	  Example 2 shows an example of an "intentional" name, where the resource returned
	  will likely change from time to time. This example has no authority part, which 
	  presumably would mean that the requester doesn't really care much about the source
	  of the weather information.
	</t>

	<figure>
	  <artwork>
3) ni://tcd.ie/sha256:NDVmZTMzOGVkY2JjZGQ0ZmNmZGFlODQ5MjkyZ
   DM0ZTg2ZDI5YzllMmU5OTFlNmE2Mjc3ZTFhN2JhNmE4ZjVmMwo

4) ni:///sha256:NDVmZTMzOGVkY2JjZGQ0ZmNmZGFlODQ5MjkyZDM0ZTg
   2ZDI5YzllMmU5OTFlNmE2Mjc3ZTFhN2JhNmE4ZjVmMwo
	  </artwork>
	</figure>
	<t>
	  Examples 3 and 4 are the same, one with, and one without, an authority part. In
	  both cases, we have no idea what was hashed if we only know the ni name. Some
		higher layer protocol may of course be able to understand what's going on.
	</t>
	<t>It may be that the authority part of example 3 allows for more scalable
	name-based routing of a request to get, or do something with, that 
	resource.
	</t>

	<figure>
	  <artwork>
5) ni://sha256:NDc0NzgyMGVmOGQ3OGU0MmI2MWYwZjY3MDAzNDJmZTY
   0NzhhMGY0OTBhMDRiNzA0YTY0MWY0MzVkODQzZWUxMAo:id:sshpk/thing
	  </artwork>
	</figure>
	<t>
	  The authority for example 5 is a hash-string of a public key as stored in a file by
	  openssh. Though we know that from the URI, there is no implication that we need
	  to, or can, do anything special about that fact. Some protocol making use of this
	  name however, might expect that the resource contain a signature verifiable
	  with a public key that matches that hash.
	</t>

	<figure>
	  <artwork>
6) ni://tcd.ie/sha256:NDVmZTMzOGVkY2JjZGQ0ZmNmZGFlODQ
   5MjkyZDM0ZTg2ZDI5YzllMmU5OTFlNmE2Mjc3ZTFhN2JhNmE4Z
   jVmMwo:signeddata:application%2Fjpeg
	  </artwork>
	</figure>
	<t>
	  Example 6 is a ni name for a jpeg file that contains a hash of the file
	  contents where we expect to receive the image in a CMS SignedData
	  wrapper. 
	</t>
	<t>
	Note that the function identifier signeddata could be defined
	to also accept a PGP or XMLDSIG or other wrapper - what's identified
	is a function, and not directly a format.
	  The signeddata function is something that would have to
	be defined elsewhere. That is, another specification would need to be
	  written for each such function. [[Or, something basic might
	  be included here, but not as a mandatory-to-implement
	  feature.]] 
	</t>

    </section>

	<section title="Security Considerations">
	<t>
		[[More needed for sure.]]
	</t>
	<t>
	Network elements that do attempt to verify the 
	mapping from the name to the resource are doing 
	more work that those that don't, both in terms of
	CPU, (for the hash and function identifier
	calculations) and possibly also in terms of
	network access and/or storage, since they need
	the resource, and possibly meta-data that might
	have to be separately requested. An example of
	the latter kind of meta-data might be a public
	key certificate or CRL. This additional load 
	could be leveraged in some kinds of DoS 
	attack. Protocols that call for validation of
	the name/resource mapping SHOULD specify how
	to handle any such DoS that may be relevant.
	</t>

	</section>

	<section title="IANA Considerations">
	<t>
		Two registries will be required for this specification. The first
		will be for function identifiers, with a FCFS update rule and
		one initially registered value, the "id" function identifier. 
		The second registry will be for hash functions and may exist
		already. If not, then, we will want a hash function registry
		with RFC required as the update rule. Most likely the only
		reason a new hash function registry would be required would
		be if we wanted a few relatively weak truncated hash functions
		registered, but where that would be wrong for the existing
		hash function registries.
	</t>
	</section>


	<section title="Acknowledgements">
	<t>
	  This work has been supported by the EU FP7 project SAIL.
	  The authors would like to thank SAIL participants to our
	  naming discussions, especially Jean-Francois Peltier, for
	  their input.
	</t>
	</section>
  </middle>
  
  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
<!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml" -->
<!--
      &RFC2119;
      &RFC3986;
      &RFC5234;
      &RFC4648;
      &RFC2045;
-->

<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='http://www.rfc-editor.org/rfc/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>


<reference anchor='RFC3986'>

<front>
<title abbrev='URI Generic Syntax'>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'>
<organization abbrev='W3C/MIT'>World Wide Web Consortium</organization>
<address>
<postal>
<street>Massachusetts Institute of Technology</street>
<street>77 Massachusetts Avenue</street>
<city>Cambridge</city>
<region>MA</region>
<code>02139</code>
<country>USA</country></postal>
<phone>+1-617-253-5702</phone>
<facsimile>+1-617-258-5999</facsimile>
<email>timbl@w3.org</email>
<uri>http://www.w3.org/People/Berners-Lee/</uri></address></author>
<author initials='R.' surname='Fielding' fullname='Roy T. Fielding'>
<organization abbrev='Day Software'>Day Software</organization>
<address>
<postal>
<street>5251 California Ave., Suite 110</street>
<city>Irvine</city>
<region>CA</region>
<code>92617</code>
<country>USA</country></postal>
<phone>+1-949-679-2960</phone>
<facsimile>+1-949-679-2972</facsimile>
<email>fielding@gbiv.com</email>
<uri>http://roy.gbiv.com/</uri></address></author>
<author initials='L.' surname='Masinter' fullname='Larry Masinter'>
<organization abbrev='Adobe Systems'>Adobe Systems Incorporated</organization>
<address>
<postal>
<street>345 Park Ave</street>
<city>San Jose</city>
<region>CA</region>
<code>95110</code>
<country>USA</country></postal>
<phone>+1-408-536-3024</phone>
<email>LMM@acm.org</email>
<uri>http://larry.masinter.net/</uri></address></author>
<date year='2005' month='January' />
<area>Applications</area>
<keyword>uniform resource identifier</keyword>
<keyword>URI</keyword>
<keyword>URL</keyword>
<keyword>URN</keyword>
<keyword>WWW</keyword>
<keyword>resource</keyword>
<abstract>
<t>
A Uniform Resource Identifier (URI) is a compact sequence of characters
that identifies an abstract or physical resource.  This specification
defines the generic URI syntax and a process for resolving URI references
that might be in relative form, along with guidelines and security
considerations for the use of URIs on the Internet.
The URI syntax defines a grammar that is a superset of all valid URIs,
allowing an implementation to parse the common components of a URI
reference without knowing the scheme-specific requirements of every
possible identifier.  This specification does not define a generative
grammar for URIs; that task is performed by the individual
specifications of each URI scheme.
</t></abstract></front>

<seriesInfo name='STD' value='66' />
<seriesInfo name='RFC' value='3986' />
<format type='TXT' octets='141811' target='http://www.rfc-editor.org/rfc/rfc3986.txt' />
<format type='HTML' octets='213584' target='http://xml.resource.org/public/rfc/html/rfc3986.html' />
<format type='XML' octets='163534' target='http://xml.resource.org/public/rfc/xml/rfc3986.xml' />
</reference>

<reference anchor='RFC5234'>

<front>
<title>Augmented BNF for Syntax Specifications: ABNF</title>
<author initials='D.' surname='Crocker' fullname='D. Crocker'>
<organization /></author>
<author initials='P.' surname='Overell' fullname='P. Overell'>
<organization /></author>
<date year='2008' month='January' />
<abstract>
<t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF.  It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='STD' value='68' />
<seriesInfo name='RFC' value='5234' />
<format type='TXT' octets='26359' target='http://www.rfc-editor.org/rfc/rfc5234.txt' />
</reference>

<reference anchor='RFC4648'>

<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'>
<organization /></author>
<date year='2006' month='October' />
<abstract>
<t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='4648' />
<format type='TXT' octets='35491' target='http://www.rfc-editor.org/rfc/rfc4648.txt' />
</reference>


<reference anchor='RFC2045'>

<front>
<title abbrev='Internet Message Bodies'>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
<author initials='N.' surname='Freed' fullname='Ned Freed'>
<organization>Innosoft International, Inc.</organization>
<address>
<postal>
<street>1050 East Garvey Avenue South</street>
<city>West Covina</city>
<region>CA</region>
<code>91790</code>
<country>US</country></postal>
<phone>+1 818 919 3600</phone>
<facsimile>+1 818 919 3614</facsimile>
<email>ned@innosoft.com</email></address></author>
<author initials='N.S.' surname='Borenstein' fullname='Nathaniel S. Borenstein'>
<organization>First Virtual Holdings</organization>
<address>
<postal>
<street>25 Washington Avenue</street>
<city>Morristown</city>
<region>NJ</region>
<code>07960</code>
<country>US</country></postal>
<phone>+1 201 540 8967</phone>
<facsimile>+1 201 993 3032</facsimile>
<email>nsb@nsb.fv.com</email></address></author>
<date year='1996' month='November' />
<abstract>
<t>STD 11, RFC 822, defines a message representation protocol specifying considerable detail about US-ASCII message headers, and leaves the message content, or message body, as flat US-ASCII text.  This set of documents, collectively called the Multipurpose Internet Mail Extensions, or MIME, redefines the format of messages to allow for</t>
<t>(1)   textual message bodies in character sets other than US-ASCII,</t>
<t>(2)   an extensible set of different formats for non-textual message bodies,</t>
<t>(3)   multi-part message bodies, and</t>
<t>(4)   textual header information in character sets other than US-ASCII.</t>
<t>These documents are based on earlier work documented in RFC 934, STD 11, and RFC 1049, but extends and revises them.  Because RFC 822 said so little about message bodies, these documents are largely orthogonal to (rather than a revision of) RFC 822.</t>
<t>This initial document specifies the various headers used to describe the structure of MIME messages. The second document, RFC 2046, defines the general structure of the MIME media typing system and defines an initial set of media types. The third document, RFC 2047, describes extensions to RFC 822 to allow non-US-ASCII text data in Internet mail header fields. The fourth document, RFC 2048, specifies various IANA registration procedures for MIME-related facilities. The fifth and final document, RFC 2049, describes MIME conformance
  criteria as well as providing some illustrative examples of MIME message formats, acknowledgements, and the bibliography.</t>
<t>These documents are revisions of RFCs 1521, 1522, and 1590, which themselves were revisions of RFCs 1341 and 1342.  An appendix in RFC 2049 describes differences and changes from previous versions.</t></abstract></front>

<seriesInfo name='RFC' value='2045' />
<format type='TXT' octets='72932' target='http://www.rfc-editor.org/rfc/rfc2045.txt' />
</reference>


    </references>
    
    <references title="Informative References">

      <reference anchor="ref.netinf-design">
	<front>
	  <title>Design Considerations for a Network of Information</title>
	  <author surname="Ahlgren" fullname="Bengt Ahlgren"></author>
	  <author surname="D'Ambrosio" fullname="Matteo D'Ambrosio"></author>
	  <author surname="Dannewitz" fullname="Christian Dannewitz"></author>
	  <author surname="Marchisio" fullname="Marco Marchisio"></author>
	  <author surname="Marsh" fullname="Ian Marsh"></author>
	  <author surname="Ohlman" fullname="Boerje Ohlman"></author>
	  <author surname="Pentikousis" fullname="Kostas Pentikousis"></author>
	  <author surname="Rembarz" fullname="Rene Rembarz"></author>
	  <author surname="Strandberg" fullname="Ove Strandberg"></author>
	  <author surname="Vercellone" fullname="Vinicio Vercellone"></author>
	  <date month="December" year="2008"/>
	</front>
	<seriesInfo name="Re-Arch 2008 Workshop" value=""/>
      </reference>

      <reference anchor="ref.ccn">
	<front>
	  <title>Networking Named Content</title>
	  <author surname="Jacobsen" fullname="Van Jacobsen"></author>
	  <author surname="K" fullname="Diana K. Smetters"></author>
	  <author surname="D" fullname="James D. Thornton"></author>
	  <author surname="F" fullname="Michael F. Plass"></author>
	  <author surname="H" fullname="Nicholas H. Briggs"></author>
	  <author surname="L" fullname="Rebecca L. Braynard"></author>
	  <date month="December" year="2009"/>
	</front>
	<seriesInfo name="CoNEXT 2009" value=""/>
      </reference>

      &RFC5050;

      <reference anchor="ref.magnet">
	<front>
	  <title>MAGNET</title>
	  <author surname="Mohr" fullname="Gordon Mohr"></author>
	  <date month="June" year="2002"/>
	  <note title="version"><t>http://magnet-uri.sourceforge.net/magnet-draft-overview.txt</t></note>
	  <note title="URI"><t>http://magnet-uri.sourceforge.net/magnet-draft-overview.txt</t></note>
	</front>
	<annotation>http://magnet-uri.sourceforge.net/magnet-draft-overview.txt</annotation>
      </reference>

      <reference anchor="ref.caw">
	<front>
	  <title>HTTP Extensions for a Content-Addressable Web</title>
	  <author surname="Chapweske" fullname="Justin Chapweske"/>
	  <date month="October" year="2001"/>
	  <note title="URI"><t>http://lists.w3.org/Archives/Public/www-talk/2001NovDec/0090.html</t></note>
	</front>
	<annotation>http://lists.w3.org/Archives/Public/www-talk/2001NovDec/0090.html</annotation>
      </reference>


    </references>

  </back>
</rfc>


