<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ryo-stst</title>
    <description>The latest articles on DEV Community by ryo-stst (@ryo-stst).</description>
    <link>https://dev.to/ryo-stst</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4093033%2Fdad375ce-2af4-4d96-81ed-63f1f7554e83.png</url>
      <title>DEV Community: ryo-stst</title>
      <link>https://dev.to/ryo-stst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryo-stst"/>
    <language>en</language>
    <item>
      <title>Three Robots Arrive at a Bakery. Which One Gets the Package?</title>
      <dc:creator>ryo-stst</dc:creator>
      <pubDate>Tue, 29 Sep 2026 13:43:02 +0000</pubDate>
      <link>https://dev.to/ryo-stst/three-robots-arrive-at-a-bakery-which-one-gets-the-package-4b8h</link>
      <guid>https://dev.to/ryo-stst/three-robots-arrive-at-a-bakery-which-one-gets-the-package-4b8h</guid>
      <description>&lt;p&gt;&lt;em&gt;A short story from an imagined 2035, followed by a small experiment with Robot Identity Protocol. The date is a setting, not a forecast. The cover is an AI-generated conceptual illustration.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The morning the bakery met three strangers
&lt;/h2&gt;

&lt;p&gt;At 5:47 a.m., the first robot politely asked Mara's bakery for twelve boxes of pastries.&lt;/p&gt;

&lt;p&gt;At 5:48, the second asked for exactly the same thing.&lt;/p&gt;

&lt;p&gt;At 5:49, the third arrived and waited without speaking.&lt;/p&gt;

&lt;p&gt;Mara was still upstairs. Downstairs, the ovens were cooling, the streetlights were switching off, and the pickup hatch had a problem that no amount of computer vision could make disappear.&lt;/p&gt;

&lt;p&gt;It could see three machines. It did not yet know which claims belonged to which conversation.&lt;/p&gt;

&lt;p&gt;The smallest machine had immaculate wheels. The largest had a photograph of an inspection certificate on its display. The quiet one had a dent on its side.&lt;/p&gt;

&lt;p&gt;None of those details answered the hatch's question.&lt;/p&gt;

&lt;p&gt;In this imagined city, delivery companies no longer owned every part of a journey. A neighborhood cooperative could borrow a vehicle from another fleet. A repair company could substitute a machine overnight. Stores bought their own pickup equipment. There was no single vendor account shared by everyone on the street.&lt;/p&gt;

&lt;p&gt;That flexibility made the city useful. It also meant that machines would meet strangers every morning.&lt;/p&gt;

&lt;p&gt;The hatch asked each robot to establish a fresh authenticated conversation. Separately—not by drawing one reassuring green line around the whole group.&lt;/p&gt;

&lt;p&gt;The first robot's credential checked out. It controlled a key the hatch was configured to trust. But it supplied no statement about a suitable cargo compartment. Its suitability was still unanswered.&lt;/p&gt;

&lt;p&gt;The second robot also controlled a legitimate key. The inspection statement it presented was genuinely signed. There was just one inconvenient detail: the statement was about the third robot's credential, not its own.&lt;/p&gt;

&lt;p&gt;The third robot proved control of its key and supplied an inspection statement bound to that same key. The statement described a dry-food compartment, a nominal twelve-kilogram payload, and forty-two liters of cargo space.&lt;/p&gt;

&lt;p&gt;The hatch had learned something useful. It had not learned everything.&lt;/p&gt;

&lt;p&gt;Was this the vehicle assigned to today's order? Was its compartment actually empty? Was the radio endpoint really the dented machine waiting in front of the hatch? Those still belonged to the bakery's order system, sensors, and handoff controller.&lt;/p&gt;

&lt;p&gt;In the story, those separate checks also passed. The controller opened the hatch for the quiet robot.&lt;/p&gt;

&lt;p&gt;Mara came downstairs just as the last box disappeared.&lt;/p&gt;

&lt;p&gt;"Did you get its serial number?" she asked.&lt;/p&gt;

&lt;p&gt;"I did not need its entire life story," the hatch replied.&lt;/p&gt;

&lt;p&gt;That last sentence is the future I want to explore. It is also where the current software still has work to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would make this future possible?
&lt;/h2&gt;

&lt;p&gt;If independently operated machines routinely meet, they need a way to check the source of a message and connect relevant information to the endpoint speaking now. They also need shared trust arrangements, compatible communication links, and domain-specific meanings for the information they exchange.&lt;/p&gt;

