<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.7 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-soilandreyes-app-00" category="info">

  <front>
    <title abbrev="app">The app URI scheme</title>

    <author initials="S." surname="Soiland-Reyes" fullname="Stian Soiland-Reyes">
      <organization>The University of Manchester</organization>
      <address>
        <postal>
          <street>Oxford Road</street>
          <city>Manchester</city>
          <country>United Kingdom</country>
        </postal>
        <email>stain@apache.org</email>
      </address>
    </author>

    <date year="2018" month="January" day="17"/>

    <area>General</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This Internet-Draft proposes the <spanx style="verb">app</spanx> URI scheme for the 
Archive and Packaging Protocol.</t>

<t>app URIs can be used to consume or reference hypermedia 
resources bundled inside a file archive or a mobile 
application package, as well as to resolve URIs for 
archive resources within a programmatic framework.</t>

<t>This URI scheme provides mechanisms to generate a 
unique base URI to represent the root of the archive, 
so that relative URI references in a bundled resource 
can be resolved within the archive without having to 
extract the archive content on the local file system.</t>

<t>An app URI can be used for purposes of isolation
(e.g. when consuming multiple archives), 
security constraints (avoiding “climb out” from the archive),
or for externally identiyfing sub-resources in 
other hypermedia formats.</t>

<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
<xref target="RFC2119"/>.</t>



    </abstract>


  </front>

  <middle>


<section anchor="background" title="Background">

<t>Applications that are accessing resources bundled inside a 
file archive (e.g. zip or tar.gz) can struggle to consume
hypermedia content types that use relative
URI references <xref target="RFC3986"/>, as it is challenging to 
determine the base URI in a consistent fashion.</t>

<t>Frequently the archive must be unpacked locally to 
synthesize base URIs like <spanx style="verb">file:///tmp/a1b27ae03865/</spanx>
to represent the root of the archive. Such URIs are fluctual,
might not be globally unique, and could be vulnerable to
attacks such as “climbing out” of the root directory.</t>

<t>Mobile and Web applications that are distributed as packages 
may bundle resources such as stylesheets with 
relative URI references to images and fonts.</t>

<t>An archive containing multiple HTML or 
Linked Data resources, such as in a 
BagIt archive <xref target="I-D.draft-kunze-bagit-14"/>, may be using
relative URIs to cross-reference constituent files.</t>

<t>Consumptions of archives might be performed
in memory or through a common framework, abstracting
away any local file location.</t>

<t>Consumption of an archive with a consistent base URL 
should be possible no matter from which location it was retrieved,
or on which device it is inspected.</t>

<t>When consuming multiple archives from untrusted sources 
it would be beneficial to have a Same Origin policy <xref target="RFC6454"/> 
so that relative hyperlinks can’t escape the particular archive.</t>

<t>The <spanx style="verb">file:</spanx> URI scheme <xref target="RFC8089"/> 
can be ill-suited for purposes such as above, where a
location-independent URI scheme is more flexible, 
secure and globally unique.</t>

</section>
<section anchor="syntax" title="Scheme syntax">

<t>The <spanx style="verb">app</spanx> URI scheme follows the <xref target="RFC3986"/> syntax for hierarchical
URIs according to the following production:</t>

<figure><artwork><![CDATA[
appURI    =  "app://" app-authority [ path-absolute ]
               [ "?" query ] [ "#" fragment ]
]]></artwork></figure>

<t>The <spanx style="verb">app-authority</spanx> component provides a unique identifier for the opened archive. 
See <xref target="authority"></xref> for details.</t>

<t>The <spanx style="verb">path-absolute</spanx> component provides the absolute path of a resource
(e.g. a file or directory) within the archive. See <xref target="path"></xref>
for details.</t>

<t>The semantics of the <spanx style="verb">query</spanx> component is undefined by this Internet-Draft. 
Implementations SHOULD NOT generate a query component for app URIs.</t>

<t>The “fragment” component MAY be used by implementations according
to <xref target="RFC3986"/> and the implied media type <xref target="RFC2046"/> of the
resource at the path. This Internet-Draft does not specify how
to determine the media type.</t>

<section anchor="authority" title="Authority">

<t>The purpose of the <spanx style="verb">authority</spanx> component in an app URI is 
to build a unique base URI for a particular archive. The 
authority is NOT intended to be resolvable without former
knowledge of the archive.</t>

<t>The authority of an app URI MUST be valid according to
this production:</t>

<figure><artwork><![CDATA[
app-authority    = UUID | alg-val | authority
]]></artwork></figure>

<t>The <spanx style="verb">UUID</spanx> production match its definition in <xref target="RFC4122"/>, e.g.
<spanx style="verb">2a47c495-ac70-4ed1-850b-8800a57618cf</spanx></t>

