<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>EchoMix</title><link>https://echomix.org/</link><description>Recent content on EchoMix</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://echomix.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Contact Voucher Protocol Narration</title><link>https://echomix.org/docs/specs/contact_voucher_narration/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/specs/contact_voucher_narration/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;a href="../contact_voucher/"&gt;voucher spec&lt;/a&gt; was very difficult for me to read and it overloads variable names and doesn&amp;rsquo;t make certain facts explicit enough. I wrote this spec for my own understanding of the design as an implementation guide for myself.&lt;/p&gt;
&lt;h2 id="streams"&gt;Streams&lt;/h2&gt;
&lt;p&gt;There is no separate reply stream. Alice replies on the very same stream Bob used to mint the voucher.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MessageStream&lt;/strong&gt;: Bob writes; the group reads. This is the stream whose live messages the protocol must protect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VoucherStream&lt;/strong&gt;: the rendezvous, derived entirely from the &lt;code&gt;Voucher&lt;/code&gt;. Box 0 holds Bob&amp;rsquo;s &lt;code&gt;VoucherPayload&lt;/code&gt;; box 1 holds Alice&amp;rsquo;s &lt;code&gt;VoucherReply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the group&amp;rsquo;s other streams&lt;/strong&gt;: each existing member has their own MessageStream, just like Bob&amp;rsquo;s.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stream-objects"&gt;Stream Objects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MessageStream&lt;/strong&gt;: &lt;code&gt;.WriteCap&lt;/code&gt; (Bob keeps), &lt;code&gt;.ReadCap&lt;/code&gt; (travels in &lt;code&gt;VoucherPayload&lt;/code&gt;, inside &lt;code&gt;SignedPleaseAdd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VoucherStream&lt;/strong&gt;: read and write caps derivable by anyone holding the &lt;code&gt;Voucher&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VoucherKeypair&lt;/strong&gt;: &lt;code&gt;VoucherSecretKey&lt;/code&gt; (Bob keeps), &lt;code&gt;VoucherPublicKey&lt;/code&gt; (travels in &lt;code&gt;VoucherPayload&lt;/code&gt;). This is the MKEM keypair under which Alice seals the reply to Bob.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="messages"&gt;Messages&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SignedPleaseAdd&lt;/code&gt; is Bob&amp;rsquo;s signed self-introduction: a serialized &lt;code&gt;PleaseAdd&lt;/code&gt; (his &lt;code&gt;DisplayName&lt;/code&gt; and &lt;code&gt;MessageStream.ReadCap&lt;/code&gt;) plus a signature over it produced by &lt;code&gt;MessageStream.WriteCap&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// PleaseAdd is a member&amp;#39;s request to join, carrying their display name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// and the read cap that lets others read their messages.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PleaseAdd&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// DisplayName is the party&amp;#39;s name to be displayed in chat clients.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;DisplayName&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// UniversalReadCap is the BACAP read cap for this member&amp;#39;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// MessageStream, letting others read all messages posted by them.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;UniversalReadCap&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;bacap&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;UniversalReadCap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// SignedPleaseAdd binds a PleaseAdd to a signature made by the member&amp;#39;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// write cap, so any party can verify the name-and-cap binding.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;SignedPleaseAdd&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// PleaseAdd contains the CBOR serialized PleaseAdd struct.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;PleaseAdd&lt;/span&gt; []&lt;span style="color:#66d9ef"&gt;byte&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Signature contains the cryptographic signature over the PleaseAdd field.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;Signature&lt;/span&gt; []&lt;span style="color:#66d9ef"&gt;byte&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WhoReply&lt;/code&gt; := the existing members&amp;rsquo; MessageStream read caps (one or more), so Bob can read everyone already in the group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VoucherReply&lt;/code&gt; := &lt;code&gt;WhoReply || VoucherSalt&lt;/code&gt;, MKEM-sealed to &lt;code&gt;VoucherPublicKey&lt;/code&gt; and written to VoucherStream box 1. Box 1 is an ordinary BACAP box, so the payload is BACAP-encrypted as a stream box and then additionally MKEM-encrypted to Bob&amp;rsquo;s &lt;code&gt;VoucherPublicKey&lt;/code&gt;; only Bob, holding &lt;code&gt;VoucherSecretKey&lt;/code&gt;, can open it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Introduction&lt;/code&gt; := Bob&amp;rsquo;s display name together with his salt-mutated MessageStream read cap, published to the existing group so the members can read Bob. The group receives the mutated cap directly and never the salt.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;VoucherPayload := SignedPleaseAdd || VoucherPublicKey
Voucher := Hash(VoucherPayload)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="the-vouchersalt-re-seeding-the-messagestream"&gt;The VoucherSalt: re-seeding the MessageStream&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VoucherSalt&lt;/code&gt; is the heart of the protocol. It is &lt;strong&gt;not&lt;/strong&gt; a nonce and it does &lt;strong&gt;not&lt;/strong&gt; modify BACAP. It is a value that &lt;strong&gt;replaces the KDF state&lt;/strong&gt; inside a MessageStream&amp;rsquo;s &lt;code&gt;MessageBoxIndex&lt;/code&gt;, which re-seeds the index chain and so moves the stream to a fresh, unpredictable sequence of box IDs. Only two parties ever touch it. Bob mutates his &lt;code&gt;MessageStream.WriteCap&lt;/code&gt; by the salt and writes his real messages at the mutated position. Alice mutates Bob&amp;rsquo;s matching &lt;code&gt;MessageStream.ReadCap&lt;/code&gt; by the same salt &lt;strong&gt;once&lt;/strong&gt;, before she shares it, so writer and readers meet at the mutated position. The group never learns the salt; it only ever receives the already-mutated read cap.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/clients/client-user-guide.html</link><pubDate>Mon, 18 May 2026 09:33:21 -0700</pubDate><guid>https://echomix.org/docs/clients/client-user-guide.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;KatzenQT chat client guide [Pre-release]&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="section"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h2 class="title" style="clear: both"&gt;&lt;a name="client_guide"&gt;&lt;/a&gt;KatzenQT chat client guide [Pre-release]&lt;/h2&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;p&gt;This guide introduces the KatzenQT chat client. With KatzenQT you can securely
 share one-to-one and group messages with other KatzenQT users. KatzenQT relies on
 Katzenpost, an advanced mixnet system designed for people who have something to say,
 but
 who also value their anonymity. Anonymity is not the same thing as encryption, which
 protects the &lt;span class="emphasis"&gt;&lt;em&gt;content&lt;/em&gt;&lt;/span&gt; of communication over the Internet. Anonymity is
 about protecting &lt;span class="emphasis"&gt;&lt;em&gt;people&lt;/em&gt;&lt;/span&gt;. &lt;/p&gt;</description></item><item><title>Wire protocol</title><link>https://echomix.org/docs/specs/wire_protocol/</link><pubDate>Mon, 11 May 2026 21:25:36 -0700</pubDate><guid>https://echomix.org/docs/specs/wire_protocol/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="katzenpost-mix-network-wire-protocol"&gt;&lt;span id="wire_protocol"&gt;&lt;/span&gt;Katzenpost mix network wire protocol&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="yawning-angel"&gt;&lt;span class="firstname"&gt;Yawning&lt;/span&gt; &lt;span class="surname"&gt;Angel&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This document defines the Katzenpost Mix Network Wire Protocol for use in all