&lt;p&gt;That is a prerequisite for this particular multi-operator scenario—not a claim that RIP itself must become mandatory, or that a global fleet database is always the wrong architecture.&lt;/p&gt;

&lt;p&gt;RIP is an experimental attempt at a small part of the problem: local endpoint authentication and independently defined, authenticated information. It builds its current exchange on EDHOC, rather than requiring every integrator to design a new handshake. Authorization, safety decisions, and robot control remain outside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A smaller experiment you can actually run
&lt;/h2&gt;

&lt;p&gt;The accompanying &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/articles/examples/bakery-2035.mjs" rel="noopener noreferrer"&gt;local example&lt;/a&gt; implements only the cryptographic part of the story. It uses SDK &lt;code&gt;0.2.0-alpha.2&lt;/code&gt;, real key exchange and signatures, synthetic issuers, and three separate sessions in one Node process. There is no radio, camera, door, order backend, or physical robot.&lt;/p&gt;

&lt;p&gt;The fixture provisions issuer trust locally before the robots meet. It does not trust a key merely because a stranger advertises it.&lt;/p&gt;

&lt;p&gt;The results are intentionally less dramatic than the story:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Candidate&lt;/th&gt;
&lt;th&gt;Endpoint authentication&lt;/th&gt;
&lt;th&gt;Cargo statement&lt;/th&gt;
&lt;th&gt;Package handoff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;B1&lt;/td&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;td&gt;Not provided&lt;/td&gt;
&lt;td&gt;Not decided by this example&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B2&lt;/td&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;td&gt;Failed: the signed subject belongs to B3&lt;/td&gt;
&lt;td&gt;Not decided by this example&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B3&lt;/td&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;td&gt;Verified for B3's authenticated key&lt;/td&gt;
&lt;td&gt;Not decided by this example&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three endpoints authenticate. Only one supplies a matching cargo statement. Neither result commands the hatch to open.&lt;/p&gt;

&lt;p&gt;To reproduce the example, use Node.js 22 or later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ryo-stst/robot-identity-protocol.git
&lt;span class="nb"&gt;cd &lt;/span&gt;robot-identity-protocol
git checkout v0.2.0-alpha.2
npm ci
npm run example:bakery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The source and runnable fixture are included in the &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/releases/tag/v0.2.0-alpha.2" rel="noopener noreferrer"&gt;alpha release&lt;/a&gt;. Prefer clicking first? The &lt;a href="https://robot-identity-field-lab.sato-kit111.chatgpt.site/" rel="noopener noreferrer"&gt;Field Lab&lt;/a&gt; offers a simpler two-peer walkthrough and an optional cross-domain experiment. The bakery scenario itself runs locally with the command above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization is a statement, not a new handshake
&lt;/h2&gt;

&lt;p&gt;The bakery example chooses a fictional schema namespace:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://example.com/bakery/cargo-capability/v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Its domain content is deliberately small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nominalPayloadKg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cargoBayVolumeL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"compartmentClass"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dry-food"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK places that content inside a COSE-signed statement with an issuer, subject key, schema, and issue/expiry times. The receiving application verifies the signature, whether it trusts that issuer for this schema, the time interval, and whether the subject matches the authenticated peer key.&lt;/p&gt;

&lt;p&gt;No RIP maintainer has to approve a universal bakery vocabulary. A domain defines its own schema and validators. An identity issuer is not automatically a trusted cargo inspector.&lt;/p&gt;

&lt;p&gt;There is an important catch: a signature proves what the issuer asserted, not that the assertion is sensible or physically true. The example also signs a negative payload capacity. Generic signature verification accepts it; a domain validator must reject it. Nominal capacity is not today's remaining capacity, and an unexpired certificate is not a fresh load measurement.&lt;/p&gt;

&lt;p&gt;A separate &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/domain-exchange.md" rel="noopener noreferrer"&gt;cross-domain experiment&lt;/a&gt; makes that distinction executable: it authenticates&lt;br&gt;
delivery and inspection endpoints, reports unknown domain requests as unsupported,&lt;br&gt;
and verifies known statements only after an explicitly installed validator and&lt;br&gt;
schema-scoped issuer trust. It changes no core handshake messages. Its wrapper&lt;br&gt;
exchange is local-test-only and does not yet provide encrypted or authenticated&lt;br&gt;
application transport. This is separate from the bakery fixture above; the Field&lt;br&gt;
Lab runs the cross-domain fixture with synthetic peers inside one server process.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bakery should not become a tracking service
&lt;/h2&gt;