<t>The <spanx style="verb">alg-val</spanx> production match its definition in <xref target="RFC6920"/>, e.g.
<spanx style="verb">sha-256;JCS7yveugE3UaZiHCs1XpRVfSHaewxAKka0o5q2osg8</spanx></t>

<t>The <spanx style="verb">authority</spanx> production match its definition in <xref target="RFC3986"/>, e.g. <spanx style="verb">example.com</spanx>. 
As this production necessarily also match the <spanx style="verb">UUID</spanx> and <spanx style="verb">alg-val</spanx>
productions, consumers of app URIs should attempt to match those first.
While <xref target="RFC7320"/> section 2.2 says an extension may not 
“define the structure or the semantics for URI authorities”, 
extensions of this Internet-Draft <spanx style="strong">are</spanx> permitted to do so, 
if using a DNS domain name under their control. 
For instance, a vendor owning <spanx style="verb">example.com</spanx> may specify that 
<spanx style="verb">{OID}</spanx> in <spanx style="verb">{OID}.oid.example.com</spanx> has special semantics.</t>

<t>The choice of authority depends on the purpose of the app URI within the implementation.
Below are some recommendations:</t>

<t><list style="numbers">
  <t><spanx style="emph">Sandboxing</spanx>, when independently interpreting resources in 
 an archive, the authority SHOULD be a 
 UUID v4 <xref target="RFC4122"/> created with a suitable random number generator <xref target="RFC4086"/>.
 This ensures with high probablity that 
 the app base URI is globally unique. An application MAY choose to 
 reuse a previously assigned UUID that is associated with the archive.</t>
  <t><spanx style="emph">Location-based</spanx>, for referencing resources in an archive accessed at a 
 particular URL, the authority SHOULD be generated as a name-based UUID v5 <xref target="RFC4122"/>; that is 
 based on the SHA1 concatination of the URL namespace 
 <spanx style="verb">6ba7b811-9dad-11d1-80b4-00c04fd430c8</spanx> (as UUID bytes) and the 
 ASCII bytes of the particular URL. It is NOT RECOMMENDED to use this approach 
 with a file URI <xref target="RFC8089"/> without a fully qualified <spanx style="verb">host</spanx> name.</t>
  <t><spanx style="emph">Hash-based</spanx>, for referencing resources in an archive as a 
 particular bytestream, independent of its location, the authority SHOULD be 
 a checksum of the archive bytes. The checksum MUST be expressed 
 according to <xref target="RFC6920"/>’s <spanx style="verb">alg-val</spanx> production, and SHOULD use the
 <spanx style="verb">sha-256</spanx> algorithm. It is NOT RECOMMENDED to use truncated hash methods.</t>
</list></t>

<t>The generic <spanx style="verb">authority</spanx> production MAY be used 
for extensions if the above mechanisms are not suitable. 
Care should be taken so that the custom <spanx style="verb">authority</spanx> 
do not match the <spanx style="verb">UUID</spanx> nor <spanx style="verb">alg-val</spanx> productions.</t>

</section>
<section anchor="path" title="Path">

<t>The <spanx style="verb">path-absolute</spanx> component MUST match the production in 
<xref target="RFC3986"/> and provide the absolute path of a resource
(e.g. a file or directory) within the archive.</t>

<t>Archive media types vary in constraints and flexibilities 
of how to express paths. Here we assume an archive generally
consists of a single root directory, which can contain 
multiple directories and files at arbitrary nesting levels.</t>

<t>Paths SHOULD be expressed using <spanx style="verb">/</spanx> as the directory separator.
The below productions are from <xref target="RFC3986"/>:</t>

<figure><artwork><![CDATA[
path-absolute = "/" [ segment-nz *( "/" segment ) ]
segment       = *pchar
segment-nz    = 1*pchar
]]></artwork></figure>

<t>In an app URI, each intermediate <spanx style="verb">segment</spanx> (or <spanx style="verb">segment-nz</spanx>) 
represent a directory name, while the last segment represent 
either a directory or file name.</t>

<t>It is RECOMMENDED to include the trailing <spanx style="verb">/</spanx> if it is known 
the path represents a directory.</t>

</section>
</section>
<section anchor="semantics" title="Scheme semantics">

<t>This Internet-Draft does not constrain what particular format
might constitute an <spanx style="emph">archive</spanx>, and neither does it require 
that the archive is retrievable as a single bytestream or file.
Examples of archive media types include 
<spanx style="verb">application/zip</spanx>, <spanx style="verb">application/vnd.android.package-archive</spanx>, 
<spanx style="verb">application/x-tar</spanx>, <spanx style="verb">application/x-gtar</spanx> and 
<spanx style="verb">application/x-7z-compressed</spanx>.</t>

<t>The <spanx style="emph">authority</spanx> component identifies the archive file.</t>

<t>The <spanx style="emph">path</spanx> component of an app URI identify individual 
resources within a particular archive, typically 
a <spanx style="emph">directory</spanx> or <spanx style="emph">file</spanx>.</t>

