docs/comparison/ssb.html

436 lines
No EOL
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js" lang="en">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="Matrix" href="matrix.html" /><link rel="prev" title="ActivityPub" href="activitypub.html" />
<link rel="canonical" href="/docs/comparison/ssb.html" />
<!-- Generated with Sphinx 6.2.1 and Furo 2023.05.20 -->
<title>Secure Scuttlebutt - p2p-ld 0.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=e6660623a769aa55fea372102b9bf3151b292993" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
<style>
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24">
<title>Auto light/dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<path d="M13 12h5" />
<path d="M13 15h4" />
<path d="M13 18h1" />
<path d="M13 9h4" />
<path d="M13 6h1" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="../index.html"><div class="brand">p2p-ld 0.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
<span class="sidebar-brand-text">p2p-ld 0.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<p class="caption" role="heading"><span class="caption-text">Introduction</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../overview.html">Overview</a></li>
<li class="toctree-l1 current has-children"><a class="reference internal" href="index.html">Comparison</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Comparison</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="bittorrent.html">BitTorrent</a></li>
<li class="toctree-l2"><a class="reference internal" href="ipfs.html">IPFS</a></li>
<li class="toctree-l2"><a class="reference internal" href="hypercore.html">Dat/Hypercore</a></li>
<li class="toctree-l2"><a class="reference internal" href="spritely.html">Spritely/Goblin</a></li>
<li class="toctree-l2"><a class="reference internal" href="activitypub.html">ActivityPub</a></li>
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Secure Scuttlebutt</a></li>
<li class="toctree-l2"><a class="reference internal" href="matrix.html">Matrix</a></li>
<li class="toctree-l2"><a class="reference internal" href="at_protocol.html">AT Protocol/Bluesky</a></li>
<li class="toctree-l2"><a class="reference internal" href="nostr.html">Nostr</a></li>
<li class="toctree-l2"><a class="reference internal" href="xmpp.html">XMPP</a></li>
<li class="toctree-l2"><a class="reference internal" href="solid.html">SOLID</a></li>
<li class="toctree-l2"><a class="reference internal" href="ld_fragments.html">Linked Data Fragments</a></li>
<li class="toctree-l2"><a class="reference internal" href="ld_platform.html">Linked Data Platform</a></li>
<li class="toctree-l2"><a class="reference internal" href="nanopubs.html">NanoPubs</a></li>
<li class="toctree-l2"><a class="reference internal" href="eris.html">ERIS</a></li>
<li class="toctree-l2"><a class="reference internal" href="dmc.html">DMC</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../p2p_concepts.html">P2P Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../out_of_scope.html">Out of Scope</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Protocol</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../definitions.html">1. Definitions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../protocol.html">2. Protocol</a></li>
<li class="toctree-l1"><a class="reference internal" href="../identity.html">3. Identity</a></li>
<li class="toctree-l1"><a class="reference internal" href="../discovery.html">4. Discovery</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_structures.html">5. Data Structures</a></li>
<li class="toctree-l1"><a class="reference internal" href="../vocabulary.html">6. Vocabulary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../querying.html">7. Querying</a></li>
<li class="toctree-l1"><a class="reference internal" href="../encryption.html">8. Encryption</a></li>
<li class="toctree-l1"><a class="reference internal" href="../encryption.html#todo">9. TODO</a></li>
<li class="toctree-l1"><a class="reference internal" href="../federation.html">10. Federation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../backwards_compatibility.html">11. Backwards Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../evolvability.html">12. Evolvability</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Ecosystem</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../triplets.html">Triplets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../adapter/index.html">Adapter</a></li>
<li class="toctree-l1"><a class="reference internal" href="../translation/index.html">Translation</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Drafting</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../design.html">Design Decisions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../sketchpad.html">Sketchpad</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Meta</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../genindex.html">Index</a></li>
<li class="toctree-l1"><a class="reference internal" href="../references.html">References</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main">
<section id="secure-scuttlebutt">
<span id="index-0"></span><h1>Secure Scuttlebutt<a class="headerlink" href="#secure-scuttlebutt" title="Permalink to this heading">#</a></h1>
<section id="feeds-metafeeds">
<h2>Feeds &amp; Metafeeds<a class="headerlink" href="#feeds-metafeeds" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p>Peers maintain a list of feeds they subscribe to</p></li>
<li><p>When peers connect, they ask for updates to subscribed feeds</p></li>
<li><p>Metafeeds can provide metadata about other feeds, and can form a tree structure with other Metafeeds as subfeeds.</p>
<ul>
<li><p><span class="target" id="index-1"></span>Bencoded rather than JSON.</p></li>
</ul>
</li>
</ul>
<div class="mermaid">
flowchart LR
subgraph Main [Main Feed]
mf[&quot;`Main Feed Posts
*metafeed/announce*
message`&quot;]
end
subgraph Meta [Meta feed]
direction TB
mf1[&quot;`Metafeed posts
*metafeed/add/existing
message`&quot;]
mf2[&quot;`Metafeed posts
*metafeed/add/existing
message`&quot;]
mf3[&quot;`Metafeed posts
*metafeed/add/derived
message`&quot;]
mf4[&quot;`Metafeed posts
*metafeed/add/existing
message`&quot;]
mf1 --&gt; mf2
mf2 --&gt; mf3
mf3 --&gt; mf4
end
subgraph SubfeedA [Subfeed A]
direction LR
sfa1[&quot;`Application specific
message in subfeed`&quot;]
sfa2[&quot;`Application specific
message in subfeed`&quot;]
sfa1 --&gt; sfa2
end
subgraph SubfeedB [Subfeed B]
direction LR
sfb1[&quot;`Application specific
message in subfeed`&quot;]
sfb2[&quot;`Application specific
message in subfeed`&quot;]
sfb1 --&gt; sfb2
end
subgraph SubfeedC [Subfeed C]
direction LR
sfc1[&quot;`Application specific
message in subfeed`&quot;]
sfc2[&quot;`Application specific
message in subfeed`&quot;]
sfc1 --&gt; sfc2
end
subgraph SubfeedD [Subfeed D]
direction LR
sfd1[&quot;`Application specific
message in subfeed`&quot;]
sfd2[&quot;`Application specific
message in subfeed`&quot;]
sfd1 --&gt; sfd2
end
Main --&gt; Meta
Meta --&gt; SubfeedA
Meta --&gt; SubfeedB
Meta --&gt; SubfeedC
Meta --&gt; SubfeedD
</div><p>Uses for metafeeds</p>
<ul class="simple">
<li><p>Storing multiple network identities with a special feed off the users root metafeed. (contents of metafeed entries can be encrypted)</p></li>
<li><p>Allow for multiple devices to use the same identity - <a class="reference external" href="https://github.com/ssbc/fusion-identity-spec">https://github.com/ssbc/fusion-identity-spec</a></p>
<ul>
<li><p>Device A <code class="docutils literal notranslate"><span class="pre">invite</span></code>s Device B to identity</p></li>
<li><p>Device B <code class="docutils literal notranslate"><span class="pre">consent</span></code>s</p></li>
<li><p>Device A <code class="docutils literal notranslate"><span class="pre">entrust</span></code>s phone with private key</p></li>
<li><p>Device B posts a <code class="docutils literal notranslate"><span class="pre">proof-of-key</span></code> message</p></li>
<li><p>If device B lost, <code class="docutils literal notranslate"><span class="pre">tombstone</span></code> the fusion identity message</p></li>
</ul>
</li>
</ul>
</section>
<section id="references">
<h2>References<a class="headerlink" href="#references" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://ssbc.github.io/scuttlebutt-protocol-guide/">https://ssbc.github.io/scuttlebutt-protocol-guide/</a></p></li>
</ul>
</section>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="matrix.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Matrix</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="activitypub.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">ActivityPub</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
Copyright &#169; 2023, Jonny Saunders
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Secure Scuttlebutt</a><ul>
<li><a class="reference internal" href="#feeds-metafeeds">Feeds &amp; Metafeeds</a></li>
<li><a class="reference internal" href="#references">References</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/scripts/furo.js"></script>
<script src="https://unpkg.com/mermaid@10.2.0/dist/mermaid.min.js"></script>
<script>
mermaid.initialize({
"startOnLoad":true,
"theme": "base",
"themeVariables": {
"darkMode": true,
"primaryColor": "#202020",
"primaryBorderColor": "#00A5CF",
"primaryTextColor": "#FFFFFF",
"secondaryColor": "#ffffff",
"mainBkg": "#30303000",
"lineColor": "#999999"
}
})
</script>
</body>
</html>