&lt;p&gt;A fleet may need a permanent internal asset number for repairs, ownership, or recovery. The bakery may only need to authenticate a credential and check a narrowly scoped assertion. Those are different requirements.&lt;/p&gt;

&lt;p&gt;Current RIP does &lt;strong&gt;not&lt;/strong&gt; require a manufacturer serial or a global physical-robot number. It &lt;strong&gt;does&lt;/strong&gt; expose the authenticated key identifier to its counterpart. Reusing that key makes visits linkable. The example runs B3 twice and asserts exactly that: new exchange, same key identifier.&lt;/p&gt;

&lt;p&gt;So the hatch's line about not needing a life story is a design goal, not a claim that this SDK already prevents tracking.&lt;/p&gt;

&lt;p&gt;Possible future integrations could keep durable asset records private and use separately provisioned, scoped or short-lived credentials externally. But relabeling one unchanged key is not privacy. Rotation, issuer trust, offline status, misuse prevention, and information leaked by radio addresses or movement all need design. The current SDK does not implement that lifecycle or cryptographic selective disclosure.&lt;/p&gt;

&lt;p&gt;The optional statements are signed, not encrypted. A protected application channel is still needed for confidential transfer. Putting a serial, route, or passenger record into an "optional" field does not make it private. See the &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/privacy-and-identifiers.md" rel="noopener noreferrer"&gt;identifier and disclosure design note&lt;/a&gt; for the current boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  The next street over
&lt;/h2&gt;

&lt;p&gt;Imagine the same morning from a different machine's point of view.&lt;/p&gt;

&lt;p&gt;A small autonomous shuttle approaches a wet intersection. It might benefit from trustworthy, timely information about another vehicle. It does not automatically need that vehicle's VIN, passenger names, or journey history.&lt;/p&gt;

&lt;p&gt;A vehicle domain could define occupancy state, measured mass, a condition-dependent braking estimate, hazard category, or an emergency-service credential. But each needs an appropriate source, freshness rules, an unknown state, and a reason for disclosure. A certified emergency-service role and "responding to an emergency right now" are different assertions. None is a steering command.&lt;/p&gt;

&lt;p&gt;This is not an empty standards landscape: &lt;a href="https://www.its.dot.gov/research-areas/Interoperable-Connectivity-Spectrum/" rel="noopener noreferrer"&gt;USDOT describes SCMS&lt;/a&gt; as credential infrastructure for trusted V2X communication with privacy. RIP is not a replacement for those systems or a demonstrated road-safety solution. High-rate road broadcasts may need a very different integration from a one-to-one bakery encounter.&lt;/p&gt;

&lt;p&gt;Now imagine a hospital borrowing delivery robots during a busy week. Its corridor system may need a maintenance or cleaning assertion, not the patient's name carried in the next parcel. That is another story—and another domain profile—not a reason to put every industry's vocabulary into the authentication core.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful machine does not have to tell you everything
&lt;/h2&gt;

&lt;p&gt;The interesting future is not one in which every robot broadcasts a permanent name and its entire file to everyone nearby.&lt;/p&gt;

&lt;p&gt;It is one in which a machine can establish an appropriately trusted conversation, share the information needed for that encounter, and let the surrounding application make its own decisions.&lt;/p&gt;

&lt;p&gt;RIP can already demonstrate a small part of that conversation. Physical association, privacy-preserving credential management, and deployment-specific safety remain work to be done. It is an experimental alpha, without independent interoperability or security certification.&lt;/p&gt;

&lt;p&gt;If you operate robots, the most useful question is not "Would you adopt another protocol?"&lt;/p&gt;