<t><list style="symbols">
  <t>If the <spanx style="emph">path</spanx> is missing/empty - e.g.
<spanx style="verb">app://833ebda2-f9a8-4462-b74a-4fcdc1a02d22</spanx> - then 
the app URI represent the whole archive file.</t>
  <t>If the <spanx style="emph">path</spanx> is <spanx style="verb">/</spanx> - e.g. 
<spanx style="verb">app://833ebda2-f9a8-4462-b74a-4fcdc1a02d22/</spanx> - 
then the app URI represent the root directory
of the archive.</t>
  <t>If the path ends with <spanx style="verb">/</spanx> then the path represents
a directory in the archive</t>
</list></t>

<t>The app URIs can be used for uniquely identifying 
the resources independent of the location of the archive,
such as within an information system.</t>

<t>Assuming an appropriate resolution mechanism which have
knowledge of the corresponding archive, an app URI
can also be used for resolution.</t>

<section anchor="resolution" title="Resolution protocol">

<t>This Internet-Draft do not specify directly the protocol to 
resolve resources according to the app URI scheme. 
For instance, one implementation might rewrite app URIs to 
localized <spanx style="verb">file:///</spanx> paths in a temporary directory, while
another implementation might use an embedded HTTP server.</t>

<t>It is envisioned that an implementation will 
have extracted or opened an archive in 
advance, and assigned it an appropriate authority according
to <xref target="authority"></xref>. Such an implementation
can then resolve app URIs programmatically, e.g. by using
in-memory access or mapping paths to the extracted archive on 
the local file system.</t>

<t>Implementations that support resolving app URIs SHOULD:</t>

<t><list style="numbers">
  <t>Fail with the equivalent of <spanx style="emph">Not Found</spanx> if the authority is unknown.</t>
  <t>Fail with the equivalent of <spanx style="emph">Gone</spanx> if the authority is known, but the content of the archive is no longer available.</t>
  <t>Fail with the equivalent of <spanx style="emph">Not Found</spanx> if the path does not map to a file or directory within the archive.</t>
  <t>Return the corresponding (potentially uncompressed) bytestream if the path maps to a file within the archive.</t>
  <t>Return an appropriate directory listing if the path maps to a directory within the archive.</t>
  <t>Return an appropriate directory listing of the archive’s root directory if the path is <spanx style="verb">/</spanx></t>
  <t>Return the archive file if the path component is missing/empty.</t>
</list></t>

<t>Not all archive formats or implementations will have the 
concept of a directory listing, in which case the directory listing 
SHOULD fail with the equivalent of “Not Implemented”.</t>

<t>It is not specified in this Internet-Draft how an implementation
can determine the media type of a file within an archive. This may
be expressed in secondary resources (such as a manifest), 
be determined by file extensions or magic bytes.</t>

<t>The media type <spanx style="verb">text/uri-list</spanx> <xref target="RFC2483"/> MAY be used to represent 
a directory listing, in which case it SHOULD contain only URIs
that start with the app URI of the directory.</t>

<t>Some archive formats might support resources which are 
neither directories nor regular files (e.g. device files, 
symbolic links). This Internet-Draft does not specify the 
semantics of attempting to resolve such resources.</t>

<t>This Internet-Draft does not specify how to change an archive
or its content using app URIs.</t>

</section>
<section anchor="well-known" title="Resolving from a .well-known endpoint">

<t>If the <spanx style="verb">authority</spanx> component of an app URI matches the <spanx style="verb">alg-val</spanx>
production, an application MAY attempt to resolve the authority
from any <spanx style="verb">.well-known/ni/</spanx> endpoint <xref target="RFC5785"/> as specified in 
<xref target="RFC6920"/> section 4, in order to retrieve the complete
archive. Applications SHOULD verify the checksum of the 
retrieved archive before resolving the individual path.</t>

</section>
</section>
<section anchor="encoding" title="Encoding considerations">

<t>The production for <spanx style="verb">UUID</spanx> and <spanx style="verb">alg-val</spanx> are restricted to
ASCII and should not require any encoding considerations.</t>

<t>Care should be taken to %-encode the directory and file segments 
of <spanx style="verb">path-absolute</spanx> according to <xref target="RFC3986"/> (for URIs) or 
<xref target="RFC3987"/> (for IRIs).</t>

<t>When used as part an IRI, paths SHOULD be expressed using
international Unicode characters instead of %-encoding as ASCII.</t>

<t>Not all archive media types have an explicit 
character encoding specified for their paths. 
If no such information is available for the archive format, 
implementations MAY assume that the path component 
is encoded with UTF-8 <xref target="RFC2279"/>.</t>

<t>Some archive media types are case-insensitive, in 
which cases it is RECOMMENDED to preserve the casing 
as expressed in the archive.</t>