network communications to, from, and within the Katzenpost Mix Network.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#conventions-used-in-this-document"&gt;1.1 Conventions Used in This Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#wire_protocol_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#key-encapsulation-mechanism"&gt;1.2 Key Encapsulation Mechanism&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#core-protocol"&gt;2. Core Protocol&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#handshake-phase"&gt;2.1 Handshake Phase&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#handshake-authentication"&gt;2.1.1 Handshake Authentication&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#data-transfer-phase"&gt;2.2 Data Transfer Phase&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#predefined-commands"&gt;3. Predefined Commands&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#the-no_op-command"&gt;3.1 The no_op Command&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#the-disconnect-command"&gt;3.2 The disconnect Command&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Sphinx cryptographic packet format</title><link>https://echomix.org/docs/specs/sphinx_format/</link><pubDate>Mon, 11 May 2026 21:24:41 -0700</pubDate><guid>https://echomix.org/docs/specs/sphinx_format/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="sphinx-cryptographic-packet-format"&gt;&lt;span id="sphinx"&gt;&lt;/span&gt;Sphinx cryptographic packet format&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="yawning-angel"&gt;&lt;span class="firstname"&gt;Yawning&lt;/span&gt; &lt;span class="surname"&gt;Angel&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="george-danezis"&gt;&lt;span class="firstname"&gt;George&lt;/span&gt; &lt;span class="surname"&gt;Danezis&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="claudia-diaz"&gt;&lt;span class="firstname"&gt;Claudia&lt;/span&gt; &lt;span class="surname"&gt;Diaz&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="ania-piotrowska"&gt;&lt;span class="firstname"&gt;Ania&lt;/span&gt; &lt;span class="surname"&gt;Piotrowska&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This document defines the Sphinx cryptographic packet format for decryption mix
networks, and provides a parameterization based around generic cryptographic
primitives types. This document does not introduce any new crypto, but is meant to
serve as an implementation guide.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#terminology"&gt;Terminology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#conventions-used-in-this-document"&gt;Conventions Used in This
Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#cryptographic-primitives"&gt;2. Cryptographic Primitives&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-key-derivation-function"&gt;2.1 Sphinx Key Derivation Function&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-packet-parameters"&gt;3. Sphinx Packet Parameters&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Sphinx packet replay detection</title><link>https://echomix.org/docs/specs/packet_replay/</link><pubDate>Mon, 11 May 2026 21:23:36 -0700</pubDate><guid>https://echomix.org/docs/specs/packet_replay/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="sphinx-packet-replay-detection"&gt;&lt;span id="replay"&gt;&lt;/span&gt;Sphinx packet replay detection&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This document defines the replay detection for any protocol that uses Sphinx
cryptographic packet format. This document is meant to serve as an implementation
guide and document the existing replay protect for deployed mix networks.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#terminology"&gt;Terminology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e95"&gt;Conventions Used in This Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx_replay_detection_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-cryptographic-primitives"&gt;2. Sphinx Cryptographic Primitives&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-parameter-constants"&gt;2.1 Sphinx Parameter Constants&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#system-overview"&gt;3. System Overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-packet-replay-cache"&gt;4. Sphinx Packet Replay Cache&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-replay-tag-composition"&gt;4.1 Sphinx Replay Tag Composition&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Public key infrastructure</title><link>https://echomix.org/docs/specs/pki/</link><pubDate>Mon, 11 May 2026 21:21:55 -0700</pubDate><guid>https://echomix.org/docs/specs/pki/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="public-key-infrastructure"&gt;&lt;span id="pki"&gt;&lt;/span&gt;Public key infrastructure&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="yawning-angel"&gt;&lt;span class="firstname"&gt;Yawning&lt;/span&gt; &lt;span class="surname"&gt;Angel&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="claudia-diaz"&gt;&lt;span class="firstname"&gt;Claudia&lt;/span&gt; &lt;span class="surname"&gt;Diaz&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="ania-piotrowska"&gt;&lt;span class="firstname"&gt;Ania&lt;/span&gt; &lt;span class="surname"&gt;Piotrowska&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="masala"&gt;&lt;span class="firstname"&gt;&lt;/span&gt; &lt;span class="surname"&gt;Masala&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#terminology"&gt;Terminology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#conventions-used-in-this-document"&gt;Conventions used in this document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#pki_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#security-properties-overview"&gt;1.2 Security properties overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#differences-from-tor-and-mixminion-directory-authority-systems"&gt;1.3 Differences from Tor and Mixminion directory authority systems&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#overview-of-mix-pki-interaction"&gt;2. Overview of mix PKI interaction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#pki-protocol-schedule"&gt;2.1 PKI protocol schedule&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#directory-authority-server-schedule"&gt;2.1.1 Directory authority server schedule&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#mix-schedule"&gt;2.1.2 Mix schedule&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#voting-for-consensus-protocol"&gt;3. Voting for consensus protocol&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#protocol-messages"&gt;3.1 Protocol messages&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#mix-descriptor-and-directory-signing"&gt;3.1.1 Mix descriptor and directory signing&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#vote-exchange"&gt;3.2 Vote exchange&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#reveal-exchange"&gt;3.3 Reveal exchange&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Mix network design</title><link>https://echomix.org/docs/specs/mix_network/</link><pubDate>Mon, 11 May 2026 21:21:06 -0700</pubDate><guid>https://echomix.org/docs/specs/mix_network/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="mix-network-specification"&gt;&lt;span id="mixspec"&gt;&lt;/span&gt;Mix network specification&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="yawning-angel"&gt;&lt;span class="firstname"&gt;Yawning&lt;/span&gt; &lt;span class="surname"&gt;Angel&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="george-danezis"&gt;&lt;span class="firstname"&gt;George&lt;/span&gt; &lt;span class="surname"&gt;Danezis&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="claudia-diaz"&gt;&lt;span class="firstname"&gt;Claudia&lt;/span&gt; &lt;span class="surname"&gt;Diaz&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="ania-piotrowska"&gt;&lt;span class="firstname"&gt;Ania&lt;/span&gt; &lt;span class="surname"&gt;Piotrowska&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This document describes the high level architecture and detailed protocols and
behavior required of mix nodes participating in the Katzenpost Mix Network.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#terminology"&gt;Terminology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e162"&gt;Conventions Used in This Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#mixnet_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#system-overview"&gt;2. System Overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#threat-model"&gt;2.1 Threat Model&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#network-topology"&gt;2.2 Network Topology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#packet-format-overview"&gt;3. Packet Format Overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-cryptographic-primitives"&gt;3.1 Sphinx Cryptographic
Primitives&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-packet-parameters"&gt;3.2 Sphinx Packet Parameters&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#sphinx-per-hop-routing-information-extensions"&gt;3.3 Sphinx Per-hop
Routing Information Extensions&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#mix-node-operation"&gt;4. Mix Node Operation&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Mix decoy loop</title><link>https://echomix.org/docs/specs/mix_decoy/</link><pubDate>Mon, 11 May 2026 21:19:15 -0700</pubDate><guid>https://echomix.org/docs/specs/mix_decoy/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="propagation-of-mix-decoy-loop-statistics"&gt;&lt;span id="decoy"&gt;&lt;/span&gt;Propagation of mix decoy loop statistics&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="eva-infeld"&gt;&lt;span class="firstname"&gt;Eva&lt;/span&gt; &lt;span class="surname"&gt;Infeld&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="leif-ryge"&gt;&lt;span class="firstname"&gt;Leif&lt;/span&gt; &lt;span class="surname"&gt;Ryge&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the context of continuous time mixing strategies such as the memoryless mix
used by Katzenpost, n-1 attacks may use strategic packetloss. Nodes can also fail
for benign reasons. Determining whether or not it’s an n-1 attack is outside the
scope of this work.&lt;/p&gt;
&lt;p&gt;This document describes how we will communicate statistics from mix nodes to mix
network directory authorities which tells them about the packetloss they are
observing.&lt;/p&gt;</description></item><item><title>KEMSphinx</title><link>https://echomix.org/docs/specs/kemsphinx/</link><pubDate>Mon, 11 May 2026 21:18:18 -0700</pubDate><guid>https://echomix.org/docs/specs/kemsphinx/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="kemsphinx"&gt;&lt;span id="kemsphinx"&gt;&lt;/span&gt;KEMSphinx&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here I present a modification of the Sphinx cryptographic packet format that uses
a KEM instead of a NIKE whilst preserving the properties of bitwise unlinkability,
constant packet size and route length hiding.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#kemsphinx_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#post-quantum-hybrid-kem"&gt;2. Post Quantum Hybrid KEM&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#nike-to-kem-adapter"&gt;2.1 NIKE to KEM adapter&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#kem-combiner"&gt;2.2 KEM Combiner&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#kemsphinx-header-design"&gt;3. KEMSphinx Header Design&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#kemsphinx-unwrap-operation"&gt;4. KEMSphinx Unwrap Operation&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#acknowledgments"&gt;Acknowledgments&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#appendix-a.-references"&gt;References&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="1-introduction"&gt;&lt;span id="kemsphinx_introduction"&gt;&lt;/span&gt;1. Introduction&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We’ll express our KEM Sphinx header in pseudo code. The Sphinx body will be exactly
the same as &lt;a href="#SPHINXSPEC" class="xref"&gt;the section called “References”&lt;/a&gt; Our basic KEM API has three functions:&lt;/p&gt;</description></item><item><title>Contact Voucher Design</title><link>https://echomix.org/docs/specs/contact_voucher/</link><pubDate>Mon, 11 May 2026 21:16:30 -0700</pubDate><guid>https://echomix.org/docs/specs/contact_voucher/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="contact-voucher-design"&gt;&lt;span id="voucher"&gt;&lt;/span&gt;Contact Voucher Design&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="threebit-hacker"&gt;&lt;span class="firstname"&gt;Threebit&lt;/span&gt; &lt;span class="surname"&gt;Hacker&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="leif-ryge"&gt;&lt;span class="firstname"&gt;Leif&lt;/span&gt; &lt;span class="surname"&gt;Ryge&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e43"&gt;Voucher Design&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e76"&gt;Self-authenticating BACAP payload&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="voucher-design"&gt;&lt;span id="d58e43"&gt;&lt;/span&gt;Voucher Design&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In order to join or initiate a conversation, participants need to
exchange cryptographic key material. To address this problem we have
a slightly unusual design: Contact vouchers.&lt;/p&gt;
&lt;p&gt;In many systems, invites to conversations flow from an existing
member of the conversation to the user being invited. In our
&amp;ldquo;Contact Voucher&amp;rdquo; protocol this flow is reversed: A member
wishing to join a conversation hands a &amp;ldquo;Contact Voucher&amp;rdquo;
(out of band) to the existing member, who then inducts the new
member into the group.&lt;/p&gt;</description></item><item><title>Certificate format</title><link>https://echomix.org/docs/specs/certificate_format/</link><pubDate>Mon, 11 May 2026 21:14:56 -0700</pubDate><guid>https://echomix.org/docs/specs/certificate_format/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="certificate-format"&gt;&lt;span id="certificate"&gt;&lt;/span&gt;Certificate format&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This document proposes a certificate format that Katzenpost mix server, directory
authority server and clients will use.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#terminology"&gt;Terminology&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#conventions-used-in-this-document"&gt;Conventions Used in This Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#certificate_introduction"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#document-format"&gt;1.1. Document Format&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#certificate-types"&gt;1.2 Certificate Types&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#certificate-key-types"&gt;1.3. Certificate Key Types&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#golang-api"&gt;2. Golang API&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#acknowledgments"&gt;Acknowledgments&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#appendix-a.-references"&gt;References&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="terminology"&gt;&lt;span id="terminology"&gt;&lt;/span&gt;Terminology&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The following terms are used in this specification.&lt;/p&gt;
&lt;div class="variablelist"&gt;
&lt;p&gt;&lt;span class="term"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="conventions-used-in-this-document"&gt;&lt;span id="conventions-used-in-this-document"&gt;&lt;/span&gt;Conventions Used in This Document&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The key words &lt;span class="quote"&gt;“&lt;span class="quote"&gt;MUST&lt;/span&gt;”&lt;/span&gt;, &lt;span class="quote"&gt;“&lt;span class="quote"&gt;MUST NOT&lt;/span&gt;”&lt;/span&gt;,
&lt;span class="quote"&gt;“&lt;span class="quote"&gt;REQUIRED&lt;/span&gt;”&lt;/span&gt;, &lt;span class="quote"&gt;“&lt;span class="quote"&gt;SHALL&lt;/span&gt;”&lt;/span&gt;, &lt;span class="quote"&gt;“&lt;span class="quote"&gt;SHALL NOT&lt;/span&gt;”&lt;/span&gt;,
&lt;span class="quote"&gt;“&lt;span class="quote"&gt;SHOULD&lt;/span&gt;”&lt;/span&gt;, &lt;span class="quote"&gt;“&lt;span class="quote"&gt;SHOULD NOT&lt;/span&gt;”&lt;/span&gt;, &lt;span class="quote"&gt;“&lt;span class="quote"&gt;RECOMMENDED&lt;/span&gt;”&lt;/span&gt;,
&lt;span class="quote"&gt;“&lt;span class="quote"&gt;MAY&lt;/span&gt;”&lt;/span&gt;, and &lt;span class="quote"&gt;“&lt;span class="quote"&gt;OPTIONAL&lt;/span&gt;”&lt;/span&gt; in this document are to be
interpreted as described in &lt;a href="#RFC2119" class="link"&gt;RFC2119&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Provider-side autoresponder extension</title><link>https://echomix.org/docs/specs/autoresponder/</link><pubDate>Mon, 11 May 2026 21:09:52 -0700</pubDate><guid>https://echomix.org/docs/specs/autoresponder/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="provider-side-autoresponder-extension-kaetzchen"&gt;&lt;span id="autoresponder"&gt;&lt;/span&gt;Provider-side autoresponder extension (Kaetzchen)&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="yawning-angel"&gt;&lt;span class="firstname"&gt;Yawning&lt;/span&gt; &lt;span class="surname"&gt;Angel&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="kali-kaneko"&gt;&lt;span class="firstname"&gt;Kali&lt;/span&gt; &lt;span class="surname"&gt;Kaneko&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="abstract"&gt;
&lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This interface is meant to provide support for various autoresponder agents
&lt;span class="quote"&gt;“&lt;span class="quote"&gt;Kaetzchen&lt;/span&gt;”&lt;/span&gt; that run on Katzenpost provider instances, thus
bypassing the need to run a discrete client instance to provide functionality. The
use-cases for such agents include, but are not limited to, user identity key lookup,
a discard address, and a loop-back responder for the purpose of cover
traffic.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e50"&gt;Conventions Used in This Document&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/quickstart.html</link><pubDate>Wed, 05 Mar 2025 16:03:14 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/quickstart.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;Quickstart guide&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="quickstart"&gt;&lt;/a&gt;Quickstart guide&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e33"&gt;Systemd commands&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e94"&gt;Server CLI commands&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e174"&gt;Management interface&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e257"&gt;Monitoring&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;This topic provides collects basic commands for installed Katzenpost server components
 in a single convenient place. All system commands require superuser privileges.&lt;/p&gt;
 &lt;p&gt;The commands in this topic do not apply to the Katzenpost Docker image, which has
 its
 own controls. For more information, see &lt;a class="link" href="https://katzenpost.network/docs/admin_guide/docker.html" target="_top"&gt;Using the
 Katzenpost Docker test network&lt;/a&gt;.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/install.html</link><pubDate>Wed, 05 Mar 2025 16:03:38 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/install.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;Installing Katzenpost&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="installation"&gt;&lt;/a&gt;Installing Katzenpost&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#install-requirements"&gt;Requirements&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dd&gt;
 &lt;dl&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#clone"&gt;Obtain the Katzenpost code&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#install_go"&gt;Install the latest Go version&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#build-server-components"&gt;Build server components&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#build-clients"&gt;Build clients&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e205"&gt;Install the server components&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#service-accounts"&gt;Create service accounts&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#configure"&gt;Create configuration files&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#systemd"&gt;Configure systemd&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#generate-keys"&gt;Generate keys&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;The section provides an overview of how to download Katzenpost, set up a development
 environment, build the code, install the Katzenpost binaries, and configure the
 components. &lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/docker.html</link><pubDate>Wed, 05 Mar 2025 16:03:43 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/docker.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;Using the Katzenpost Docker test network&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="container"&gt;&lt;/a&gt;Using the Katzenpost Docker test network&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#requirements"&gt;Requirements&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#install_kp"&gt;Preparing to run the container image&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#basic-ops"&gt;Operating the test mixnet&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dd&gt;
 &lt;dl&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#start-mixnet"&gt;Starting and monitoring the mixnet&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#test-mixnet"&gt;Testing the mixnet&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#shutdown-mixnet"&gt;Shutting down the mixnet&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#uninstall-mixnet"&gt;Uninstalling and cleaning up&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#topology"&gt;Network topology and components&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dd&gt;
 &lt;dl&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e584"&gt;The Docker file tree&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;Katzenpost provides a ready-to-deploy Docker
 image for developers who need a non-production test environment for developing
 and testing client applications and server side plugins. By running this image on
 a single computer, you avoid the
 need to build and manage a complex multi-node mix net. The image can also be run using
 &lt;a class="link" href="https://podman.io/" target="_top"&gt;Podman&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/components.html</link><pubDate>Wed, 05 Mar 2025 16:03:29 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/components.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;Components and configuration of the Katzenpost mixnet&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="components"&gt;&lt;/a&gt;Components and configuration of the Katzenpost mixnet&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#overview"&gt;Understanding the Katzenpost components&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dd&gt;
 &lt;dl&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#intro-dirauth"&gt;Directory authorities (dirauths)&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#intro-mix"&gt;Mix nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#intro-gateway"&gt;Gateway nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#intro-service"&gt;Service nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#intro-client"&gt;Clients&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#configuration"&gt;Configuring Katzenpost&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dd&gt;
 &lt;dl&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#auth-config"&gt;Configuring directory authorities&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#mix-config"&gt;Configuring mix nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#gateway-config"&gt;Configuring gateway nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#service-config"&gt;Configuring service nodes&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/dd&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;This section of the Katzenpost technical documentation provides an introduction to
 the
 software components that make up Katzenpost and guidance on how to configure each
 component. The intended reader is a system administrator who wants to implement a
 working,
 production Katzenpost network.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/nat.html</link><pubDate>Wed, 05 Mar 2025 16:03:50 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/nat.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;NAT considerations for Katzenpost servers&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="nat"&gt;&lt;/a&gt;NAT considerations for Katzenpost servers&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e57"&gt;&lt;em class="parameter"&gt;&lt;code&gt;Addresses&lt;/code&gt;&lt;/em&gt; and &lt;em class="parameter"&gt;&lt;code&gt;BindAddresses&lt;/code&gt;&lt;/em&gt;&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#d58e136"&gt;Hosting mix, gateway, and service nodes behind NAT&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#dirauth-nat"&gt;Hosting a directory authority behind NAT&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;Any Katzenpost server node can be configured to run behind a properly configured
 router that supports &lt;a class="link" href="https://www.rfc-editor.org/rfc/rfc1918" target="_top"&gt;network
 address translation&lt;/a&gt; (NAT) and similar network topologies that traverse public and
 private network boundaries. This applies to directory authorities, gateways that allow
 clients to connect to the network, mix nodes, and service nodes that provide protocols
 over
 the mix network such as ping and spool services for storing messages or rendezvous
 information.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/admin_guide/docker-config-appendix.html</link><pubDate>Wed, 05 Mar 2025 16:03:25 -0800</pubDate><guid>https://echomix.org/docs/admin_guide/docker-config-appendix.html</guid><description>&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:ng="http://docbook.org/docbook-ng"&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;title&gt;Appendix: Configuration files from the Docker test mixnet&lt;/title&gt;
 &lt;meta name="generator" content="DocBook XSL Stylesheets V1.79.2"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="article"&gt;
 &lt;div class="titlepage"&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;h1 class="title"&gt;&lt;a name="docker-config"&gt;&lt;/a&gt;Appendix: Configuration files from the Docker test
 mixnet&lt;/h1&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;hr&gt;
 &lt;/div&gt;
 &lt;div class="toc"&gt;
 &lt;p&gt;&lt;b&gt;Table of Contents&lt;/b&gt;&lt;/p&gt;
 &lt;dl class="toc"&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#dirauth-config"&gt;Directory authority&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#mix-node-config"&gt;Mix node&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#gateway-node-config"&gt;Gateway node&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;dt&gt;&lt;span class="section"&gt;&lt;a href="#service-node-config"&gt;Service node&lt;/a&gt;&lt;/span&gt;&lt;/dt&gt;
 &lt;/dl&gt;
 &lt;/div&gt;
 &lt;p&gt;As an aid to administrators implementing a Katzenpost mixnet, this appendix provides
 lightly edited examples of configuration files for each Katzenpost node type. These
 files are drawn from a built instance of the &lt;a class="link" href="https://katzenpost.network/docs/admin_guide/docker.html" target="_top"&gt;Docker test
 mixnet&lt;/a&gt;. These code listings are meant to be used as a reference alongside the
 detailed configuration documentation in &lt;a class="link" href="https://katzenpost.network/docs/admin_guide/components.html" target="_top"&gt;Components and configuration of the Katzenpost mixnet&lt;/a&gt;. You cannot use these
 listings as a drop-in solution in your own mixnets for reasons explained in the &lt;a class="link" href="https://katzenpost.network/docs/admin_guide/docker.html#topology" target="_top"&gt;Network topology and components&lt;/a&gt; section of the Docker test mixnet documentation.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://echomix.org/docs/specs/glossary/</link><pubDate>Mon, 11 May 2026 21:17:28 -0700</pubDate><guid>https://echomix.org/docs/specs/glossary/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="glossary"&gt;&lt;span id="glossary"&gt;&lt;/span&gt;Glossary&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="variablelist"&gt;