&lt;p&gt;It is: &lt;strong&gt;What is the smallest fact a stranger's machine needs to prove to yours—and what should it never learn?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>opensource</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Which Robot Did I Authenticate? Simulating Physical Binding with Robot Identity Protocol (RIP)</title>
      <dc:creator>ryo-stst</dc:creator>
      <pubDate>Mon, 24 Aug 2026 22:44:34 +0000</pubDate>
      <link>https://dev.to/ryo-stst/which-robot-did-i-authenticate-simulating-physical-binding-with-robot-identity-protocol-rip-4bfc</link>
      <guid>https://dev.to/ryo-stst/which-robot-did-i-authenticate-simulating-physical-binding-with-robot-identity-protocol-rip-4bfc</guid>
      <description>&lt;p&gt;&lt;em&gt;Updated September 27, 2026 for SDK &lt;code&gt;0.2.0-alpha.2&lt;/code&gt; and the current Field Lab. The authentication baseline uses EDHOC; the older v0.1 JSON exchange is legacy, with no automatic fallback. The AI-generated cover is a conceptual illustration, not a screenshot or a claim that appearance proves identity.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Robots are moving out of fenced, single-vendor environments.&lt;/p&gt;

&lt;p&gt;Imagine a world in which Physical AI is part of ordinary life: delivery robots arrive at stores, autonomous vehicles share roads, drones enter managed airspace, service robots move through hospitals, and machines from different manufacturers meet for a few seconds to exchange goods or information.&lt;/p&gt;

&lt;p&gt;In that world, a shared backend cannot always answer every trust question. Two machines may be operated by different companies. They may meet for the first time. Connectivity may be intermittent. A warehouse, vehicle, or robot still needs to answer a smaller and more immediate question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Who is the endpoint speaking to me right now, and what authenticated information is attached to that identity?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started &lt;strong&gt;Robot Identity Protocol (RIP)&lt;/strong&gt; as an experimental, vendor-neutral protocol for that interaction. The design does not require a global robot database or a mandatory SaaS call during authentication. It is transport-independent, local-first, and intentionally limited to authentication and authenticated information—not authorization, robot control, or business decisions.&lt;/p&gt;

&lt;p&gt;This post explores a deceptively difficult case: when three robots are nearby, does authenticating a radio endpoint tell us which physical robot we are looking at?&lt;/p&gt;

&lt;p&gt;Short answer: &lt;strong&gt;no&lt;/strong&gt;. Endpoint authentication, issuer-signed business information, and a local sensor's physical correlation are three different kinds of evidence. The demo keeps them separate.&lt;/p&gt;

&lt;p&gt;If you want to see the idea first, open &lt;a href="https://robot-identity-field-lab.sato-kit111.chatgpt.site/" rel="noopener noreferrer"&gt;RIP Field Lab&lt;/a&gt; and press &lt;strong&gt;Run demo&lt;/strong&gt;. It runs on the same page. Start with two peers; add more candidates and optional information after that first exchange.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scenario: three nearby robots, one authentication target
&lt;/h2&gt;

&lt;p&gt;The Field Lab starts with A and B1. Under &lt;strong&gt;Go further&lt;/strong&gt;, enable &lt;strong&gt;Show three candidates&lt;/strong&gt; to add B2 and B3, then select one candidate. These labels identify objects in the demonstration; they are not authenticated robot names or measured physical positions.&lt;/p&gt;

&lt;p&gt;Discovery is outside the authentication handshake. In a real deployment, a bearer adapter would discover endpoints through an appropriate local link. The current demo simulates candidate discovery: it does not scan Bluetooth, Wi-Fi, or a camera. Seeing an advertisement does not authenticate its claimed name, location, or capabilities.&lt;/p&gt;

&lt;p&gt;Suppose A selects B3. The current baseline uses &lt;a href="https://www.rfc-editor.org/rfc/rfc9528.html" rel="noopener noreferrer"&gt;EDHOC (RFC 9528)&lt;/a&gt;, an existing authenticated key-exchange protocol, instead of inventing a new signature transcript. RIP fixes a small application profile: method 0, cipher suite 0, CCS credentials, and three messages.&lt;/p&gt;

&lt;p&gt;Here is the exchange, followed by local results—not a broadcast authentication of all three candidates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A discovers candidates B1, B2, B3 (simulated; not authenticated)
A selects B3; B1 and B2 remain outside this exchange

A (initiator) ── EDHOC message_1 ──&amp;gt; B3 (responder)
A             &amp;lt;── EDHOC message_2 ── B3
A locally verifies B3's credential and key proof
A             ── EDHOC message_3 ──&amp;gt; B3
                                    B3 locally verifies A

A has a local report about B3; B3 has a local report about A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is mutual authentication: &lt;strong&gt;both peers use the SDK&lt;/strong&gt;, or would need a compatible implementation. Initiator and responder are exchange roles, not different kinds of machine. Independent-implementation interoperability is still unverified.&lt;/p&gt;