</section>
<section anchor="interoperability" title="Interoperability considerations">

<t>As multiple authorities are possible (<xref target="authority"></xref>), 
there could be interoperability challenges when exchanging app URIs
between implementations. Some considerations:</t>

<t><list style="numbers">
  <t>Two implementations describe the same archive 
  (e.g. stored in the same local file path), but using 
  different v4 UUIDs. The implementations may 
  need to detect equality of the two UUIDs out of band.</t>
  <t>Two implementations describe an archive retrieved
  from the same URL, with the same v5 UUIDs, but retrieved
  at different times. The implementations might disagree
  about the content of the archive.</t>
  <t>Two implementations describe an archive retrieved
  from the same URL, with the same v5 UUIDs, but retrieved 
  using different content negotiation resulting in different
  archive representations. The implementations may disagree 
  about path encoding, file name casing or hierarchy.</t>
  <t>Two implementations describe the same archive bytestream 
  using the <spanx style="verb">alg-val</spanx> production, but they have used
  two different hash algorithms. The implementations may
  need to negotiate to a common hash algorithm.</t>
  <t>An implementation describe an archive using
  the <spanx style="verb">alg-val</spanx> production, but a second
  implementation concurrently modifies the archive’s content.
  The first implementation may need to detect changes to 
  the archive or verify the checksum at the end of its operations.</t>
  <t>Two implementations might have different views of the 
  content of the same archive if the format permits 
  multiple entries with the same path. Care should
  be taken to follow the convention and specification 
  of the particular archive format.</t>
  <t>Two implementations that access the same archive
  which contain file paths with Unicode characters,
  but they extract to two different file systems. Limitations
  and conventions for file names in the local file system 
  (e.g. Unicode normalization, case insensitivity, total path length)
  may result in the implementations having 
  inconsistent or inaccessible paths.</t>
</list></t>

</section>
<section anchor="security" title="Security Considerations">

<t>As when handling any content, extra care should be taken when
consuming archives and app URIs from unknown sources.</t>

<t>An archive could contain compressed files that expand to
fill all available disk space.</t>

<t>A maliciously crafted archive could contain paths with characters
(e.g. backspace) which could make an app URI invalid or
misleading if used unescaped.</t>

<t>A maliciously crafted archive could contain paths
(e.g. combined Unicode sequences) that cause the 
app URI to be very long, causing issues in information
systems propagating said URI.</t>

<t>An archive might contain symbolic links that, if 
extracted to a local file system, might address files 
outside the archive’s directory structure.</t>

<t>An maliciously crafted app URI might contain <spanx style="verb">../</spanx> segments, 
which if naively converted to a <spanx style="verb">file:///</spanx> URI might address
files outside the archive’s directory structure.</t>

<t>In particular for IRIs, an archive might contain multiple 
paths with similar-looking characters or with different
Unicode combine sequences, which could be facilitated
to mislead users.</t>

<t>An URI hyperlink might use or guess an app URI authority 
to attempt to climb into a different archive for 
malicious purposes. Applications SHOULD employ 
Same Orgin policy <xref target="RFC6454"/> checks.</t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>This Internet-Draft contains the Provisional IANA 
registration of the app URI scheme according to <xref target="RFC7595"/>.</t>

<t>Scheme name: app</t>

<t>Status: provisional</t>

<t>Applications/protocols that use this protocol:
  Hypermedia-consuming application that handle archives.</t>

<t>Contact: Stian Soiland-Reyes <eref target="mailto:stain@apache.org">stain@apache.org</eref></t>

<t>Change controller: Stian Soiland-Reyes</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2046" target='https://www.rfc-editor.org/info/rfc2046'>
<front>
<title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
<author initials='N.' surname='Freed' fullname='N. Freed'><organization /></author>
<author initials='N.' surname='Borenstein' fullname='N. Borenstein'><organization /></author>
<date year='1996' month='November' />
<abstract><t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2046'/>
<seriesInfo name='DOI' value='10.17487/RFC2046'/>
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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.  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='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC2279" target='https://www.rfc-editor.org/info/rfc2279'>
<front>
<title>UTF-8, a transformation format of ISO 10646</title>
<author initials='F.' surname='Yergeau' fullname='F. Yergeau'><organization /></author>
<date year='1998' month='January' />
<abstract><t>UTF-8, the object of this memo, has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo updates and replaces RFC 2044, in particular addressing the question of versions of the relevant standards. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2279'/>
<seriesInfo name='DOI' value='10.17487/RFC2279'/>
</reference>



