<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[End-to-end Encryption (E2EE) over ActivityPub]]></title><description><![CDATA[<p>End-to-end Encryption (E2EE) over ActivityPub</p><p>Encrypted direct messages supply the confidence that people need to connect with family, friends and colleagues privately over a social network. As part of the Summer of Protocols 2024, we explore the integration of end-to-end encryption (E2EE) into the ActivityPub protocol.</p><p><a href="https://socialwebfoundation.org/program-protocol-e2ee/" rel="nofollow noopener"><span>https://</span><span>socialwebfoundation.org/progra</span><span>m-protocol-e2ee/</span></a></p><p><a href="https://ifwo.eu/tags/ActivityPub" rel="tag">#<span>ActivityPub</span></a> <a href="https://ifwo.eu/tags/E2EE" rel="tag">#<span>E2EE</span></a> <a href="https://ifwo.eu/tags/SocialWeb" rel="tag">#<span>SocialWeb</span></a> <a href="https://ifwo.eu/tags/Foundation" rel="tag">#<span>Foundation</span></a> <a href="https://ifwo.eu/tags/SocialWebFoundation" rel="tag">#<span>SocialWebFoundation</span></a> <a href="https://ifwo.eu/tags/Encryption" rel="tag">#<span>Encryption</span></a> <a href="https://ifwo.eu/tags/Verschl%C3%BCsselung" rel="tag">#<span>Verschlüsselung</span></a> <a href="https://ifwo.eu/tags/Sicherheit" rel="tag">#<span>Sicherheit</span></a> <a href="https://ifwo.eu/tags/Privatnachricht" rel="tag">#<span>Privatnachricht</span></a></p>

<div class="row mt-3"><img class="img-thumbnail" src="https://ifwo.eu/system/media_attachments/files/115/649/794/937/177/528/original/8f761e0611e5538b.png" alt="Link Preview Image" /></div>]]></description><link>https://citiverse.it/topic/bf30078c-a939-471a-994d-1fddb814090c/end-to-end-encryption-e2ee-over-activitypub</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 04:38:44 GMT</lastBuildDate><atom:link href="https://citiverse.it/topic/bf30078c-a939-471a-994d-1fddb814090c.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Dec 2025 11:44:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Sat, 25 Jul 2026 19:44:26 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> Alright, I implemented the auth mode. It's not difficult, but it requires the actor of outer activity to be the same as the actor of inner (plaintext) activity. With base mode (5.1.1), the <code>actor</code> of outer activity could be different, which means we can hide the real sender.</p><p>Do you think it's worth doing this?</p><p>I think authentication of the sender at the HPKE level shouldn't be necessary because the inner activity is self-authenticating (includes integrity proof).</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f9ace-b6c2-7950-ad08-d17b01473f1d</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f9ace-b6c2-7950-ad08-d17b01473f1d</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Sat, 25 Jul 2026 19:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 24 Jul 2026 10:05:38 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>Think <code>5.1.3</code> (AuthEncap) is better since it still uses an ephemeral key, but does an extra DH to authenticate the sender.  <code>5.1.1</code> (Encap) is simpler, but unless the aad contains at least the sender's identity, there is nothing preventing someone from extracting a ciphertext, and re-signing it (forging the origin).</p><p>Having a trivial amount of AAD is computationally cheaper than doing the extra DH, but the extra DH would be sub 100 usec, so this is "pick something to taste".</p><p>ps: Spent the day chasing LLVM bugs, errors in this would be all mine.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f9396-7432-7272-a92b-cc6663fb2a58</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f9396-7432-7272-a92b-cc6663fb2a58</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 24 Jul 2026 10:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Thu, 23 Jul 2026 23:44:06 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>Ah , mea culpa, you're right.  <code>5.1.1</code> avoids the nonce reuse issue and provides imperfect forward secrecy.  I've been fighting u-boot on "new" exotic target the last day so my thinking isn't as sharp as it should be.</p><p>Replies should go through the same process (avoids sender having to store the shared secret, less state is more better in this case).</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f915d-6c68-7672-8bb1-eecb0c07ec09</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f915d-6c68-7672-8bb1-eecb0c07ec09</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 23 Jul 2026 23:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Thu, 23 Jul 2026 19:30:59 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> Yes, <code>proof</code> covers all properties of the activity. But I can't omit <code>encap_key</code>, it is required by <code>SetupBaseR</code> function defined in section <a href="https://www.rfc-editor.org/rfc/rfc9180.html#name-encryption-to-a-public-key" rel="noopener">5.1.1</a></p><p>I've read a bit more about DHKEM and now I am even more confused. Isn't <code>encap_key</code> an ephemeral key? The library I am using describes it as such:</p><p><a href="https://docs.rs/hpke/latest/hpke/trait.Kem.html#tymethod.encap_with_rng" rel="noopener">https://docs.rs/hpke/latest/hpke/trait.Kem.html#tymethod.encap_with_rng</a></p><blockquote><p>Derives a shared secret and an ephemeral pubkey that the owner of the reciepint’s pubkey can use to derive the same shared secret.</p></blockquote><p>This "ephemeral pubkey" is what I labeled as <code>encap_key</code>. It is later included in <code>fep0806:cipherData</code></p><p>-----</p><p>I think it's okay to have no forward secrecy, the goal of this FEP is to describe a simple encryption mechanism that anyone can implement. I'll just warn readers about its weakness.</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f9075-ad6b-75b3-a406-16bdfa73722b</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f9075-ad6b-75b3-a406-16bdfa73722b</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Thu, 23 Jul 2026 19:30:59 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Thu, 23 Jul 2026 17:49:01 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>If the signature in <code>proof</code> covers <code>fep0806:cipherData</code>, you can do <code>ephemeral_key_pub | ciphertext</code>. and use <code>Encryption to a Public Key</code>.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f9018-54f5-79d2-b759-58173ae50e75</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f9018-54f5-79d2-b759-58173ae50e75</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 23 Jul 2026 17:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Thu, 23 Jul 2026 10:22:19 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> I assume this is "Authentication Using an Asymmetric Key" (<a href="https://www.rfc-editor.org/rfc/rfc9180.html#name-authentication-using-an-asy" rel="noopener">https://www.rfc-editor.org/rfc/rfc9180.html#name-authentication-using-an-asy</a>)?</p><p>Because in "Encryption to a Public Key" mode, sender's key is not used.</p><p>If I understand the idea correctly, the ephemeral key would need to be added to <code>fep0806:cipherData</code>. That is, instead of <code>encap_key | ciphertext</code> it will be <code>ephemeral_key_pub | encap_key | ciphertext</code>.</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f8e7f-5f4c-7d12-b24d-ed3c26e8ffc3</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f8e7f-5f4c-7d12-b24d-ed3c26e8ffc3</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Thu, 23 Jul 2026 10:22:19 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Wed, 22 Jul 2026 21:54:13 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>No, the recipient would also generates an ephemeral key, and uses that when replying.</p><p>So it's always a one shot ephemeral (sender)/static (recipient) HPKE exchange, with sender authenticity guaranteed by the signature.  Could also use the shared secret from the original post but force a different IV, but "replies are just the sender and receiver being flipped, code path is the same" is easier.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f8bd2-7681-71c2-aefe-626bc0bef31c</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f8bd2-7681-71c2-aefe-626bc0bef31c</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Jul 2026 21:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Wed, 22 Jul 2026 21:06:53 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span></p><blockquote><p>having the sender generate an ephemeral keypair (include the public key envelope)</p></blockquote><p>So the recipient will need to encrypt to this ephemeral key when replying?</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f8ba7-2168-75a2-9077-188a97046d2e</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f8ba7-2168-75a2-9077-188a97046d2e</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Wed, 22 Jul 2026 21:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Wed, 22 Jul 2026 17:42:00 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>Of an envelope.  If  <code>actor</code> being changed mid-transit isn't a problem, then omit it from the aad.  Including the <code>from</code>/<code>to</code> as part of the AAD binds the ciphertext to the origin/recipient (the HPKE ciphertext does not carry any of this information).</p><p>It is worth noting that, as the FEP is specified now, using the sender and recipient's keypairs to do HPKE will result in the same shared secret being generated for every message.  This is catastrophic to security as the nonce for the symmetric portion of the HPKE encryption is deterministic (RFC 9180 5.1).</p><p>This can be avoided by either: having the sender generate an ephemeral keypair (include the public key envelope), or using a unique HPKE <code>info</code> per envelope.  The former is better as it gives imperfect forward secrecy (sender identity key compromise does not reveal past plaintexts), the latter is cheaper to do.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f8aeb-8d67-7ad1-9f59-6b2d76ed5b04</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f8aeb-8d67-7ad1-9f59-6b2d76ed5b04</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Jul 2026 17:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Wed, 22 Jul 2026 07:23:37 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span></p><p>&gt;If the proof covers all of that then it's not strictly needed, but it's cheap paranoia.</p><p>Do you mean id/actor/to of a plaintext activity, or of an envelope (<code>EncryptedActivity</code>)?</p><p>My understanding is that the properties of an envelope have no effect on security. It can even have a different <code>actor</code>.</p><p>I added an example of a plaintext activity: <a href="https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md#plaintext-activity" rel="noopener">https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md#plaintext-activity</a></p><p>Also added HPKE mode to the parameter list - <code>mode_base</code>.</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f88b5-688d-78e3-b3fd-0cbaaab80c6a</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f88b5-688d-78e3-b3fd-0cbaaab80c6a</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Wed, 22 Jul 2026 07:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 21 Jul 2026 13:58:27 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span></p><p>The primitive choices are sensible.</p><p>The "aad" is sent in the clear (or just public as it is now) so you could do something like <code>"fep-0806-aad" | ':' | &lt;id&gt; | ':' | &lt;actor&gt; |':' | &lt;to&gt;</code>.  If the proof covers all of that then it's not strictly needed, but it's cheap paranoia.</p><p>I was going to say add version info to the labels, but <code>fep0806:cipherAlgorithm</code> covers that.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f84f8-8519-77a0-bbe6-6d1d4fc59ce3</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f84f8-8519-77a0-bbe6-6d1d4fc59ce3</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Jul 2026 13:58:27 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 21 Jul 2026 10:18:29 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> I added HPKE algorithm parameters to the FEP:</p><p><a href="https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md#algorithms" rel="noopener">https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md#algorithms</a></p><blockquote><p>KEM: DHKEM(X25519, HKDF-SHA256)<br />AEAD: ChaCha20Poly1305<br />KDF: HKDF-SHA256<br />"info" string: fep-0806-info<br />"aad" string: fep-0806-aad</p></blockquote><p>Does it look right?</p><p>KEM/AEAD/KDF choices are not my preferences, I just copied them from another HPKE+ed25519 implementation.</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f842f-21a9-7192-8fd0-d6c3ff526f35</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f842f-21a9-7192-8fd0-d6c3ff526f35</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Tue, 21 Jul 2026 10:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 17 Jul 2026 17:42:36 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span></p><p>WhatsApp.</p><p>It's biggest claim to fame is non-group messaging (WireGuard), and the fact that the designer based it on the Signal wire protocol design (same person).  The latter research that adds concrete security proofs is an added bonus, as well as decent library availability.</p><p>But, there's only so many ways to do NIKE (Non-Interactive Key Exchange), and the IETF/IRTF has a preference for reusing their own standards.</p><p>TLDR: Noise over HPKE is a personal preference, I think it's harder to blow your foot off with Noise and it's easier to implement (having done multiple Noise impls, and dealt with HPKE more than I should), but honestly either is a reasonable choice, and if you want something more standardized, HPKE is reasonable.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f712c-4b0b-7390-8409-65712db2cefa</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f712c-4b0b-7390-8409-65712db2cefa</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 17 Jul 2026 17:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 17 Jul 2026 17:25:06 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span> Is there anything built on top of Noise for group messaging?</p><p>As far as I can tell, HPKE is used in MLS</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f711c-4822-7570-9d25-680627b003f6</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f711c-4822-7570-9d25-680627b003f6</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Fri, 17 Jul 2026 17:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 17 Jul 2026 17:15:56 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span></p><p>HPKE has the benefit of being standardized, and imperfect forward secrecy is the best you can do with 0-RTT (which probably fits the fediverse model better).</p><p>Just be very careful about the "use correctly" and it's "fine".  I'm partial to Noise (<a href="https://noiseprotocol.org/" rel="noopener">https://noiseprotocol.org/</a>) for these sort of use cases because it has less foot+guns and there's more flexibility, but I wouldn't freak out or scream if I saw HPKE in use.</p><p>As a side note, it is indeed safe to convert ed25519 keys to X25519 keys assuming a common sense step is taken when using the latter (<a href="https://eprint.iacr.org/2021/509" rel="noopener">https://eprint.iacr.org/2021/509</a>).</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f7113-e441-7142-abf2-69f698c354ca</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019f7113-e441-7142-abf2-69f698c354ca</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 17 Jul 2026 17:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 17 Jul 2026 16:29:52 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> Hi, I tried to implement the mechanism described in the FEP and decided to use HPKE (<a href="https://www.rfc-editor.org/rfc/rfc9180.html" rel="noopener">RFC-9180</a>). What do you think of it?</p><p>HPKE seems to address the issue you pointed out back then: <a href="https://www.rfc-editor.org/rfc/rfc9180.html#name-forward-secrecy" rel="noopener">https://www.rfc-editor.org/rfc/rfc9180.html#name-forward-secrecy</a>.</p><p>At least if used properly. The library I am using hard-codes "info" and "aad" strings: <a href="https://github.com/rustonbsd/ed25519-dalek-hpke/blob/27b010a9ae25ba4ce051510eadfd103a179dd715/src/lib.rs#L98-L104" rel="noopener">https://github.com/rustonbsd/ed25519-dalek-hpke/blob/27b010a9ae25ba4ce051510eadfd103a179dd715/src/lib.rs#L98-L104</a></p><p>Anyway, here's an updated FEP: <a href="https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md" rel="noopener">https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md</a></p><p><span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span></p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019f70e9-b707-7e22-88ec-1c897ce31d40</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019f70e9-b707-7e22-88ec-1c897ce31d40</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Fri, 17 Jul 2026 16:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Fri, 05 Dec 2025 15:43:37 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span></p><p>Sorry for the delayed response, but yes.</p><p>The naive approach would be:</p><p>- Convert both party's Ed25519 keys to X25519 keys<br />- ECDH(Sender static, Recipient static) -&gt; k<br />- HKDF(k) -&gt; Shared secret</p><p>The problem with this approach is that, if either side's private key gets compromised, all historical traffic is trivially decryptable. (Static-Static ECDH)</p><p>Perfect forward secrecy (compromise of either key does not give attacker the ability to read past messages) requires at least one extra round trip, which is not great in this setting.</p><p>The tweak I suggested is:</p><p>- Convert both party's Ed25519 keys to X25519 keys<br />- Sender generates a ephemeral (throw away) X25519 key<br />- ECDH(Sender static, Recipient static) -&gt; k_1<br />- ECDH(Sender ephemeral, Recipient static) -&gt; k_2<br />- HKDF(k_1 | k_2) -&gt; Shared secret<br />- Sender discards the ephemeral key</p><p>With this improvement, sender long term key compromise does not allow decryption of past traffic, because the ephemeral keypair is long gone into the void (one-way forward secrecy, Static-Static + Ephemeral-Static ECDH).</p><p>Note: While the theoretical safety of reusing a Ed25519 key for also doing X25519 was an open question, there are proofs that it is safe.</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019aef2e-dd05-ff4a-814f-d2f9d3d8b2c7</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019aef2e-dd05-ff4a-814f-d2f9d3d8b2c7</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 05 Dec 2025 15:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Wed, 03 Dec 2025 20:59:15 GMT]]></title><description><![CDATA[<p><span><a href="https://mitra.vpclmulqdq.moe/users/greyarea" rel="noopener">@greyarea</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span> Thank you for the advice. I need to start with something simple in order to learn how cryptography works. Then it will be replaced with a more secure scheme.</p><p>From what I learned so far, the core principle is pretty much the same in all modern encryption schemes, they differ in how shared symmetric key is generated. Is that correct?</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019ae603-1d31-e896-fc0b-c670ccf51e3c</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019ae603-1d31-e896-fc0b-c670ccf51e3c</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Wed, 03 Dec 2025 20:59:15 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 22:41:46 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social" rel="noopener">@silverpill</a></span> <span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span></p><p>As a note, FEP-0806 is overly simplistic in that it has no forward secrecy.</p><p>As an easy improvement, if the sender also generates a per-message ephemeral X25519 keypair, you can do static-static + static-ephemeral KEX and get imperfect forward secrecy (no additional round trips required).</p>]]></description><link>https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019ae13a-9c81-a02c-7c92-79c3f9b817b6</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.vpclmulqdq.moe/objects/019ae13a-9c81-a02c-7c92-79c3f9b817b6</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 02 Dec 2025 22:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 20:27:00 GMT]]></title><description><![CDATA[<p><span><a href="/user/raucao%40kosmos.social">@<span>raucao</span></a></span> <span><a href="/user/silverpill%40mitra.social">@<span>silverpill</span></a></span> <span><a href="/user/lain%40lain.com">@<span>lain</span></a></span> <span><a href="/user/sozialwelten%40ifwo.eu">@<span>sozialwelten</span></a></span> <span><a href="/user/koteisaev%40mastodon.online">@<span>koteisaev</span></a></span> the problem is not e2ee in itself. It's all the consequences: key management ux nightmare, no spam prevention from servers, no csam filter on servers, no search in server (client must download everything to index and search locally, good luck with mobile). I don't see a world where we have both e2ee and good usability <img src="https://citiverse.it/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=c921aad9331" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="😞" alt="😞" /></p>]]></description><link>https://citiverse.it/post/https://mastodon.libre-entreprise.com/users/lutindiscret/statuses/115651852389264163</link><guid isPermaLink="true">https://citiverse.it/post/https://mastodon.libre-entreprise.com/users/lutindiscret/statuses/115651852389264163</guid><dc:creator><![CDATA[lutindiscret@mastodon.libre-entreprise.com]]></dc:creator><pubDate>Tue, 02 Dec 2025 20:27:00 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 17:41:43 GMT]]></title><description><![CDATA[<p dir="auto"><a href="https://activitypub.space/user/sozialwelten%40ifwo.eu" target="_blank" rel="noopener noreferrer nofollow ugc">@sozialwelten@ifwo.eu</a> I apologize if my point of view may seem conservative and narrow-minded... but in my opinion, pushing for the integration of encrypted messaging into the Fediverse is not advisable. I believe the best solution is that of the Lemmy developers, who have created a button that allows two users with a Matrix account to communicate via software designed for secure communications.</p>
]]></description><link>https://citiverse.it/post/https://activitypub.space/post/696</link><guid isPermaLink="true">https://citiverse.it/post/https://activitypub.space/post/696</guid><dc:creator><![CDATA[informapirata@activitypub.space]]></dc:creator><pubDate>Tue, 02 Dec 2025 17:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 13:12:00 GMT]]></title><description><![CDATA[<p><span><a href="/user/silverpill%40mitra.social">@<span>silverpill</span></a></span> <span><a href="/user/lain%40lain.com">@<span>lain</span></a></span> <span><a href="/user/sozialwelten%40ifwo.eu">@<span>sozialwelten</span></a></span> <span><a href="/user/koteisaev%40mastodon.online">@<span>koteisaev</span></a></span> That could be the first step for anyone. Still better than sending unencrypted DMs around.</p>]]></description><link>https://citiverse.it/post/https://kosmos.social/users/raucao/statuses/115650141903955304</link><guid isPermaLink="true">https://citiverse.it/post/https://kosmos.social/users/raucao/statuses/115650141903955304</guid><dc:creator><![CDATA[raucao@kosmos.social]]></dc:creator><pubDate>Tue, 02 Dec 2025 13:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 13:06:21 GMT]]></title><description><![CDATA[<p><span><a href="/user/raucao%40kosmos.social" rel="noopener">@raucao</a></span> <span><a href="/user/lain%40lain.com" rel="noopener">@lain</a></span> <span><a href="/user/sozialwelten%40ifwo.eu" rel="noopener">@sozialwelten</a></span> <span><a href="/user/koteisaev%40mastodon.online" rel="noopener">@koteisaev</a></span> FWIW, encryption with user-owned keys is on my roadmap. I don't want to start with MLS, though, it's too complex. The first prototype will likely encrypt messages with user's identity key, as described in <a href="https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md" rel="noopener">https://codeberg.org/silverpill/feps/src/branch/main/0806/fep-0806.md</a></p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/019adf2b-cfdf-972f-e6d9-b90de9288fee</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/019adf2b-cfdf-972f-e6d9-b90de9288fee</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Tue, 02 Dec 2025 13:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to End-to-end Encryption (E2EE) over ActivityPub on Tue, 02 Dec 2025 12:19:45 GMT]]></title><description><![CDATA[<p><span><a href="/user/lain%40lain.com">@<span>lain</span></a></span> <span><a href="/user/sozialwelten%40ifwo.eu">@<span>sozialwelten</span></a></span> <span><a href="/user/koteisaev%40mastodon.online">@<span>koteisaev</span></a></span> Yes.</p>]]></description><link>https://citiverse.it/post/https://kosmos.social/users/raucao/statuses/115649936449904249</link><guid isPermaLink="true">https://citiverse.it/post/https://kosmos.social/users/raucao/statuses/115649936449904249</guid><dc:creator><![CDATA[raucao@kosmos.social]]></dc:creator><pubDate>Tue, 02 Dec 2025 12:19:45 GMT</pubDate></item></channel></rss>