&lt;p&gt;The peers must already have trustworthy local material: pinned peer keys or issuer-signed identity credentials with locally configured issuer trust. Receiving a new key over discovery is not enough to trust it. No global directory lookup is required.&lt;/p&gt;

&lt;p&gt;An excerpt from A's local report looks like this; the shortened key ID is illustrative:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rip-edhoc-ccs-0.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"initiator"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"peerKeyId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"urn:rip:key:sha256:..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"identity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trust"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"locally-resolved-credential"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"physicalBinding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not-evaluated"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"outside-protocol"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"revocation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not-checked"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"peerAcceptanceConfirmed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full &lt;code&gt;peerKeyId&lt;/code&gt; distinguishes the authenticated keys behind B1, B2, or B3 in this run. It does not by itself establish a legal organization, a manufacturer-certified serial number, or a unique physical body.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;physicalBinding: "not-evaluated"&lt;/code&gt; is an honest boundary, not an error. A camera track and an authenticated endpoint still need an independently justified association. &lt;code&gt;peerAcceptanceConfirmed: false&lt;/code&gt; matters too: this SDK does not expose EDHOC message_4 or an application acknowledgement. A's local success report does not prove that B3 received and accepted the final message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding physical binding without hard-coding one sensor
&lt;/h2&gt;

&lt;p&gt;Warehouses, road vehicles, drones, and home robots do not share one universal sensor or threat model. Making a camera, QR code, UWB radio, or any other single mechanism mandatory would reduce the protocol's usefulness.&lt;/p&gt;

&lt;p&gt;Instead, RIP keeps physical correlation outside the authentication core. The current optical experiment runs &lt;strong&gt;after&lt;/strong&gt; the EDHOC exchange; it is not an extra field inserted into an unauthenticated advertisement.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Complete the local authenticated exchange.&lt;/li&gt;
&lt;li&gt;Create a fresh 32-byte optical challenge.&lt;/li&gt;
&lt;li&gt;Derive a response using an EDHOC-exported session secret and HMAC-SHA-256 over the profile, target key ID, and challenge. Both authenticated peers can derive the matching response; the secret is not returned or logged.&lt;/li&gt;
&lt;li&gt;Compare that expected response with a local sensor observation and its candidate tracks. The demo supplies a simulated observation, not a camera measurement.&lt;/li&gt;
&lt;li&gt;Report &lt;code&gt;correlated&lt;/code&gt;, &lt;code&gt;ambiguous&lt;/code&gt;, or &lt;code&gt;mismatch&lt;/code&gt; separately from core authentication.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This replaces the old v0.1 public-input hash experiment. A hash calculated only from public values is not a secure optical challenge-response. The new &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/spec/edhoc-baseline-v0.2.md#optional-optical-experiment" rel="noopener noreferrer"&gt;experimental profile&lt;/a&gt; uses a private-use EDHOC exporter label, not a registered global extension.&lt;/p&gt;

&lt;p&gt;For a single matching simulated track, the optional result is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"correlated"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"localTrackId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"simulated-track-3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"assurance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sensor-correlation-only"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"relayResistance"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not-established"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"physicalIdentityProven"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;simulated-track-3&lt;/code&gt; is a local observation label, not a global identity. Even a matching secret-derived response does not prevent someone from relaying the optical signal, compromising a sensor, or creating an ambiguous observation. The core report still says physical binding was not evaluated by the authentication core.&lt;/p&gt;

&lt;p&gt;A production sensor profile would need authenticated observations, one-time challenge consumption, capture deadlines, calibration, ambiguity handling, privacy rules, and explicit relay defenses. Those are &lt;strong&gt;not implemented&lt;/strong&gt; by this helper. Ranging, direction, acoustic, or multi-modal profiles are possible future integrations, not current hardware support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business-specific information is also extensible
&lt;/h2&gt;

&lt;p&gt;Authentication answers who controls the endpoint key. Real operations usually need additional facts.&lt;/p&gt;

&lt;p&gt;RIP does not standardize every warehouse, road, aviation, healthcare, or industrial field. A domain defines and versions its own schema in a namespace it controls. No central RIP approval is required.&lt;/p&gt;