<reference  anchor="RFC2483" target='https://www.rfc-editor.org/info/rfc2483'>
<front>
<title>URI Resolution Services Necessary for URN Resolution</title>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<author initials='R.' surname='Daniel' fullname='R. Daniel'><organization /></author>
<date year='1999' month='January' />
<abstract><t>Retrieving the resource identified by a Uniform Resource Identifier (URI) is only one of the operations that can be performed on a URI.  One might also ask for and get a list of other identifiers that are aliases for the original URI or a bibliographic description of the resource the URI denotes, for example. This applies to both Uniform Resource Names (URNs) and Uniform Resource Locators (URLs). Uniform Resource Characteristics (URCs) are discussed in this document but only as descriptions of resources rather than identifiers.  This memo defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='2483'/>
<seriesInfo name='DOI' value='10.17487/RFC2483'/>
</reference>



<reference  anchor="RFC3986" target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='T. Berners-Lee'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<date year='2005' month='January' />
<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.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>



<reference  anchor="RFC3987" target='https://www.rfc-editor.org/info/rfc3987'>
<front>
<title>Internationalized Resource Identifiers (IRIs)</title>
<author initials='M.' surname='Duerst' fullname='M. Duerst'><organization /></author>
<author initials='M.' surname='Suignard' fullname='M. Suignard'><organization /></author>
<date year='2005' month='January' />
<abstract><t>This document defines a new protocol element, the Internationalized  Resource Identifier (IRI), as a complement of the Uniform Resource  Identifier (URI). An IRI is a sequence of characters from the  Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to   URIs is defined, which means that IRIs can be used instead of URIs,  where appropriate, to identify resources.</t><t> The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs.  This was done in order  to allow a clear distinction and to avoid incompatibilities with  existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t></abstract>
</front>
<seriesInfo name='RFC' value='3987'/>
<seriesInfo name='DOI' value='10.17487/RFC3987'/>
</reference>



<reference  anchor="RFC4086" target='https://www.rfc-editor.org/info/rfc4086'>
<front>
<title>Randomness Requirements for Security</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><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'/>
<seriesInfo name='DOI' value='10.17487/RFC4086'/>
</reference>



<reference  anchor="RFC4122" target='https://www.rfc-editor.org/info/rfc4122'>
<front>
<title>A Universally Unique IDentifier (UUID) URN Namespace</title>
<author initials='P.' surname='Leach' fullname='P. Leach'><organization /></author>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<author initials='R.' surname='Salz' fullname='R. Salz'><organization /></author>
<date year='2005' month='July' />
<abstract><t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t><t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4122'/>
<seriesInfo name='DOI' value='10.17487/RFC4122'/>
</reference>



<reference  anchor="RFC5785" target='https://www.rfc-editor.org/info/rfc5785'>
<front>
<title>Defining Well-Known Uniform Resource Identifiers (URIs)</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='E.' surname='Hammer-Lahav' fullname='E. Hammer-Lahav'><organization /></author>
<date year='2010' month='April' />
<abstract><t>This memo defines a path prefix for &quot;well-known locations&quot;, &quot;/.well-known/&quot;, in selected Uniform Resource Identifier (URI) schemes.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5785'/>
<seriesInfo name='DOI' value='10.17487/RFC5785'/>
</reference>



<reference  anchor="RFC6454" target='https://www.rfc-editor.org/info/rfc6454'>
<front>
<title>The Web Origin Concept</title>
<author initials='A.' surname='Barth' fullname='A. Barth'><organization /></author>
<date year='2011' month='December' />
<abstract><t>This document defines the concept of an &quot;origin&quot;, which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named &quot;Origin&quot;, that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6454'/>
<seriesInfo name='DOI' value='10.17487/RFC6454'/>
</reference>



<reference  anchor="RFC6920" target='https://www.rfc-editor.org/info/rfc6920'>
<front>
<title>Naming Things with Hashes</title>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='D.' surname='Kutscher' fullname='D. Kutscher'><organization /></author>
<author initials='C.' surname='Dannewitz' fullname='C. Dannewitz'><organization /></author>
<author initials='B.' surname='Ohlman' fullname='B. Ohlman'><organization /></author>
<author initials='A.' surname='Keranen' fullname='A. Keranen'><organization /></author>
<author initials='P.' surname='Hallam-Baker' fullname='P. Hallam-Baker'><organization /></author>
<date year='2013' month='April' />
<abstract><t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function.  It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it.  The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t></abstract>
</front>
<seriesInfo name='RFC' value='6920'/>
<seriesInfo name='DOI' value='10.17487/RFC6920'/>
</reference>



<reference  anchor="RFC7320" target='https://www.rfc-editor.org/info/rfc7320'>
<front>
<title>URI Design and Ownership</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2014' month='July' />
<abstract><t>Section 1.1.1 of RFC 3986 defines URI syntax as &quot;a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme.&quot;  In other words, the structure of a URI is defined by its scheme.  While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of URI substructure is inappropriate, because that essentially usurps ownership.  This document further describes this problematic practice and provides some acceptable alternatives for use in standards.</t></abstract>
</front>
<seriesInfo name='BCP' value='190'/>
<seriesInfo name='RFC' value='7320'/>
<seriesInfo name='DOI' value='10.17487/RFC7320'/>
</reference>



