aboutsummaryrefslogtreecommitdiff
path: root/public/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'public/index.html')
-rw-r--r--public/index.html144
1 files changed, 127 insertions, 17 deletions
diff --git a/public/index.html b/public/index.html
index 1e015d8..05205fb 100644
--- a/public/index.html
+++ b/public/index.html
@@ -469,7 +469,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<li><a href="#_applications">3. Applications</a>
<ul class="sectlevel2">
<li><a href="#_storage_and_transport_layers">3.1. Storage and Transport Layers</a></li>
-<li><a href="#_namespaces">3.2. Namespaces</a></li>
+<li><a href="#_authenticity_of_content">3.2. Authenticity of Content</a></li>
+<li><a href="#_mutability_and_namespaces">3.3. Mutability and Namespaces</a></li>
</ul>
</li>
<li><a href="#_test_vectors">4. Test Vectors</a>
@@ -574,7 +575,7 @@ This document describes the Encoding for Robust Immutable Storage (ERIS). ERIS i
<p>ERIS does not prescribe how the blocks should be stored or transported over network. The only requirement is that a block can be referenced and accessed (if available) by the hash value of the contents of the block. In section <a href="#_storage_and_transport_layers">Section 3.1</a> we show how existing technology (including IPFS) can be used to store and transport blocks.</p>
</div>
<div class="paragraph">
-<p>There is also no support for grouping content or mutating content. In section <a href="#_namespaces">Section 3.2</a> we describe how such functionality can be implemented on top of ERIS.</p>
+<p>There is also no support for grouping content or mutating content. In section <a href="#_mutability_and_namespaces">Section 3.3</a> we describe how such functionality can be implemented on top of ERIS.</p>
</div>
<div class="paragraph">
<p>The lack of certain functionalities is intentional. ERIS is an attempt to find a minimal common basis on which higher functionality can be built. Lacking functionality in ERIS is an acknowledgment that there are many ways of implementing such functionality at a different layer that may be optimized for certain use-cases.</p>
@@ -604,7 +605,7 @@ This document describes the Encoding for Robust Immutable Storage (ERIS). ERIS i
</dd>
<dt class="hdlist1">Namespaces </dt>
<dd>
-<p>ECRS defines two mechanisms for grouping and discovering encoded content (SBlock and KBlock). ERIS does not specify any such mechanisms (see <a href="#_namespaces">Section 3.2</a>).</p>
+<p>ECRS defines two mechanisms for grouping and discovering encoded content (SBlock and KBlock). ERIS does not specify any such mechanisms (see <a href="#_mutability_and_namespaces">Section 3.3</a>).</p>
</dd>
</dl>
</div>
@@ -1446,7 +1447,7 @@ ERIS-Decode(BLOCK-SIZE, LEVEL, ROOT-REFERENCE, ROOT-KEY):
<div class="sect2">
<h3 id="_urn"><a class="anchor" href="#_urn"></a>2.7. URN</h3>
<div class="paragraph">
-<p>A read-capability can be encoded as an URN: <code>urn:eris:BASE32-READ-CAPABILITY</code>, where <code>BASE32-READ-CAPABILITY</code> is the unpadded Base32 <a href="#RFC4648">[RFC4648]</a> encoding of the read capability.</p>
+<p>A read-capability can be encoded as an URN: <code>urn:erisx2:BASE32-READ-CAPABILITY</code>, where <code>BASE32-READ-CAPABILITY</code> is the unpadded Base32 <a href="#RFC4648">[RFC4648]</a> encoding of the read capability.</p>
</div>
<div class="paragraph">
<p>For example the ERIS URN of the UTF-8 encoded string "Hello world!" (with block size 1KiB and null convergence secret):</p>
@@ -1454,19 +1455,128 @@ ERIS-Decode(BLOCK-SIZE, LEVEL, ROOT-REFERENCE, ROOT-KEY):
<div class="paragraph">
<p><code>urn:erisx2:AAAD77QDJMFAKZYH2DXBUZYAP3MXZ3DJZVFYQ5DFWC6T65WSFCU5S2IT4YZGJ7AC4SYQMP2DM2ANS2ZTCP3DJJIRV733CRAAHOSWIYZM3M</code></p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The URN namespace <code>erisx2</code> is used for this experimental version of the encoding. Once finalized the namespace <code>eris</code> will be used (e.g. <code>urn:eris:AAAD77QDJMFAKZYH2DXBUZYAP3MXZ3DJZVFYQ5DFWC6T65WSFCU5S2IT4YZGJ7AC4SYQMP2DM2ANS2ZTCP3DJJIRV733CRAAHOSWIYZM3M</code>)</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_applications"><a class="anchor" href="#_applications"></a>3. Applications</h2>
<div class="sectionbody">
+<div class="paragraph">
+<p>Traditionally encoding schemes similar to ERIS are used for peer-to-peer filesharing. We hope to motivate usage for a much wider scope of applications.</p>
+</div>
+<div class="paragraph">
+<p>As part of the <a href="https://openengiadina.net">openEngiadina</a> project we are using ERIS to encode small bits of information that constitute "local knowledge" (e.g. geogrpahic information, social and cultural events, etc.) along with the social interactions that created and curated this information (using the ActivityStreams vocabulary <a href="#ActivityStreams">[ActivityStreams]</a>). ERIS allows such information to be securely cached on multiple peers to increase the robustness of the system.</p>
+</div>
+<div class="paragraph">
+<p>ERIS encoded content can be used from existing web technology and RDF as the content can be referenced by an URN. At the same time more decentralized networks can be used (this will be further research as part of the <a href="https://dream.public.cat/">DREAM</a> project).</p>
+</div>
+<div class="paragraph">
+<p>Other possible applications include package managers such as <a href="https://guix.gnu.org/">Guix</a> to increase availability of software sources and built packages or decentralized and offline-first mapping applications.</p>
+</div>
<div class="sect2">
<h3 id="_storage_and_transport_layers"><a class="anchor" href="#_storage_and_transport_layers"></a>3.1. Storage and Transport Layers</h3>
-
+<div class="paragraph">
+<p>ERIS is defined indepenedant of any storage and transport layer for blocks. The only requireiment is that blocks can be accessed by their reference - the hash of the block content.</p>
+</div>
+<div class="paragraph">
+<p>Possible storage layers include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>in-memory hash-map</p>
+</li>
+<li>
+<p>key-value store</p>
+</li>
+<li>
+<p>files on a file system</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Transport mechanisms include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>HTTP: A simple HTTP endpoint can be used to dereference blocks</p>
+</li>
+<li>
+<p>Sneakernet: Blocks can be transported on a physical medium such as a USB stick</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>More interesting transport and storage layers use the fact that blocks are content-addressed. For example the peer-to-peer network <a href="https://ipfs.io/">IPFS</a> can be used to store and transport blocks (see the <a href="https://gitlab.com/openengiadina/eris/-/blob/main/eris/block-storage/ipfs.scm">example</a> using the reference Guile implementation). The major advantages over using IPFS directly include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Content is encrypted and not readable to IPFS peers without the read capability.</p>
+</li>
+<li>
+<p>Identifier of blocks and encoded content is not tied to the IPFS network. Applications can transparently use IPFS or any other storage/transport mechanism.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>It also seems possible to use the <a href="https://named-data.net/">Named Data Networking</a> infrastructure and forwarding daemons (initial support for using Blake2b as hash function is present in the <a href="https://github.com/named-data/ndn-cxx">ndn-cxx library</a>).</p>
+</div>
</div>
<div class="sect2">
-<h3 id="_namespaces"><a class="anchor" href="#_namespaces"></a>3.2. Namespaces</h3>
-
+<h3 id="_authenticity_of_content"><a class="anchor" href="#_authenticity_of_content"></a>3.2. Authenticity of Content</h3>
+<div class="paragraph">
+<p>The presented encoding ensures integrity of content. Content can not be tampered with wihtout changing the identifier (read capability) of the content. To prove authenticity of encoded content it is sufficient to cryptographically sign the read capability.</p>
+</div>
+<div class="paragraph">
+<p>We have presented a concrete proposal on how this might be done using a RDF vocabulary and the Ed25519 cryptographic signature scheme <a href="#RDF-Signify">[RDF-Signify]</a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_mutability_and_namespaces"><a class="anchor" href="#_mutability_and_namespaces"></a>3.3. Mutability and Namespaces</h3>
+<div class="paragraph">
+<p>Encoded content is immutable in the sense that changing the encoded content results in a new identifier. Existing references to the old content need to be updated. This is a property that makes caching efficient and allows ERIS to be used for robust systems.</p>
+</div>
+<div class="paragraph">
+<p>Nevertheless, there are applications where one wants to reference mutable content. Examples include user profiles or dynamic collections of content. Making small changes to a user profile or adding a piece of content to a collection should preserve the identifiers.</p>
+</div>
+<div class="paragraph">
+<p>There are many ways of implementing such mutability or "namespaces". ERIS does not specify any particular mechanism. Possible mechanisms include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Centralized servers that returns a mutable list of reference to (immutable) content. This is how most HTTP services work.</p>
+</li>
+<li>
+<p>Append-only logs where changes are securely appended with cryptographic signatures. The state is computed from the log of changes. This is how peer-to-peer systems such as <a href="https://hypercore-protocol.org/">hypercore</a> or <a href="https://scuttlebutt.nz/">Secure ScuttleButt</a> work.</p>
+</li>
+<li>
+<p>Petname system: A system where a dynamic local name can be mapped to a reference. Sophisticated systems that allow delegation of naming authority include <a href="https://gnunet.org/en/gns.html">the GNU Name System</a>.</p>
+</li>
+<li>
+<p>Commutative Replicated Data Types (CRDTs) are distributed datastructures similar to append-only logs with the advantage that the state of a mutable container can diverge and converge to consistent state eventually. Such structures seem especially suitable when control over a mutable container is shared by multiple parties. We have made a concrete proposal for such mutable containers <a href="#DMC">[DMC]</a>.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>We believe that the best suited mechanism for handling mutability depends on concrete applications and use-cases. A key value of ERIS is that it is agnostic of such mechanisms and can be used from any of them.</p>
+</div>
</div>
</div>
</div>
@@ -1699,31 +1809,31 @@ ERIS-Decode(BLOCK-SIZE, LEVEL, ROOT-REFERENCE, ROOT-KEY):
<div class="ulist bibliography">
<ul class="bibliography">
<li>
-<p><a id="BEP52"></a>[BEP52] <a href="http://bittorrent.org/beps/bep_0052.html">The BitTorrent Protocol Specification v2</a>, 2017.</p>
+<p><a id="ActivityStreams"></a>[ActivityStreams] Snell and Prodromou, <a href="https://www.w3.org/TR/activitystreams-core/">Activity Streams 2.0</a>, 2017.</p>
</li>
<li>
-<p><a id="ECRS"></a>[ECRS] Grothoff, et al., <a href="https://grothoff.org/christian/ecrs.pdf">An encoding for censorship-resistant sharing</a>, 2003.</p>
+<p><a id="BEP52"></a>[BEP52] <a href="http://bittorrent.org/beps/bep_0052.html">The BitTorrent Protocol Specification v2</a>, 2017.</p>
</li>
<li>
-<p><a id="Freenet"></a>[Freenet] Clarke, et al., <a href="http://bourbon.usc.edu/cs694-s09/papers/freenet.pdf">Freenet: A distributed anonymous information storage and retrieval system</a>, 2001.</p>
+<p><a id="DMC"></a>[DMC] pukkamustard, <a href="http://purl.org/dmc/spec">Distributed Mutable Containers</a>, 2020.</p>
</li>
<li>
-<p><a id="Polleres2020"></a>[Polleres2020] Polleres, et al., <a href="https://epub.wu.ac.at/6371/1/IPM_workingpaper_02_2018.pdf">A more decentralized vision for Linked Data</a>, 2020.</p>
+<p><a id="ECRS"></a>[ECRS] Grothoff, et al., <a href="https://grothoff.org/christian/ecrs.pdf">An encoding for censorship-resistant sharing</a>, 2003.</p>
</li>
<li>
-<p><a id="RFC7927"></a>[RFC7927] Kutscher et. al. <a href="https://tools.ietf.org/html/rfc7927">Information-Centric Networking (ICN) Research Challenges</a>, 2016.</p>
+<p><a id="Freenet"></a>[Freenet] Clarke, et al., <a href="http://bourbon.usc.edu/cs694-s09/papers/freenet.pdf">Freenet: A distributed anonymous information storage and retrieval system</a>, 2001.</p>
</li>
<li>
-<p><a id="Zooko2008"></a>[Zooko2008] Zooko Wilcox-O&#8217;Hearn. <a href="https://tahoe-lafs.org/hacktahoelafs/drew_perttula.html">Drew Perttula and Attacks on Convergent Encryption</a>, 2008.</p>
+<p><a id="Polleres2020"></a>[Polleres2020] Polleres, et al., <a href="https://epub.wu.ac.at/6371/1/IPM_workingpaper_02_2018.pdf">A more decentralized vision for Linked Data</a>, 2020.</p>
</li>
<li>
-<p><a id="content-addressable-rdf"></a>[content-addressable-rdf] openEngiadina. <a href="https://openengiadina.net/papers/content-addressable-rdf.html">Content-addressable RDF</a>, 2020.</p>
+<p><a id="RDF-Signify"></a>[RDF-Signify] pukkamustard, <a href="https://openengiadina.net/papers/rdf-signify.html">RDF Signify</a>, 2020.</p>
</li>
<li>
-<p><a id="rdf-signify"></a>[rdf-signify] openEngiadina. <a href="https://openengiadina.net/papers/rdf-signify.html">RDF Signify</a>, 2020.</p>
+<p><a id="RFC7927"></a>[RFC7927] Kutscher et. al. <a href="https://tools.ietf.org/html/rfc7927">Information-Centric Networking (ICN) Research Challenges</a>, 2016.</p>
</li>
<li>
-<p><a id="RFC7049"></a>[RFC7049] C. Bormann &amp; P. Hoffman. <a href="https://tools.ietf.org/html/rfc7049">Concise Binary Object Representation (CBOR)</a>, 2013.</p>
+<p><a id="Zooko2008"></a>[Zooko2008] Zooko Wilcox-O&#8217;Hearn. <a href="https://tahoe-lafs.org/hacktahoelafs/drew_perttula.html">Drew Perttula and Attacks on Convergent Encryption</a>, 2008.</p>
</li>
</ul>
</div>
@@ -1739,7 +1849,7 @@ ERIS-Decode(BLOCK-SIZE, LEVEL, ROOT-REFERENCE, ROOT-KEY):
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-11-23 10:06:10 +0100
+Last updated 2020-11-26 11:46:32 +0100
</div>
</div>
</body>