&lt;p&gt;The baseline now implements &lt;strong&gt;issuer-signed COSE_Sign1 statements&lt;/strong&gt;. A statement has &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;subject&lt;/code&gt;, &lt;code&gt;issuer&lt;/code&gt;, &lt;code&gt;issuedAt&lt;/code&gt;, &lt;code&gt;expiresAt&lt;/code&gt;, and domain-owned &lt;code&gt;content&lt;/code&gt;. Times are Unix milliseconds. A logistics statement could use schema &lt;code&gt;https://example.com/robot/payload/v1&lt;/code&gt; with content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nominalPayloadKg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is only the content inside a signed statement, not an authentication message or a complete wire payload. &lt;code&gt;example.com&lt;/code&gt; is illustrative; it is not a required service.&lt;/p&gt;

&lt;p&gt;The verifier checks the signature, whether the issuer is locally trusted for that exact schema, the validity interval, and whether the statement's subject matches the &lt;strong&gt;authenticated peer key&lt;/strong&gt;. Trusting an issuer for identity does not automatically trust it to certify payload capacity.&lt;/p&gt;

&lt;p&gt;The domain still defines units, meaning, freshness requirements, and which issuers are appropriate. An 80 kg &lt;em&gt;nominal capacity&lt;/em&gt; assertion is not a live measurement of remaining capacity. A signature authenticates the issuer's assertion; it does not prove that the physical claim is true.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;v0.2.0-alpha.2&lt;/code&gt;, an optional &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/domain-exchange.md" rel="noopener noreferrer"&gt;cross-domain experiment&lt;/a&gt;&lt;br&gt;
shows a delivery endpoint meeting an inspection endpoint. Both authenticate;&lt;br&gt;
unknown domain requests are reported as unsupported. Explicitly installing the&lt;br&gt;
other domain's validator and issuer trust makes its statement verifiable without&lt;br&gt;
changing the core handshake. The Field Lab runs this with synthetic peers inside&lt;br&gt;
one server process. The extension envelopes themselves remain unsigned and&lt;br&gt;
unencrypted: this is not a production robot-to-robot application channel.&lt;/p&gt;

&lt;p&gt;For a more story-led example, &lt;a href="https://dev.to/ryo-stst/three-robots-arrive-at-a-bakery-which-one-gets-the-package-4b8h"&gt;Three Robots Arrive at a Bakery&lt;/a&gt;&lt;br&gt;
imagines a morning in 2035, then separates that fiction from a runnable experiment.&lt;/p&gt;

&lt;p&gt;These statements are separate from the EDHOC handshake and bound to its authenticated subject, not automatically to one specific session or a fresh sensor reading. They are signed, &lt;strong&gt;not encrypted&lt;/strong&gt;. Confidential transfer and selective disclosure need separate application design; the current SDK does not implement them.&lt;/p&gt;

&lt;p&gt;Here are several possible scenarios.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Warehouse and delivery handoff
&lt;/h3&gt;

&lt;p&gt;A warehouse receives pickup robots operated by multiple delivery companies. After authenticating a robot endpoint, the warehouse may request a logistics schema containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nominal payload capacity;&lt;/li&gt;
&lt;li&gt;cargo-bay dimensions;&lt;/li&gt;
&lt;li&gt;temperature-control capability;&lt;/li&gt;
&lt;li&gt;hazardous-goods compatibility;&lt;/li&gt;
&lt;li&gt;most recent inspection status;&lt;/li&gt;
&lt;li&gt;the delivery operator or service class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The warehouse's own application—not RIP—decides whether to release or load a parcel.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Store and restaurant pickup
&lt;/h3&gt;

&lt;p&gt;A store may need to authenticate a pickup endpoint and then associate it with a nearby machine. Endpoint authentication alone does not solve a copied visual code or relay attack. A commerce-specific schema could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;order pickup role;&lt;/li&gt;
&lt;li&gt;operator reference;&lt;/li&gt;
&lt;li&gt;cargo compartment type;&lt;/li&gt;
&lt;li&gt;short-lived pickup entitlement reference;&lt;/li&gt;
&lt;li&gt;supported handoff mechanism.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The actual order authorization remains a separate business decision.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Mixed autonomous traffic
&lt;/h3&gt;