<reference  anchor="RFC7595" target='https://www.rfc-editor.org/info/rfc7595'>
<front>
<title>Guidelines and Registration Procedures for URI Schemes</title>
<author initials='D.' surname='Thaler' fullname='D. Thaler' role='editor'><organization /></author>
<author initials='T.' surname='Hansen' fullname='T. Hansen'><organization /></author>
<author initials='T.' surname='Hardie' fullname='T. Hardie'><organization /></author>
<date year='2015' month='June' />
<abstract><t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes.  It obsoletes RFC 4395.</t></abstract>
</front>
<seriesInfo name='BCP' value='35'/>
<seriesInfo name='RFC' value='7595'/>
<seriesInfo name='DOI' value='10.17487/RFC7595'/>
</reference>



<reference  anchor="RFC8089" target='https://www.rfc-editor.org/info/rfc8089'>
<front>
<title>The &quot;file&quot; URI Scheme</title>
<author initials='M.' surname='Kerwin' fullname='M. Kerwin'><organization /></author>
<date year='2017' month='February' />
<abstract><t>This document provides a more complete specification of the &quot;file&quot; Uniform Resource Identifier (URI) scheme and replaces the very brief definition in Section 3.10 of RFC 1738.</t><t>It defines a common syntax that is intended to interoperate across the broad spectrum of existing usages.  At the same time, it notes some other current practices around the use of file URIs.</t></abstract>
</front>
<seriesInfo name='RFC' value='8089'/>
<seriesInfo name='DOI' value='10.17487/RFC8089'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC4648" target='https://www.rfc-editor.org/info/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'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



<reference anchor="I-D.draft-kunze-bagit-14">
<front>
<title>The BagIt File Packaging Format (V0.97)</title>

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

<author initials='J' surname='Littman' fullname='Justin Littman'>
    <organization />
</author>

<author initials='L' surname='Madden' fullname='Liz Madden'>
    <organization />
</author>

<author initials='E' surname='Summers' fullname='Ed Summers'>
    <organization />
</author>

<author initials='A' surname='Boyko' fullname='Andy Boyko'>
    <organization />
</author>

<author initials='B' surname='Vargas' fullname='Brian Vargas'>
    <organization />
</author>

<date month='October' day='21' year='2016' />

<abstract><t>This document specifies BagIt, a hierarchical file packaging format for storage and transfer of arbitrary digital content.  A "bag" has just enough structure to enclose descriptive "tags" and a "payload" but does not require knowledge of the payload's internal semantics. This BagIt format should be suitable for disk-based or network-based storage and transfer.  BagIt is widely used in the practice of digital preservation.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-kunze-bagit-14' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-kunze-bagit-14.txt' />
</reference>



<reference anchor="W3C.NOTE-app-uri-20150723"
           target='http://www.w3.org/TR/2015/NOTE-app-uri-20150723'>
<front>
<title>The app: URL Scheme</title>

<author initials='M.' surname='Caceres' fullname='Marcos Caceres'>
    <organization />
</author>

<date month='July' day='23' year='2015' />
</front>

<seriesInfo name='World Wide Web Consortium NOTE' value='NOTE-app-uri-20150723' />
<format type='HTML' target='http://www.w3.org/TR/2015/NOTE-app-uri-20150723' />
</reference>



<reference anchor="W3C.NOTE-widgets-uri-20120313"
           target='http://www.w3.org/TR/2012/NOTE-widgets-uri-20120313'>
<front>
<title>Widget URI scheme</title>

<author initials='M.' surname='Caceres' fullname='Marcos Caceres'>
    <organization />
</author>

<date month='March' day='13' year='2012' />
</front>

<seriesInfo name='World Wide Web Consortium NOTE' value='NOTE-widgets-uri-20120313' />
<format type='HTML' target='http://www.w3.org/TR/2012/NOTE-widgets-uri-20120313' />
</reference>


<reference anchor="ROBundle" target="https://w3id.org/bundle/">
  <front>
    <title>Research Object Bundle 1.0</title>
    <author initials="S." surname="Soiland-Reyes" fullname="Stian Soiland-Reyes">
      <organization></organization>
    </author>
    <author initials="M." surname="Gamble" fullname="Matthew Gamble">
      <organization></organization>
    </author>
    <author initials="R." surname="Haines" fullname="Robert Haines">
      <organization></organization>
    </author>
    <date year="2014" month="November"/>
  </front>
  <seriesInfo name="Zenodo" value="report"/>
  <seriesInfo name="DOI" value="10.5281/zenodo.12586"/>
