<?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[Dismissing HTTP Signature on presence of Object Integrity Proof]]></title><description><![CDATA[<p dir="auto">I have a question for implementors pursuing object integrity proofs.</p>
<p dir="auto">I am implementing the ability to serve these proofs in NodeBB with the assistance of an LLM. It is adhering to <a href="https://activitypub.space/user/silverpill%40mitra.social" target="_blank" rel="noopener noreferrer nofollow ugc">@silverpill@mitra.social</a>'s <a href="https://w3id.org/fep/8b32" target="_blank" rel="noopener noreferrer nofollow ugc">FEP-8b32: Object Integrity Proofs</a>.</p>
<p dir="auto">As part of its work, it implemented a quirk I thought was curious. If the proof was present in an embedded object, the activity's HTTP signature was ignored/not-checked.</p>
<p dir="auto">I challenged the model and it pointed to this line from the FEP...</p>
<p dir="auto">&gt; If both HTTP signature and integrity proof are used, the integrity proof MUST be given precedence over HTTP signature. The HTTP signature MAY be dismissed.</p>
<p dir="auto">... and cited potential interop if someone were to send an activity with integrity proof <em>but explicitly no HTTP signature</em>. That is, if NodeBB were to implement a hard requirement for HTTP signatures, then that specific case would fail inbound checks.</p>
<p dir="auto">My rationale is:</p>
<ul>
<li>The HTTP signature guarantees that the payload has not been modified in-transit, and</li>
<li>The proof guarantees the authenticity of the payload, and</li>
<li>This is doubly so for payloads belonging to separate origins</li>
</ul>
<p dir="auto">Am I incorrect? It would seem like we need to exercise both checks to ensure authenticity of the entire payload chain: activity and object.</p>
<p dir="auto">Pinging other interested parties: <a href="https://activitypub.space/user/hongminhee%40hollo.social" target="_blank" rel="noopener noreferrer nofollow ugc">@hongminhee@hollo.social</a> <a href="https://activitypub.space/user/mike%40macgirvin.com" target="_blank" rel="noopener noreferrer nofollow ugc">@mike@macgirvin.com</a> <a href="https://activitypub.space/user/pfefferle%40mastodon.social" target="_blank" rel="noopener noreferrer nofollow ugc">@pfefferle@mastodon.social</a> <a href="https://activitypub.space/user/evan%40cosocial.ca" target="_blank" rel="noopener noreferrer nofollow ugc">@evan@cosocial.ca</a></p>
]]></description><link>https://citiverse.it/topic/5d805f5f-a08e-4804-b0cb-51215e690612/dismissing-http-signature-on-presence-of-object-integrity-proof</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:51:07 GMT</lastBuildDate><atom:link href="https://citiverse.it/topic/5d805f5f-a08e-4804-b0cb-51215e690612.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Sep 2026 16:38:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dismissing HTTP Signature on presence of Object Integrity Proof on Thu, 17 Sep 2026 18:47:19 GMT]]></title><description><![CDATA[<p dir="auto"><a href="https://activitypub.space/user/mario%40hub.somaton.com" target="_blank" rel="noopener noreferrer nofollow ugc">@mario@hub.somaton.com</a> <a href="https://activitypub.space/user/silverpill%40mitra.social" target="_blank" rel="noopener noreferrer nofollow ugc">@silverpill@mitra.social</a> yeah, I get that if a top level proof is present, then the signature can be avoided.</p>
<p dir="auto">I just meant in the absence of a proof and signature, it's just noise.</p>
]]></description><link>https://citiverse.it/post/https://activitypub.space/post/2461</link><guid isPermaLink="true">https://citiverse.it/post/https://activitypub.space/post/2461</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 17 Sep 2026 18:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Dismissing HTTP Signature on presence of Object Integrity Proof on Thu, 17 Sep 2026 18:30:08 GMT]]></title><description><![CDATA[<p><span><a href="/user/julian%40activitypub.space" rel="noopener">@julian</a></span></p><blockquote><p>So why does 8b32 allow for dropping the HTTP signature? My best guess is that the wording is vague and the intention is that an object integrity proof at top level means an HTTP signature can be discarded.</p></blockquote><p>You're right, the sentence was poorly written. It was meant to apply to  top-level proofs only.</p><p>I'll update the FEP.</p><blockquote><p>I know of no situation where an AP-compliant server POSTs another server without an HTTP Signature. Pretty sure any attempt to do so would just mean the activity is dropped.</p></blockquote><p>Mitra would accept an activity with integrity proof if HTTP signature is not present.</p>]]></description><link>https://citiverse.it/post/https://mitra.social/objects/01a0b0a2-1903-75a3-bedf-cc15e3936212</link><guid isPermaLink="true">https://citiverse.it/post/https://mitra.social/objects/01a0b0a2-1903-75a3-bedf-cc15e3936212</guid><dc:creator><![CDATA[silverpill@mitra.social]]></dc:creator><pubDate>Thu, 17 Sep 2026 18:30:08 GMT</pubDate></item><item><title><![CDATA[Reply to Dismissing HTTP Signature on presence of Object Integrity Proof on Thu, 17 Sep 2026 16:45:49 GMT]]></title><description><![CDATA[<p dir="auto">Additional points:</p>
<ol>
<li>I know of no situation where an AP-compliant server POSTs another server <strong>without an HTTP Signature</strong>. Pretty sure any attempt to do so would just mean the activity is dropped.</li>
</ol>
<p dir="auto">So why does 8b32 allow for dropping the HTTP signature? My best guess is that the wording is vague and the <strong>intention</strong> is that an object integrity proof <em>at top level</em> means an HTTP signature can be discarded.</p>
<ol start="2">
<li>Cross-origin activity-object combos are common. FEP 1b12 is built upon this, as are standard Mastodon Announce/boosts. To give up HTTP signature checks because an embedded object contains a proof means the wrapping activity is spoofable.</li>
</ol>
<p dir="auto">So I think the local LLM took that line very literally.</p>
]]></description><link>https://citiverse.it/post/https://activitypub.space/post/2460</link><guid isPermaLink="true">https://citiverse.it/post/https://activitypub.space/post/2460</guid><dc:creator><![CDATA[julian@activitypub.space]]></dc:creator><pubDate>Thu, 17 Sep 2026 16:45:49 GMT</pubDate></item></channel></rss>