&lt;p&gt;Vehicles from different manufacturers may exchange authenticated information useful to cooperative planning, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vehicle mass class;&lt;/li&gt;
&lt;li&gt;braking-performance class;&lt;/li&gt;
&lt;li&gt;automation mode;&lt;/li&gt;
&lt;li&gt;dimensions or maneuverability class;&lt;/li&gt;
&lt;li&gt;hazardous or oversized load indicators;&lt;/li&gt;
&lt;li&gt;emergency-vehicle role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some data might be public and some restricted. Disclosure and policy rules belong to the relevant vehicle or regulatory profile, not the RIP core, and selective disclosure is not implemented here. These are potential inputs to a separately validated driving system, not a demonstrated improvement in braking, safety, or congestion.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Drones and managed airspace
&lt;/h3&gt;

&lt;p&gt;A drone or local airspace Verifier could use a jurisdiction-specific schema for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;operator credential references;&lt;/li&gt;
&lt;li&gt;vehicle class;&lt;/li&gt;
&lt;li&gt;permitted flight category;&lt;/li&gt;
&lt;li&gt;remote identification compatibility;&lt;/li&gt;
&lt;li&gt;inspection or maintenance status;&lt;/li&gt;
&lt;li&gt;emergency capability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RIP should connect to applicable aviation standards rather than inventing a replacement for them.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Hospitals and care facilities
&lt;/h3&gt;

&lt;p&gt;Service robots moving between organizations may need to present information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;device class;&lt;/li&gt;
&lt;li&gt;maintenance and calibration status;&lt;/li&gt;
&lt;li&gt;cleaning or sterile-handling status;&lt;/li&gt;
&lt;li&gt;approved operating-area class;&lt;/li&gt;
&lt;li&gt;responsible operator reference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Patient data and the decision to enter a restricted zone remain outside the authentication protocol.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Construction, factories, and mines
&lt;/h3&gt;

&lt;p&gt;Temporary interaction between machines from different vendors could require authenticated attributes including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rated load;&lt;/li&gt;
&lt;li&gt;tool or attachment class;&lt;/li&gt;
&lt;li&gt;inspection status;&lt;/li&gt;
&lt;li&gt;hazardous-area compatibility;&lt;/li&gt;
&lt;li&gt;emergency-stop interface profile;&lt;/li&gt;
&lt;li&gt;site-specific training or operator credential references.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, a site's safety controller consumes the evidence and decides what is permitted. RIP does not issue the command.&lt;/p&gt;

&lt;p&gt;These examples are intentionally not core schemas. A trade group, regulator, customer consortium, or open-source community can define and version them independently.&lt;/p&gt;

&lt;p&gt;Unlike the earlier article version, issuer signature, schema-specific trust, subject binding, and validity checks are now implemented. Domain-content validation, production issuer onboarding, and certification are not supplied by that generic verifier.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why no global robot database?
&lt;/h2&gt;

&lt;p&gt;A global registry may be useful in some deployments, but making it mandatory creates a central availability, governance, privacy, and market-control dependency.&lt;/p&gt;

&lt;p&gt;RIP instead lets each verifier use locally provisioned trust material. A separate offline status helper can check signed status snapshots, but it cannot discover a revocation newer than its local knowledge. Authentication reports still say &lt;code&gt;revocation: "not-checked"&lt;/code&gt;; the helper is not automatically part of the handshake.&lt;/p&gt;

&lt;p&gt;A future SaaS product could distribute credentials, status bundles, scenarios, or compatibility reports. Those are product directions, not capabilities already delivered by the Field Lab. Two endpoints should not need to contact one specific global service every time they authenticate.&lt;/p&gt;

&lt;p&gt;This also keeps the open protocol useful to competing vendors. The business opportunity can exist around management, testing, compatibility, reporting, and lifecycle tooling without placing the authentication exchange behind one company's API.&lt;/p&gt;
&lt;h2&gt;
  
  
  What RIP deliberately does not decide
&lt;/h2&gt;

&lt;p&gt;RIP does not answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should this robot receive the package?&lt;/li&gt;
&lt;li&gt;May this vehicle enter the lane?&lt;/li&gt;
&lt;li&gt;Is this machine safe enough for the task?&lt;/li&gt;
&lt;li&gt;May this robot open the door?&lt;/li&gt;
&lt;li&gt;Should an autonomous system trust the claimed payload capacity?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It produces authentication evidence and attached information. Authorization, operational policy, safety logic, and control remain separate systems.&lt;/p&gt;

&lt;p&gt;That separation is essential. A valid identity is not the same thing as permission, safety, or suitability.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try the experiment
&lt;/h2&gt;