</reference>
<reference anchor="CWLViewer" target="https://view.commonwl.org/">
  <front>
    <title>Common-Workflow-Language/CWLviewer: CWL Viewer</title>
    <author initials="M." surname="Robinson" fullname="Mark Robinson">
      <organization></organization>
    </author>
    <author initials="S." surname="Soiland-Reyes" fullname="Stian Soiland-Reyes">
      <organization></organization>
    </author>
    <author initials="M." surname="Crusoe" fullname="Michael R. Crusoe">
      <organization></organization>
    </author>
    <date year="2017" month="August"/>
  </front>
  <seriesInfo name="Zenodo" value="Software"/>
  <seriesInfo name="DOI" value="10.5281/zenodo.823534"/>
</reference>


    </references>


<section anchor="examples" title="Examples">

<section anchor="sandboxing" title="Sandboxing">

<t>An document store application has received a file 
<spanx style="verb">document.tar.gz</spanx> which content will be checked for consistency.</t>

<t>For sandboxing purposes it generates a UUID v4 
<spanx style="verb">32a423d6-52ab-47e3-a9cd-54f418a48571</spanx> using a pseudo-random generator.
The app base URI is thus <spanx style="verb">app://32a423d6-52ab-47e3-a9cd-54f418a48571/</spanx></t>

<t>The archive contains the files:</t>

<t><list style="symbols">
  <t><spanx style="verb">./doc.html</spanx>  which links to <spanx style="verb">css/base.css</spanx></t>
  <t><spanx style="verb">./css/base.css</spanx>  which links to <spanx style="verb">../fonts/Coolie.woff</spanx></t>
  <t><spanx style="verb">./fonts/Coolie.woff</spanx></t>
</list></t>

<t>The application generates the corresponding app URIs and uses those for URI resolutions:</t>

<t><list style="symbols">
  <t>app://32a423d6-52ab-47e3-a9cd-54f418a48571/doc.html links 
to app://32a423d6-52ab-47e3-a9cd-54f418a48571/css/base.css</t>
  <t>app://32a423d6-52ab-47e3-a9cd-54f418a48571/css/base.css` links to app://32a423d6-52ab-47e3-a9cd-54f418a48571/fonts/Coolie.woff</t>
  <t>app://32a423d6-52ab-47e3-a9cd-54f418a48571/`fonts/Coolie.woff</t>
</list></t>

<t>The application is now confident that all hyperlinked files are
indeed present in the archive. In its database it notes which ZIP file 
corresponds to <spanx style="verb">32a423d6-52ab-47e3-a9cd-54f418a48571</spanx>.</t>

<t>If the application had encountered a malicious hyperlink 
<spanx style="verb">../../../outside.txt</spanx> it would first resolve it to 
the absolute URI <spanx style="verb">app://32a423d6-52ab-47e3-a9cd-54f418a48571/outside.txt</spanx> and
conclude from the <spanx style="emph">“Not Found”</spanx> error that the path <spanx style="verb">/outside.txt</spanx> was not 
present in the archive.</t>

</section>
<section anchor="origin-based" title="Origin-based">

<t>A web crawler is about to index the content of the URL
<spanx style="verb">http://example.com/data.zip</spanx> and need to generate absolute URIs
as it continues crawling inside the individual resources of the archive.</t>

<t>The application generates a UUID v5 based on the 
URL namespace <spanx style="verb">6ba7b811-9dad-11d1-80b4-00c04fd430c8</spanx> and
the URL to the zip file:</t>

<figure><artwork><![CDATA[
>>> uuid.uuid5(uuid.NAMESPACE_URL, "http://example.com/data.zip")
UUID('b7749d0b-0e47-5fc4-999d-f154abe68065')
]]></artwork></figure>

<t>Thus the base app URI is <spanx style="verb">app://b7749d0b-0e47-5fc4-999d-f154abe68065/</spanx> for 
indexing the ZIP content, after which the crawler finds:</t>

<t><list style="symbols">
  <t>app://b7749d0b-0e47-5fc4-999d-f154abe68065/</t>
  <t>app://b7749d0b-0e47-5fc4-999d-f154abe68065/pics/</t>
  <t>app://b7749d0b-0e47-5fc4-999d-f154abe68065/pics/flower.jpeg</t>
</list></t>

<t>When the application encounters <spanx style="verb">http://example.com/data.zip</spanx> some time later
it can recalculate the same base app URI. This time the ZIP file has been modified
upstream and the crawler finds additionally:</t>

<t><list style="symbols">
  <t>app://b7749d0b-0e47-5fc4-999d-f154abe68065/pics/cloud.jpeg</t>
</list></t>

<t>If files had been removed from the updated ZIP file this 
would be trivial for the crawler to clear from its database, 
as it used the same base URI as in last crawl.</t>

</section>
<section anchor="hash-based" title="Hash-based">

<t>An application where users can upload software distributions
for virus checking needs to avoid duplication as users
tend to upload <spanx style="verb">foo-1.2.tar</spanx> multiple times.</t>