&lt;p&gt;&lt;span class="term"&gt;&lt;span class="bold"&gt;&lt;strong&gt;BlockSphinxPlaintext&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
The payload structure which is encapsulated by the Sphinx body.&lt;/p&gt;
&lt;p&gt;&lt;span class="term"&gt;&lt;span class="bold"&gt;&lt;strong&gt;classes of traffic&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
We distinguish the following classes of traffic:&lt;/p&gt;
&lt;div class="itemizedlist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SURB Replies (also sometimes referred to as ACKs)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Forward messages&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span class="term"&gt;&lt;span class="bold"&gt;&lt;strong&gt;client&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
Software run by the User on its local device to participate in the Mixnet.
Again let us reiterate that a client is not considered a &amp;ldquo;node in the
network&amp;rdquo; at the level of analysis where we are discussing the core mixnet
protocol in this here document.&lt;/p&gt;</description></item><item><title>References</title><link>https://echomix.org/docs/specs/references/</link><pubDate>Mon, 11 May 2026 21:22:38 -0700</pubDate><guid>https://echomix.org/docs/specs/references/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="references"&gt;&lt;span id="references"&gt;&lt;/span&gt;References&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span id="AB96"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;AB96&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Anderson, R., Biham, E., &lt;span class="quote"&gt;“&lt;span class="quote"&gt;Two Practical and Provably Secure Block Ciphers: BEAR and LION&lt;/span&gt;”&lt;/span&gt;, 1996.&lt;/p&gt;
&lt;p&gt;&lt;span id="AEZV5"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;AEZV5&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hoang, V., Krovetz, T., Rogaway, P., &lt;span class="quote"&gt;“&lt;span class="quote"&gt;AEZ v5: Authenticated Encryption by Enciphering&lt;/span&gt;”&lt;/span&gt;, March 2017,
&lt;a href="http://web.cs.ucdavis.edu/~rogaway/aez/aez.pdf" class="link" target="_top"&gt;&lt;a href="http://web.cs.ucdavis.edu/~rogaway/aez/aez.pdf"&gt;http://web.cs.ucdavis.edu/~rogaway/aez/aez.pdf&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id="BRIDGING"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;BRIDGING&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Danezis, G., Syverson, P., &lt;span class="quote"&gt;“&lt;span class="quote"&gt;Bridging and Fingerprinting: Epistemic Attacks
on Route Selection&lt;/span&gt;”&lt;/span&gt;, Proceedings of PETS 2008, Leuven, Belgium,
July 2008, &lt;a href="https://www.freehaven.net/anonbib/cache/danezis-pet2008.pdf" class="link" target="_top"&gt;&lt;a href="https://www.freehaven.net/anonbib/cache/danezis-pet2008.pdf"&gt;https://www.freehaven.net/anonbib/cache/danezis-pet2008.pdf&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id="COMPULS05"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;COMPULS05&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Danezis, G., Clulow, J., &lt;span class="quote"&gt;“&lt;span class="quote"&gt;Compulsion Resistant Anonymous Communications&lt;/span&gt;”&lt;/span&gt;,
Proceedings of Information Hiding Workshop, June 2005,
&lt;a href="https://www.freehaven.net/anonbib/cache/ih05-danezisclulow.pdf" class="link" target="_top"&gt;&lt;a href="https://www.freehaven.net/anonbib/cache/ih05-danezisclulow.pdf"&gt;https://www.freehaven.net/anonbib/cache/ih05-danezisclulow.pdf&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id="ED25519"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;ED25519&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8032" class="link" target="_top"&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8032"&gt;https://www.rfc-editor.org/rfc/rfc8032&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span id="FINGERPRINTING"&gt;&lt;/span&gt;&lt;span class="bold"&gt;&lt;strong&gt;FINGERPRINTING&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Danezis, G., Clayton, R., &lt;span class="quote"&gt;“&lt;span class="quote"&gt;Route Finger printing in Anonymous
Communications&lt;/span&gt;”&lt;/span&gt;,
&lt;a href="https://www.cl.cam.ac.uk/~rnc1/anonroute.pdf" class="link" target="_top"&gt;&lt;a href="https://www.cl.cam.ac.uk/~rnc1/anonroute.pdf"&gt;https://www.cl.cam.ac.uk/~rnc1/anonroute.pdf&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Build Katzenpost from source</title><link>https://echomix.org/docs/build_from_source/</link><pubDate>Mon, 11 May 2026 21:31:32 -0700</pubDate><guid>https://echomix.org/docs/build_from_source/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="build-katzenpost-from-source"&gt;&lt;span id="building"&gt;&lt;/span&gt;Build Katzenpost from source&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#pinned-versions"&gt;Pinned versions&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#kpclientd-the-client-daemon"&gt;kpclientd (the client daemon)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#go-thin-client"&gt;Go thin client&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#rust-thin-client"&gt;Rust thin client&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#python-thin-client"&gt;Python thin client&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#katzenqt-qt-group-chat-client"&gt;katzenqt (Qt group chat client)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#verifying-the-stack"&gt;Verifying the stack&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This page is the canonical reference for the
&lt;span class="strong"&gt;&lt;strong&gt;pinned versions&lt;/strong&gt;&lt;/span&gt; of the Katzenpost
stack, together with brief instructions for building and running
each component from source. It is intended for anyone who wishes to
run the software ahead of binary packages becoming available.&lt;/p&gt;</description></item><item><title>Group chat</title><link>https://echomix.org/docs/specs/group_chat/</link><pubDate>Mon, 11 May 2026 09:45:35 -0700</pubDate><guid>https://echomix.org/docs/specs/group_chat/</guid><description>&lt;div class="article"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h1 id="katzenpost-group-chat-design"&gt;&lt;span id="group_chat"&gt;&lt;/span&gt;Katzenpost Group Chat Design&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="authorgroup"&gt;
&lt;div class="author"&gt;
&lt;h3 id="threebit-hacker"&gt;&lt;span class="firstname"&gt;Threebit&lt;/span&gt; &lt;span class="surname"&gt;Hacker&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="author"&gt;
&lt;h3 id="david-stainton"&gt;&lt;span class="firstname"&gt;David&lt;/span&gt; &lt;span class="surname"&gt;Stainton&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div class="toc"&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e44"&gt;Prerequisites&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e64"&gt;Introduction&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e102"&gt;Group Chat Message Types&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e165"&gt;Protocol Flow&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="section"&gt;&lt;a href="#d58e239"&gt;Addenda&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="prerequisites"&gt;&lt;span id="d58e44"&gt;&lt;/span&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This design specification is dependent on the BACAP and Pigeonhole protocol designs
from
our paper &lt;a href="https://arxiv.org/abs/2501.02933" class="link" target="_top"&gt;Echomix: A Strong Anonymity
System with Messaging&lt;/a&gt;, which describes&lt;/p&gt;
&lt;div class="itemizedlist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the BACAP (blinded and capability) in section 4 and&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the Pigeonhole protocol in section 5.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/katzenpost/hpqc/blob/main/bacap/bacap.go" class="link" target="_top"&gt;source
code&lt;/a&gt; and &lt;a href="https://github.com/katzenpost/hpqc/blob/main/bacap/bacap.go" class="link" target="_top"&gt;API docs&lt;/a&gt; for
BACAP are available on pkg.go.dev.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section"&gt;
&lt;div class="titlepage"&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id="introduction"&gt;&lt;span id="d58e64"&gt;&lt;/span&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The Pigeonhole protocol establishes anonymous cryptographic communication channels
which
have a &lt;span class="emphasis"&gt;&lt;em&gt;readcap&lt;/em&gt;&lt;/span&gt; (read capability) and a &lt;span class="emphasis"&gt;&lt;em&gt;writecap&lt;/em&gt;&lt;/span&gt;
(write capability). For example, if Alice and Bob want to communicate, they can each
create
their own Pigeonhole/BACAP channels and exchange readcaps on those channels. Now when
Bob
writes to his channel, Alice can read those messages because she has Bob&amp;rsquo;s readcap.
Likewise,
when Alice writes to her channel, Bob can read those messages because he has Alice&amp;rsquo;s
readcap.
This is the most basic construction using BACAP and Pigeonhole.&lt;/p&gt;</description></item><item><title>Katzenpost threat model document</title><link>https://echomix.org/blog/2024-04-25-threat-model/</link><pubDate>Thu, 25 Apr 2024 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2024-04-25-threat-model/</guid><description>&lt;p&gt;Here we present a draft of the Katzenpost mixnet threat model document.
We regard the threat model document as a living document which is frequently
edited and in need of ongoing maintenance as we continue to develop newer
mixnet protocols. Currently it is being organized by mixnet attack category
and we have arranged attacks in a table with corresponding attacker
capabilities. Later sections of the document present a deep dive into the core cryptographic
protocols that comprise Katzenpost, namely these three:&lt;/p&gt;</description></item><item><title>Mixnet Literature Overview</title><link>https://echomix.org/blog/2024-04-15-lit-review/</link><pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2024-04-15-lit-review/</guid><description>&lt;p&gt;We are presenting our overview of existing Mixnet literature. It takes some liberties with what is included or not. It proposes new ways to talk about some issues, and provides a critical analysis of some of the existing papers. It also endeavors to introduce the reader to the language of anonymity systems, while maintaining mathematical rigor.&lt;/p&gt;
&lt;p&gt;This doc, in particular, does not talk about the Katzenpost design. It does introduce the reader to some of the reasons why we&amp;rsquo;ve been making certain design decisions, and a keen eye might be led to some of the similar conclusions. But here we focus on already published research. We also stick to theory and don&amp;rsquo;t focus on any practical systems being built today.&lt;/p&gt;</description></item><item><title>hpqc - hybrid post quantum cryptography library</title><link>https://echomix.org/blog/2024-04-12-hpqc/</link><pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2024-04-12-hpqc/</guid><description>&lt;p&gt;The Katzenpost developement team has recently released a new golang
cryptography library known as &lt;a href="https://github.com/katzenpost/hpqc"&gt;&lt;strong&gt;hpqc&lt;/strong&gt;&lt;/a&gt;.
The theme of the library is hybrid post quantum cryptographic constructions, namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hybrid KEMs (key encapsulation mechanism)&lt;/li&gt;
&lt;li&gt;hybrid NIKEs (non-interactive key exchange)&lt;/li&gt;
&lt;li&gt;hybrid signature schemes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In each of the three main subdirectories, &amp;ldquo;kem&amp;rdquo;, &amp;ldquo;nike&amp;rdquo; and &amp;ldquo;sign&amp;rdquo; there exists
interface definitions for &lt;code&gt;Scheme&lt;/code&gt;, &lt;code&gt;PrivateKey&lt;/code&gt; and &lt;code&gt;PublicKey&lt;/code&gt;. For signature schemes and
KEMs we&amp;rsquo;re borrowing the interface sets from cloudflare&amp;rsquo;s circl library.&lt;/p&gt;</description></item><item><title>Katzenpost at 37C3</title><link>https://echomix.org/blog/2024-01-28-katzenpost-at-37c3/</link><pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2024-01-28-katzenpost-at-37c3/</guid><description>&lt;p&gt;Dr. Eva Infeld and surveillance expert and developer Leif Ryge held a session at the Chaos Communication Congress about the current state of the project, some of the things we’re working on, and some of the pitfalls many anonymity systems fall into. Building an anonymity system fit for our dystopian age is a hard problem, but we’re doing it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1ev4r-aZmFM"&gt;&lt;img src="https://github.com/katzenpost/website/tree/main/content/en/media/thumbnail.png" alt="Katzenpost talk on YouTube"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Audio Engineering Considerations for a Modern Mixnet</title><link>https://echomix.org/blog/2023-11-25-audio-engineering-considerations/</link><pubDate>Sat, 25 Nov 2023 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2023-11-25-audio-engineering-considerations/</guid><description>&lt;p&gt;Modern Mixnets have a unique set of requirements when it comes to processing
audio. The bandwidth is scarce, but we expect to use modern devices and have
ample processing power. We aim to secure the communication against even
sophisticated attacks that come from capturing the metadata, and prioritize
tools that are free, open source and written with security in mind. In this
unique setting, we present a set of recommendations for implementing codecs,
DSPs, and sophisticated noise reduction tools, to deliver either impressive
quality at low bandwidth or good quality at impressively low bandwidth.&lt;/p&gt;</description></item><item><title>Website Relaunch and migration to Hugo</title><link>https://echomix.org/blog/2023-11-24-website-relaunch/</link><pubDate>Fri, 24 Nov 2023 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2023-11-24-website-relaunch/</guid><description>&lt;p&gt;To match all the code development in Katzenpost in the last year, it was time
for a website relaunch. Our site was a migration from Sphinx, which is primarily
for documentation, to Hugo which is wildly configurable for all sorts of
websites. Given the technical nature and need for nice documentation interface,
we used the well crafted and maintained Docsy theme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Website Dependencies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt; static site generator&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docsy.dev"&gt;Docsy&lt;/a&gt; theme for Hugo&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getbootstrap.com"&gt;Bootstrap 5&lt;/a&gt; is bundled in Docsy&lt;/li&gt;
&lt;li&gt;&lt;a href="https://decapcms.org"&gt;Decap CMS&lt;/a&gt; for a user-friendly GUI&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Monthly News Update (May 2019)</title><link>https://echomix.org/blog/2019-05-04/</link><pubDate>Sat, 04 May 2019 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2019-05-04/</guid><description>&lt;p&gt;Greetings,&lt;/p&gt;
&lt;p&gt;The last few weeks have been very busy. I now have the basic working
prototype implementation of a new Katzenpost messaging system. This
new system has mutual location hiding properties for communication
partners because recipients retreive their messages from a remote
spool using a Sphinx SURB based protocol. &lt;a href="https://cypherpunks.ca/~iang/pubs/Sphinx_Oakland09.pdf" title="Danezis, G., Goldberg, I., Sphinx: A Compact and Provably Secure Mix Format, DOI 10.1109/SP.2009.15, May 2009"&gt;SPHINX&lt;/a&gt; &lt;a href="https://github.com/katzenpost/docs/blob/master/specs/sphinx.rst" title="Angel, Y., Danezis, G., Diaz, C., Piotrowska, A., Stainton, D., Sphinx Mix Network Cryptographic Packet Format Specification July 2017"&gt;SPHINXSPEC&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Monthly News Update (April 2019)</title><link>https://echomix.org/blog/2019-04-10/</link><pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2019-04-10/</guid><description>&lt;p&gt;Greetings,&lt;/p&gt;
&lt;p&gt;The Panoramix grant project funded by the European Commission has
officially ended but the Katzenpost free software project lives on.
Masala and I continue to work on Katzenpost for grant money given to
us by Samsung.&lt;/p&gt;
&lt;p&gt;We recently learned a few things about mixnet design in a series of
design meetings. The conclusions from our learnings is too much
information and detail for this here post. However I will summarize
some of our conclusions below. Our discussions usually revolved around
mixnet CRDT applications, client reliability, message spool server
design, client decoy traffic and, preventing attacks: statistical
disclosure and active confirmation attacks.&lt;/p&gt;</description></item><item><title>Rustification</title><link>https://echomix.org/blog/2019-01-19/</link><pubDate>Sun, 13 Jan 2019 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2019-01-19/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I wrote some notes about making mixnet components in Rust that are binary
compatible with &lt;a href="https://github.com/katzenpost/docs/blob/master/drafts/priority_tasks.rst#rustification"&gt;existing Katzenpost components&lt;/a&gt;&lt;/p&gt;
&lt;h1 id="rustification"&gt;Rustification&lt;/h1&gt;
&lt;p&gt;The goal should be binary compatibility with the golang implementation
of Katzenpost such that the existing golang components can
interoperate with the new Rust components. Perhaps the biggest advantage
of using Rust would be for writing mixnet clients as opposed to mix servers.
A Rust mixnet client could easily present a FFI that could be used by
user interfaces written in Java for Android and Swift for iOS.&lt;/p&gt;</description></item><item><title>Monthly News Update (Nov 2018)</title><link>https://echomix.org/blog/2018-11-22/</link><pubDate>Thu, 22 Nov 2018 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2018-11-22/</guid><description>&lt;p&gt;Greetings!&lt;/p&gt;
&lt;p&gt;This is our second edition of katzenpost news.
There&amp;rsquo;s been a lot of progress since the last report I posted many months ago.&lt;/p&gt;
&lt;p&gt;Firstly I&amp;rsquo;d like to mention our future development plans:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mix and directory authority key agility&lt;/li&gt;
&lt;li&gt;generative testing for the voting Directory Authority system&lt;/li&gt;
&lt;li&gt;generative testing for all of the things where appropriate&lt;/li&gt;
&lt;li&gt;load and performance testing the mix server&lt;/li&gt;
&lt;li&gt;design and development of an application agnostic mixnet client message oriented protocol library&lt;/li&gt;
&lt;li&gt;design and development of one or more applications that use our new mixnet protocol client library&lt;/li&gt;
&lt;li&gt;potentially assist in integration with other software projects that want to use a mixnet transport protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our recent accomplishments include:&lt;/p&gt;</description></item><item><title>Monthly News Update (Feb 2018)</title><link>https://echomix.org/blog/2018-02-27/</link><pubDate>Tue, 27 Feb 2018 00:00:00 +0000</pubDate><guid>https://echomix.org/blog/2018-02-27/</guid><description>&lt;h2 id="katzenpost-monthly-news"&gt;katzenpost monthly news&lt;/h2&gt;
&lt;p&gt;Greetings!&lt;/p&gt;
&lt;p&gt;This is our first edition of katzenpost monthly news. I&amp;rsquo;ll be
summarizing recent events from our first hackfest in Athens in early
December 2017 to the present.&lt;/p&gt;
&lt;p&gt;What we did in Athens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;setup a test mix network&lt;/li&gt;
&lt;li&gt;remote collaboration with Yawning Angel to fix bugs
and add features to the server side&lt;/li&gt;
&lt;li&gt;wrote some basic installation documentation&lt;/li&gt;
&lt;li&gt;Moritz created and deployed the &lt;a href="https://katzenpost.mixnetworks.org"&gt;katzenpost website&lt;/a&gt;
with glossary and FAQ&lt;/li&gt;
&lt;li&gt;explored technical issues related to python and java language
bindings to golang libraries&lt;/li&gt;
&lt;li&gt;discussed at length the possibilies for various kinds of mixnet
clients&lt;/li&gt;
&lt;li&gt;Vincent wrote a prototype android instant messenger client&lt;/li&gt;
&lt;li&gt;met with the GrNet people and told them how to install a
katzenpost mix network and answered their questions&lt;/li&gt;
&lt;li&gt;meskio and kaliy added an external user db interface for Provider authentication&lt;/li&gt;
&lt;li&gt;meskio wrote prototype python clients for testing purposes&lt;/li&gt;
&lt;li&gt;we had many group discussion about mix network design&lt;/li&gt;
&lt;li&gt;special guest visitor: George Kadianakis from Tor Project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since that time we have been working on our PKI specification. Nick
Mathewson sent us a six page review of our spec and Yawning sent a two
page reply; both of these e-mails contain lots of design details and
have been useful in our editing of the spec thus far:&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/build_katzenqt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/build_katzenqt/</guid><description>&lt;h1 id="build-and-run-katzenqt-from-source"&gt;Build and run katzenqt from source&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;katzenqt&lt;/code&gt; is the Qt group chat client. It is a decentralised
application that runs over the Katzenpost mix network and the
Pigeonhole storage services. The design is set out in the
&lt;a href="https://arxiv.org/abs/2501.02933"&gt;Echomix paper&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning.&lt;/strong&gt; &lt;code&gt;katzenqt&lt;/code&gt; is in active development and has not yet
been tagged for general release. It is not appropriate to rely on
the software for anonymity, security, or privacy at this stage.
Pre-built packages will be linked from the &lt;a href="https://echomix.org/docs/"&gt;docs landing&lt;/a&gt;
once a release is cut.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/specs/thin_client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/specs/thin_client.html</guid><description>&lt;h1 id="katzenpost-thin-client-design"&gt;Katzenpost Thin Client Design&lt;/h1&gt;
&lt;h1 id="1-introduction"&gt;1. Introduction&lt;/h1&gt;
&lt;p&gt;A Katzenpost mixnet client has several responsibilities at minimum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;compose Sphinx packets&lt;/li&gt;
&lt;li&gt;decrypt SURB replies&lt;/li&gt;
&lt;li&gt;send and receive Noise protocol messages&lt;/li&gt;
&lt;li&gt;keep up to date with the latest PKI document&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This document describes the design of the new Katzenpost mix network
client known as client2. In particular we discuss it&amp;rsquo;s multiplexing and
privilege separation design elements as well as the protocol used by the
thin client library.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/specs/pigeonhole/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/specs/pigeonhole/</guid><description>&lt;h1 id="pigeonhole-protocol-design-specification"&gt;Pigeonhole Protocol Design Specification&lt;/h1&gt;
&lt;h1 id="abstract"&gt;Abstract&lt;/h1&gt;
&lt;p&gt;In this specification we describe the components and protocols that
compose Pigeonhole scattered storage. We define the behavior of
communication clients that send and retrieve individual messages,
BACAP streams, and AllOrNothing streams. Client actions are mediated
through courier services that interact with storage replicas.&lt;/p&gt;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Pigeonhole scattered storage enables persistent anonymous
communication in which participants experience a coherent sequence of
messages or a continuous data stream, but where user relationships and
relations between data blocks remain unlinkable not only from the
perspective of third-party observers, but also from that of the mixnet
components. This latter attribute provides resilience against
deanonymization by compromised mixnet nodes.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/python_thin_client_api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/python_thin_client_api/</guid><description>&lt;h1 id="python-thin-client-api"&gt;Python Thin Client API&lt;/h1&gt;
&lt;p&gt;This is the API reference for the &lt;code&gt;katzenpost_thinclient&lt;/code&gt; Python
package, the Python binding of the Katzenpost thin client. The thin
client is an interface to the &lt;code&gt;kpclientd&lt;/code&gt; daemon, which performs all
cryptographic and network operations; the binding itself does no
cryptography.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This page is generated&lt;/strong&gt; by &lt;code&gt;website/tools/python-api-gen/&lt;/code&gt; from the
docstrings of the pinned &lt;code&gt;katzenpost_thinclient&lt;/code&gt; release, using the
native Python documentation tool &lt;a href="https://niklasrosenstein.github.io/pydoc-markdown/"&gt;&lt;code&gt;pydoc-markdown&lt;/code&gt;&lt;/a&gt;.
Do not edit it directly: changes belong in the binding docstrings (in
the &lt;code&gt;thin_client&lt;/code&gt; repository) and will be overwritten by the next
generation pass.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/run_katzenpost_mixnode_docker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/run_katzenpost_mixnode_docker/</guid><description>&lt;h1 id="run-a-katzenpost-mix-server-in-a-docker-container"&gt;Run a Katzenpost Mix server in a Docker container&lt;/h1&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Access to the &lt;code&gt;namenlos&lt;/code&gt; git repo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="preparing-the-host-filesystem"&gt;Preparing the host filesystem&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir katzenpost-mix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd katzenpost-mix
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir &lt;span style="color:#f92672"&gt;{&lt;/span&gt;conf,data&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;chmod &lt;span style="color:#ae81ff"&gt;700&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All further actions are performed from the &lt;code&gt;katzenpost-mix&lt;/code&gt; directory.&lt;/p&gt;
&lt;h2 id="building-the-docker-image"&gt;Building the Docker image&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-docker" data-lang="docker"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;golang:bookworm&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;builder&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;LABEL&lt;/span&gt; authors&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;ops@cryptonymity.net&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cd /go &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git clone https://github.com/katzenpost/katzenpost &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cd katzenpost &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; go mod tidy &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cd cmd/server &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; go build&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#e6db74"&gt;debian:bookworm&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;deploy&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;COPY&lt;/span&gt; --from&lt;span style="color:#f92672"&gt;=&lt;/span&gt;builder /go/katzenpost/cmd/server/server /usr/bin/server&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;EXPOSE&lt;/span&gt; &lt;span style="color:#e6db74"&gt;8181&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ARG&lt;/span&gt; uid&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ARG&lt;/span&gt; gid&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkdir -p /home/user &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;user:x:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;uid&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;gid&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:User,,,:/home/user:/bin/bash&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/passwd &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;user:x:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;uid&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/group&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;USER&lt;/span&gt; &lt;span style="color:#e6db74"&gt;user&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt; HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/home/user&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENTRYPOINT&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;/usr/bin/server&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;-f&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;/conf/katzenpost.toml&amp;#34;&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build Docker image:&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/thin_client_api_reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/thin_client_api_reference/</guid><description>&lt;h1 id="thin-client-api-reference"&gt;Thin Client API Reference&lt;/h1&gt;
&lt;p&gt;This is the complete API reference for the Katzenpost thin client. The
thin client is an interface to the kpclientd daemon, which handles all
cryptographic and network operations. The thin client communicates
with the daemon over a local socket using CBOR-encoded messages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This document is generated.&lt;/strong&gt; The canonical source is
&lt;code&gt;website/tools/thin-client-api-gen/&lt;/code&gt;; edit binding docstrings (in the
source trees) or &lt;code&gt;groups.yaml&lt;/code&gt; / &lt;code&gt;overlay/*.md&lt;/code&gt; (in the generator) — do
not edit this file directly, as local changes will be overwritten by
the next generation pass.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/thin_client_howto/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/thin_client_howto/</guid><description>&lt;h1 id="thin-client-how-to-guide"&gt;Thin Client How-to Guide&lt;/h1&gt;
&lt;p&gt;This guide shows how to accomplish specific tasks with the Katzenpost
thin client. Each section is self-contained: find the task you need
and follow the steps.&lt;/p&gt;
&lt;p&gt;If you are new to Pigeonhole, read
&lt;a href="https://echomix.org/docs/pigeonhole_explained/"&gt;Understanding Pigeonhole&lt;/a&gt; first for the
concepts, then return here for the recipes, and consult the
&lt;a href="https://echomix.org/docs/thin_client_api_reference/"&gt;Thin Client API Reference&lt;/a&gt; for the
precise signatures.&lt;/p&gt;
&lt;p&gt;Throughout this guide and the API the words &lt;strong&gt;channel&lt;/strong&gt; and &lt;strong&gt;stream&lt;/strong&gt;
are used interchangeably: they denote one and the same thing.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/threat_model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/threat_model/</guid><description>&lt;h1&gt;Threat Model&lt;/h1&gt;

&lt;h1 id="the-purpose-and-structure-of-this-document"&gt;The purpose and
structure of this document&lt;/h1&gt;
&lt;p&gt;This threat model document is unique in the privacy technology
landscape for its detailed treatment of realistic adversary
capabilities. It is not a description of a superficial, theoretical
system, but rather of complex, real-life software that is being
interrogated and constantly re-designed to provide the best possible
security. We examine it from the point of view of both theoretical
design, networking choices and practical pitfalls.&lt;/p&gt;</description></item><item><title/><link>https://echomix.org/docs/pigeonhole_explained/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://echomix.org/docs/pigeonhole_explained/</guid><description>&lt;h1 id="understanding-pigeonhole"&gt;Understanding Pigeonhole&lt;/h1&gt;
&lt;p&gt;Pigeonhole is the storage layer of the Katzenpost mix network. It
lets applications communicate anonymously using encrypted,
append-only streams. From a passive network observer&amp;rsquo;s perspective
there is no consistent stream access and instead everything looks like
randomly scattered queries across storage servers.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; client ┌───── via mix network ─────┐ courier replicas
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ┌────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kpclientd ──▶ Sphinx round-trip (×3 mix layers) ──▶ service │ 1 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; node ├────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (courier) │ 2 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; │ ├────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └─────▶│ ...│
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fixed-throughput K = 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connections; replicas
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cannot read box IDs per box
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (consistent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hashing)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is the document to read first. Having understood the concepts
here, proceed to the &lt;a href="https://echomix.org/docs/thin_client_howto/"&gt;how-to guide&lt;/a&gt; for
task-oriented recipes, and consult the
&lt;a href="https://echomix.org/docs/thin_client_api_reference/"&gt;API reference&lt;/a&gt; for the precise
signatures.&lt;/p&gt;</description></item></channel></rss>