Encoding for Robust Immutable Storage (ERIS)

Tool by Endo Renberg (23 August 2022)

ERIS is an encoding of arbitrary content into a set of uniformly sized, encrypted and content-addressed blocks as well as a short identifier that can be encoded as an URN. The content can be reassembled from the blocks only with this identifier. The encoding is defined independent of any storage and transport layer or any specific application.

The objectives of ERIS are:

  • Availability
    Content encoded with ERIS can be easily replicated and cached to increase the availability of content.
  • Data integrity
    Integrity of content is verified while decoding content from blocks.
  • Intermediary Peer Deniability
    Intermediary peers, who are storing and transporting encoded blocks without access to a read capability, can claim that decrypting encoded content is infeasible for them.
  • Censorship Resistance
    An adversary who does not have access to a read capability of some encoded content can not selectively block access to the content without blocking access to all content.
  • Deterministic Identifiers
    The read capability can be used as a deterministic identifier of the encoded content.
  • URN reference
    ERIS encoded content can be referenced with a single URN (the encoded read capability).
  • Storage efficiency
    ERIS can be used to encode small content (< 1 kibibyte) as well as large content (> many gibibyte) with reasonable storage overhead.
  • Simplicity
    The encoding should be as simple as possible in order to allow correct implementation on various platforms and in various languages.
  • Confidentiality is not an objective of ERIS and ERIS SHOULD NOT be used to ensure that content is kept secret from an adversary.

Additional Resources

Formal specification

Metadata

Which application domains has ERIS been used for in practice?

ERIS was originally spun out of the openEngiadia project. That project uses ERIS to identify and store RDF data. RDF uses URLs as identifiers in ontologies. Wikipedia gives the example of http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#Merlot. An ERIS equivalent could be urn:eris:B4A2GLM47S2Z7YQXFCPOU2FKFW5KPASQ3WQVCJJ5MEZRVVVQLNT5YDZJGVA2CMZJIXUJ75NNI5CSM75EVFXWOUKXXZ3CAD2SBM4PW2NGEE#Merlot which is consistent without relying on the W3 staying alive enough to fend off domain squatters.

ERIS has been used in experiments in other places where there isn’t filesystem namespace for referring to data. The Sigil OS project used ERIS identifiers for shared libraries in binaries instead file-system paths.

For immutable file-systems there is the ERIS-FS standard. I store my music collection in ERIS-FS and access it with FUSE on my laptop. Static websites are also basically immutable file-systems. eris-go supports serving ERIS-FS over FUSE or HTTP.

Spritely Globins might use ERIS for identifying and transferring files within a social network but I’m not sure what that status of that is.

I think I’m forgetting some other applications and there may be who are using ERIS but without announcing it. There are no global ERIS DHTs or or servers so there is no way doing telemetry and analytics.

There are a plenty of cases where it is not useful but given it’s simplicity I think it’s faster and easier to try and fail with ERIS than it would be with the fancier crypto-financialized stuff. ERIS is the humble content-addressed storage system.

4 Likes

Thanks, those references give a good idea of how one might use ERIS. And having played with IPFS in the past, I very much agree about the value of simplicity and humbleness.

My own interest in this space is content addressing for stable references to archived data, including code. That takes more than ERIS, of course, because it requires an actual archive, but ERIS could be a good component in such a system exactly because it is simple.

1 Like