&lt;p&gt;Start with the browser walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://robot-identity-field-lab.sato-kit111.chatgpt.site/" rel="noopener noreferrer"&gt;RIP Field Lab&lt;/a&gt; and press &lt;strong&gt;Run demo&lt;/strong&gt;. It stays on the same page.&lt;/li&gt;
&lt;li&gt;Follow the three messages between A and B1. &lt;strong&gt;Pause&lt;/strong&gt; the walkthrough or open a step to inspect its payload and local verification result. &lt;strong&gt;Show all results&lt;/strong&gt; skips the playback.&lt;/li&gt;
&lt;li&gt;Only then open &lt;strong&gt;Go further&lt;/strong&gt;. Choose &lt;strong&gt;Show three candidates&lt;/strong&gt;, select B3, and press &lt;strong&gt;Run a new demo&lt;/strong&gt;. B1 and B2 remain outside that exchange.&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;Add an issuer-signed domain claim&lt;/strong&gt; or &lt;strong&gt;Add simulated optical correlation&lt;/strong&gt;, one at a time. Run a new demo and compare the optional evidence with the core result.&lt;/li&gt;
&lt;li&gt;Try a failure case and inspect where verification stops.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The demo executes real EDHOC cryptography with simulated peers in one server process. The on-screen playback is deliberately slowed down for explanation; it is not a measurement of radio latency. &lt;strong&gt;Replay demo&lt;/strong&gt; replays the same result, while &lt;strong&gt;Run a new demo&lt;/strong&gt; creates a fresh run. No radio, camera, physical robot, or user-supplied implementation is connected. This is a learning walkthrough, not yet a hosted hardware or custom-code testbed.&lt;/p&gt;

&lt;p&gt;To run your own local experiment, install Node.js 22 or later, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ryo-stst/robot-identity-protocol.git
&lt;span class="nb"&gt;cd &lt;/span&gt;robot-identity-protocol
npm ci
npm run example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internet is needed to download the repository and dependencies, not to run the local exchange. Expect two local reports with different &lt;code&gt;peerKeyId&lt;/code&gt; values and the same &lt;code&gt;exchangeId&lt;/code&gt;. That exchange ID is a diagnostic transcript identifier, not a transferable authentication proof.&lt;/p&gt;

&lt;p&gt;Choose just one next command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm run example:claims&lt;/code&gt; — verify an issuer-signed domain statement.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run example:domains&lt;/code&gt; — compare unsupported and explicitly understood domain information.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run example:optical&lt;/code&gt; — multiple candidates and simulated optical correlation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run example:processes&lt;/code&gt; — two local Node processes, each keeping its own private key. The trusted demo harness provisions public keys; this is IPC, not a radio adapter or independent implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open specification and TypeScript reference SDK are available in the &lt;a href="https://github.com/ryo-stst/robot-identity-protocol" rel="noopener noreferrer"&gt;Robot Identity Protocol repository&lt;/a&gt; under Apache-2.0. The alpha package is distributed through GitHub Releases, not the npm registry. See the &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/QUICKSTART.md" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt;, &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/spec/edhoc-baseline-v0.2.md" rel="noopener noreferrer"&gt;current profile&lt;/a&gt;, and &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/integration.md" rel="noopener noreferrer"&gt;integration guide&lt;/a&gt; for install instructions and extension boundaries.&lt;/p&gt;

&lt;p&gt;RIP is an experimental alpha, not an adopted standard. Independent EDHOC interoperability, real radio adapters, hardware-backed identity keys, confidential application messaging, and an independent security review remain &lt;a href="https://github.com/ryo-stst/robot-identity-protocol/blob/main/docs/readiness.md" rel="noopener noreferrer"&gt;readiness gates&lt;/a&gt;. Using an existing standard does not certify this integration. RIP is not a certification program, safety controller, or replacement for applicable regulation.&lt;/p&gt;

&lt;p&gt;The most useful feedback now is concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which real robot-to-robot or robot-to-infrastructure interaction needs this separation between endpoint identity and physical body?&lt;/li&gt;
&lt;li&gt;Which binding method—optical, ranging, direction, acoustic, or multi-modal—could be deployed in your environment?&lt;/li&gt;
&lt;li&gt;Which domain attributes must be authenticated, and who should define their schemas and issuer policies?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these questions match a system you are building, please open an issue in the repository and describe the interaction and threat model without including sensitive deployment details.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>opensource</category>
      <category>security</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