<t>The application calculates the <spanx style="emph">sha-256</spanx> checksum of the uploaded
file to be <spanx style="verb">17edf80f84d478e7c6d2c7a5cfb4442910e8e1778f91ec0f79062d8cbdef42cd</spanx> 
in hexadecimal. The <spanx style="emph">base64url</spanx> encoding <xref target="RFC4648"/> of the 
binary version of the checksum is 
<spanx style="verb">F-34D4TUeOfG0selz7REKRDo4XePkewPeQYtjL3vQs0</spanx>.</t>

<t>The corresponding <spanx style="verb">alg-val</spanx> authority is thus 
<spanx style="verb">sha-256;F-34D4TUeOfG0selz7REKRDo4XePkewPeQYtjL3vQs0</spanx> meaning the 
base app URL is <spanx style="verb">app://sha-256;F-34D4TUeOfG0selz7REKRDo4XePkewPeQYtjL3vQs0/</spanx></t>

<t>The crawler finds that it’s virus database already contain entries
for:</t>

<t><list style="symbols">
  <t>app://sha-256;F-34D4TUeOfG0selz7REKRDo4XePkewPeQYtjL3vQs0/bin/evil</t>
</list></t>

<t>and flags the upload as malicious without having to scan it again.</t>

</section>
<section anchor="archives-that-are-not-files" title="Archives that are not files">

<t>An application is relating BagIt archives 
<xref target="I-D.draft-kunze-bagit-14"/> on a shared file system, using structured
folders and manifests rather than individual archive files.</t>

<t>The BagIt payload manifest <spanx style="verb">/gfs/bags/scan15/manifest-md5.txt</spanx> lists the files:</t>

<figure><artwork><![CDATA[
49afbd86a1ca9f34b677a3f09655eae9 data/27613-h/images/q172.png
408ad21d50cef31da4df6d9ed81b01a7 data/27613-h/images/q172.txt
]]></artwork></figure>

<t>The application generates a random UUID v4 
<spanx style="verb">ff2d5a82-7142-4d3f-b8cc-3e662d6de756</spanx> which it adds to 
the bag metadata file <spanx style="verb">/gfs/bags/scan15/bag-info.txt</spanx></t>

<figure><artwork><![CDATA[
External-Identifier: ff2d5a82-7142-4d3f-b8cc-3e662d6de756
]]></artwork></figure>

<t>It then generates app URIs for the files listed in the manifest:</t>

<figure><artwork><![CDATA[
app://ff2d5a82-7142-4d3f-b8cc-3e662d6de756/data/27613-h/images/q172.png
app://ff2d5a82-7142-4d3f-b8cc-3e662d6de756/data/27613-h/images/q172.txt
]]></artwork></figure>

</section>
<section anchor="resolution-of-packaged-resources" title="Resolution of packaged resources">

<t>A virtual file system driver on a mobile operating system 
has mounted several packaged application for resolving 
common resources. An application requests the rendering 
framework to resolve a picture from
<spanx style="verb">app://eb1edec9-d2eb-4736-a875-eb97b37c690e/img/logo.png</spanx>
to show it within a user interface.</t>

<t>The framework first checks that the authority 
<spanx style="verb">eb1edec9-d2eb-4736-a875-eb97b37c690e</spanx> is valid to access
according to the Same Origin policies or permissions of the
running application. It then matches the
authority to the corresponding application package.</t>

<t>The framework then resolves <spanx style="verb">/img/logo.png</spanx> from within
that package, and returns an image buffer it already had
cached in memory.</t>

</section>
</section>
<section anchor="history" title="History">

<t>This Internet-Draft proposes the URI scheme <spanx style="verb">app</spanx>, which was originally 
proposed by <xref target="W3C.NOTE-app-uri-20150723"/> but never registered with IANA.
That W3C Note evolved from <xref target="W3C.NOTE-widgets-uri-20120313"/> which 
proposed the URI scheme <spanx style="verb">widget</spanx>.</t>

<t>Neither W3C Notes did progress further as Recommendation track documents.</t>

<t>While the focus of W3C Notes was to specify how to resolve resources from
within a packaged application, this Internet-Draft generalize 
the <spanx style="verb">app</spanx> URI scheme to support referencing and identifying resources
within any archive, and de-emphasize the retrieval mechanism.</t>

<t>For compatibility with existing adaptations of the <spanx style="verb">app</spanx> URI scheme, 
e.g. <xref target="ROBundle"/> and <xref target="CWLViewer"/>, this Internet-Draft reuse the same
scheme name and remains compatible with the intentions of
<xref target="W3C.NOTE-app-uri-20150723"/>.</t>

</section>


  </back>

<!-- ##markdown-source:
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
uFeKAVz/H0JYY7b0WwAA

-->

</rfc>

