﻿<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc iprnotified="no" ?>
<?rfc strict="no" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" consensus="true" docName="draft-moskowitz-drip-a2x-adhoc-session-01"
	category="std" ipr="trust200902" obsoletes="" submissionType="IETF"
	xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3">

<front> <title abbrev="A2X AdHoc sessions">Aircraft to Anything AdHoc Broadcasts and Session</title>
    <seriesInfo name="Internet-Draft" value="draft-moskowitz-drip-a2x-adhoc-session-01"/>
	<author fullname="Robert Moskowitz" initials="R" surname="Moskowitz">
    <organization>HTT Consulting</organization>
    <address>
      <postal> 
	    <street></street>
        <city>Oak Park</city>
        <region>MI</region>
        <code>48237</code>
        <country>USA</country>
      </postal>
      <email>rgm@labs.htt-consult.com</email>
	</address>
	</author>
	<author fullname="Stuart W. Card" initials="S." surname="Card">
	<organization>AX Enterprize</organization>
	<address>
	  <postal>
	    <street>4947 Commercial Drive</street>
	    <city>Yorkville</city>
	    <region>NY</region>
	    <code>13495</code>
	    <country>USA</country>
	  </postal>
	  <email>stu.card@axenterprize.com</email>
	</address>
	</author>
	<author fullname="Andrei Gurtov" initials="A." surname="Gurtov">
	<organization>Linköping University</organization>
	<address>
	  <postal>
		<street>IDA</street>
		<city>Linköping</city>
		<code>58183</code>
		<country>Sweden</country>
	  </postal>
	  <email>gurtov@acm.org</email>
	</address>
	</author>
    <date year="2023" />
   <area>Internet</area>
   <workgroup>DRIP</workgroup>
    <keyword>RFC</keyword>
     <keyword>Request for Comments</keyword>
     <keyword>I-D</keyword>
     <keyword>Internet-Draft</keyword>
     <keyword>DRIP</keyword>
<abstract>
<t>
	Aircraft-to-anything (A2X) communications are often single 
	broadcast messages that need to be signed  with expensive (in cpu 
	and payload size) asymmetric cryptography.  There are also frequent 
	cases of extended exchanges between two devices where a lower cost 
	symmetric key protect flow can be used.
</t>
<t>
	This document shows both how to secure A2X broadcast messages with 
	DRIP DET and Endorsement objects and to leverage these to create an 
	AdHoc session key for just such a communication flow.
</t>
</abstract>
</front>
<middle>   
<section numbered="true" toc="default"> <name>Introduction</name>
<t> 
	Aircraft-to-anything (A2X) communications are currently an open 
	area to debate and research.  There are questions as to whether 
	air-to-ground or air-to-air will prevail as the driving force and 
	thus the impetus for solutions.  One real need is in air-to-air 
	Detect And Avoid (DAA).  There are current DAA approaches for 
	general aviation over Automatic Dependent Surveillance–Broadcast 
	(ADS-B); this is unlikely to scale to the needs of Unmanned 
	Aircraft (UA).  UA-to-UA and UA - to - General Aviation will drive 
	a different solution.
</t>
<t>
	Although all aspects of this document is applicable to all 
	aircraft, the language will be Uncrewed Aircraft (UA) slanted. This 
	is to avoid any confusion within the body of the document about 
	what type of aircraft is under discussion.
</t>
<t>
	A prevailing current approach is to leverage the Broadcast Remote 
	ID (B-RID) messages, as they provide situational awareness in the 
	Vector/Location ASTM messages <xref target="F3411-22a" 
	format="default"/>.  But this message is not adequate by itself for 
	situational awareness as it does not identify the UA (other than 
	the wireless media MAC address).  Thus although it is possible for 
	UAs act on a set of B-RID messages, this document will define 
	specific messages that are directly actionable by listening UAs.
</t>
<t>
	The messages defined in this document are only possible by use of 
	the DRIP Entity Tags (DET) <xref target="RFC9374" 
	format="default"/> and its underlying EdDSA25519 keypair.  It also 
	relies on DET endorsement hierarchy for trust in the DETs.
</t>
</section>
<section anchor="terms" numbered="true" toc="default"> <name>Terms and Definitions</name>
<section numbered="true" toc="default"> <name>Requirements Terminology</name>
	<t>
		The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 
		NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", 
		"MAY", and "OPTIONAL" in this document are to be interpreted as 
		described in BCP 14 <xref target="RFC2119" /> <xref 
		target="RFC8174" /> when, and only when, they appear in all 
		capitals, as shown here.
	</t>
</section>
<section anchor="notation" title="Notation">
	<dl newline="true" spacing="normal">
		<dt>|</dt>
		<dd>
			Signifies concatenation of information (e.g., X | Y is the             
			concatenation of X with Y).
		</dd>
		<dt>Ltrunc (x, K)</dt>
		<dd>
			Denotes the lowest order K bits of the input x.
		</dd>
	</dl>
</section>
<section numbered="true" toc="default"> <name>Definitions</name>
	<dl newline="true" spacing="normal">
		<dt>A2X</dt>
		<dd>
			Communications from an aircraft to any other device.  Be it 
			another aircraft or some ground equipment.
		</dd>
		<dt>cSHAKE customizable SHAKE function (cSHAKE) <xref 
			target="DOI_10.6028_NIST.SP.800-185" format="default"/>:</dt>
		<dd>
			Extends the SHAKE scheme <xref target="DOI_10.6028_NIST.FIPS.202" 
			format="default"/> to allow users to customize their 
			use of the SHAKE function.
		</dd>
        <dt>KECCAK Message Authentication Code (KMAC) <xref 
			target="DOI_10.6028_NIST.SP.800-185" format="default"/>:</dt>
        <dd>
			A Pseudo Random Function (PRF) and keyed hash function 
			based on KECCAK.
		</dd>
 	</dl>
</section>
</section>
<section anchor="BA2X" numbered="true" toc="default"> <name>Broadcast A2X messaging</name>
<t>
	The basic view of Aircraft-to-Anything (A2X) communications is 
	broadcast based.  What is there within radio range of a UA? In most 
	situations, the UA has no apriori knowledge of other systems around 
	it.  Thus the UA would just broadcast any information of general 
	knowledge, like "Hello, I am me and I am here. Oh, and I am out of 
	fuel and crashing."
</t>
<t>
	Thus the first concern is to be able to create a single, trusted 
	message from the UA for all devices around it.  The following 
	sections detail the pieces of such a trusted message.
</t>
<section anchor="CHDA-UA" numbered="true" toc="default"> <name>The Compressed DRIP HDA Endorsement of UA DET</name>
<t>
	The DRIP HDA Endorsement of UA DET is a DRIP Link authentication message 
	as defined in <xref target="I-D.ietf-drip-auth" section="4.2" 
	format="default"/>.  It is the primary trust proof of UA DETs.  This 
	object is 136 bytes, but in the specific context where the UA DET 
	has the same first 64 bits as the HDA DET (typical case), the 16 
	byte UA DET can be derived from the HDA DET and the UA HI, 
	compressing the object to 120 bytes.
</t>
<table anchor="hda-ua-tbl"> <name>120-Byte Compressed HDA on UA Endorsement</name>
  <thead>
    <tr>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>

      <td>4</td>
      <td>VNB Timestamp</td>
      <td>Current time at signing, set by HDA</td>
    </tr>
    <tr>
      <td>4</td>
      <td>VNA Timestamp</td>
      <td>Timestamp denoting recommended time to trust Endorsement, 
          set by HDA</td>
    </tr>
    <tr>
      <td>32</td>
      <td>HI of UA</td>
      <td>Host Identity of UA</td>
    </tr>
    <tr>
      <td>16</td>
      <td>DET of HDA</td>
      <td>DRIP Entity Tag of HDA</td>
    </tr>
    <tr>
      <td>64</td>
      <td>Signature by HDA</td>
      <td>Signature over preceding fields using the keypair of the HDA DET</td>
    </tr>
  </tbody>
</table>
</section>
<section anchor="UA-A2X" numbered="true" toc="default"> <name>Full UA Signed Evidence of the A2X message</name>
<t>
	The UA can now fully endorse a A2X message by signing it, along 
	with the HDA endorsement of the UA (<xref target="CHDA-UA" 
	format="default"/>).  A Message ID field is needed to distinguish 
	all the multiple messages for this datagram.  The message also 
	needs a Until timestamp for a total of 189 bytes plus n bytes of 
	the actual message:
</t>
<table anchor="ua-full-endors-tbl"> <name>189+n Byte Full UA Signed A2X message</name>
  <thead>
    <tr>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>4</td>
      <td>VNA Timestamp</td>
      <td>Timestamp denoting recommended time to trust Evidence</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Message ID</td>
      <td>A2X Message ID Number</td>
    </tr>
    <tr>
      <td>n</td>
      <td>A2X Message</td>
      <td>Actual A2X Message</td>
    </tr>
    <tr>
      <td>120</td>
      <td>HDA/UA Endorsement</td>
      <td>Compressed HDA on UA Endorsement</td>
    </tr>
    <tr>
      <td>64</td>
      <td>Signature by UA</td>
      <td>Signature over preceding fields using the keypair of the UA DET</td>
    </tr>
  </tbody>
</table>
</section>
<section anchor="CUA-A2X" numbered="true" toc="default"> <name>Compressed UA Signed Evidence of the A2X message</name>
<t>
	The UA also has the option to send a A2X message without the HDA 
	Endorsement (<xref target="CHDA-UA" format="default"/>).  These 
	shorter messages can be alternated with the full messages, based on 
	an assumption that the other parties will receive the full endorsed 
	message either prior or after this shorter message format.  Or a 
	block of these shorter messages could be sent based on other 
	assumptions.  This message is 85 bytes plus n bytes of the actual 
	message, with the average overhead of the 2 messages (1:1 
	transmission) is 137 bytes:
</t>
<table anchor="ua-cmprs-endors-tbl"> <name>85+n Byte Compressed UA Signed A2X message</name>
  <thead>
    <tr>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>4</td>
      <td>VNA Timestamp</td>
      <td>Timestamp denoting recommended time to trust Evidence</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Message ID</td>
      <td>A2X Message ID Number</td>
    </tr>
    <tr>
      <td>n</td>
      <td>A2X Message</td>
      <td>Actual A2X Message</td>
    </tr>
    <tr>
      <td>16</td>
      <td>DET of UA</td>
      <td>DRIP Entity Tag of UA</td>
    </tr>
    <tr>
      <td>64</td>
      <td>Signature by UA</td>
      <td>Signature over preceding fields using the keypair of the UA DET</td>
    </tr>
  </tbody>
</table>
</section>
<section anchor="ipv6-A2X" numbered="true" toc="default"> <name>IPv6 datagram for A2X message via SCHC</name>
<t>
	All the pieces are present in these messages for a SCHC <xref 
	target="RFC8724" format="default" /> process to expand them to 
	multicast addressed IPv6 datagrams.  The destination IPv6 address 
	would be ff02::1 (all nodes), the source address is the UA DET. The 
	protocol would be UDP with the port numbers are still TBD and 
	completely up to the receiving UA.
</t>
<t>
	Thus the A2X application would just be an IPv6 application and A2X 
	could be this broadcast method or a datagram that actually was 
	routed over an IPv6 network.  There is no transmission cost to 
	this, just the SCHC mechanism.  It is completely up to the 
	receiving UA and the sending UA needs not be concerned if this is 
	how its messages are processed.
</t>
</section>
</section>
<section anchor="A2A" numbered="true" toc="default"> <name>Using full Endorsement messaging to set up a A2A session</name>
<t>
	A particular feature of the EdDSA25519 algorithm used for DETs is 
	that EdDSA25519 keys can be converted to X25519 keys per Curve25519 
	<xref target="RFC7748" format="default"/> for use in an ECDH key 
	establishment.  However, the X25519 keys are not enough for key 
	establishment, nonces are needed to make each encounter have unique 
	session keying.  These nonces need to be at least 16 bytes each 
	(from each party in the session).
</t>
<t>
	One use case for this is in DAA. There will probably be a number of 
	messages between two UA during the DAA event.   The DAA event 
	would probably start when each party receives a Vector/Location 
	message showing a potential encounter. If we use the ASTM F3411-22a 
	Vector/Location message, less the timestamp information, along with 
	a 16 byte nonce, we have the beginning of the additional 
	information for this ECDH key establishment and use of the key in a 
	authenticated session.
</t>
<table anchor="ua-nonce-a2a-tbl"> <name>225-Byte Nonce enabled A2A message</name>
  <thead>
    <tr>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>4</td>
      <td>VNA Timestamp</td>
      <td>Timestamp denoting recommended time to trust Evidence</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Message ID</td>
      <td>A2X Message ID Number</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Nonce</td>
      <td>Random Session Nonce</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Vector/Location</td>
      <td>Extracted from ASTM Vector/Location message</td>
    </tr>
    <tr>
      <td>120</td>
      <td>HDA/UA Endorsement</td>
      <td>Compressed HDA on UA Endorsement</td>
    </tr>
    <tr>
      <td>64</td>
      <td>Signature by UA</td>
      <td>Signature over preceding fields using the keypair of the UA DET</td>
    </tr>
  </tbody>
</table>
<t>
	Such an authenticated session would look much like DTLS, needing a 
	Connection ID to map in the systems to the symmetric connection 
	keys and ending in a keyed-MAC.  Note that authentication may be 
	enough and encryption of the message content will rarely be of 
	value.  If specific data elements need confidentiality, they can be 
	encrypted in place using AES-CFB.
</t>
<t>
	Carefully constructed, though still random, nonces can be used to 
	construct a 1-byte Connection ID as follows.  Each V/L message 
	includes a 16 byte nonce that changes regularly, say once a second.  
	In a 16 (or 32) nonce window, the first 4 bits of the nonce MUST be 
	unique.  Then the Connection ID can be:
	.
</t>
<figure anchor="connection-id">
	<artwork align="center" name="" type="" alt="">
<![CDATA[
ConnectionID = ltrunc(othernonce,4)|ltrunc(mynonce,4)
]]>
</artwork>
</figure>
<section anchor="skdf" numbered="true" toc="default"> <name>Session Key Derivation</name>
<t>
	Each UA converts its EdDSA25519 private key to an X25519 private 
	key.  Likewise it converts the received EdDSA25519  key to an 
	X25519 public key (e.g. <xref target="Ed25519_Curve25519" 
	format="default"/>).  These are then used for each UA to compute 
	the X25519 derived shared secret.
</t>
<t>
	
</t>
<t>
	Here, KMAC from <xref target="DOI_10.6028_NIST.SP.800-185" 
	format="default">NIST SP 800-185</xref> is used.  This is a single 
	pass using the underlying cSHAKE function.  The function call is:
</t>
<figure anchor="kdf"> <name>Session Key Derivation Function</name>
<artwork name="" type="" align="left" alt="">
<![CDATA[
     OKM = KMAC128(salt | info, IKM, 128, S)

     Where
     
     IKM     = X25519 ECDH secret | sort(HI-my | HI-other)
     salt    = sort(nonce-my | nonce-other)
     info    = sort(DET-my | DET-other)
     S       = the byte string 01001011 | 01000100 | 01000110
                which is the characters "K", "D", and "F"
                in 8-bit ASCII.
]]>
</artwork>
</figure>
</section>
<section anchor="a2a-msg" numbered="true" toc="default"> <name>A2A Secure Message</name>
<t>
	Now a session message would be (33 bytes plus n bytes of the actual 
	message):
</t>
<table anchor="session-msg-tbl"> <name>31+n Byte A2A secure message</name>
  <thead>
    <tr>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>16</td>
      <td>Destination DET</td>
      <td>DRIP Entity Tag of the destination UA</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Connection ID</td>
      <td>Source UA Connection ID</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Sequence Number</td>
      <td>Source UA Sequence Number</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Message ID</td>
      <td>A2X Message ID Number</td>
    </tr>
    <tr>
      <td>n</td>
      <td>A2A Message</td>
      <td>Actual A2A Message</td>
    </tr>
    <tr>
      <td>12</td>
      <td>MAC by Source</td>
      <td>KMAC on message by Source UA</td>
    </tr>
  </tbody>
</table>
<t>
	Author's Note:  Probably should explicitly include the source DET 
	(rather than a SCHC expansion rule) or at least make it explicit 
	ver part of the SCHC expansion rules.  This is to protect against 
	cases where multiple UA connected to one destination UA and how to 
	manage ConnectionID to avoid collisions in this 1-byte ID.
</t>
</section>
<section anchor="SID-negot" numbered="true" toc="default"> <name>Selection of Nonced Messages</name>
<t>
	Author's Note:  This section needs the state machine clearly drawn 
	out.  Otherwise too hard to follow and implement correctly.
</t>
<t>
	In theory once one UA sends its Nonce Enabled A2A message and 
	received a Nonce Enabled A2A message from a nearby UA, it can 
	immediately set up and use the A2A secure messages in <xref 
	target="a2a-msg" format="default"/>.  In practice messages will not 
	be received and one UA may operate on the basis that a secure 
	session is possible when the other UA does not have the needed 
	information for the secure session.  This section will detail a 
	procedure for UAs to follow to reach that point of common knowledge 
	and thus transition to a secure session.
</t>
<t>
	The Connection ID shown in <xref target="connection-id" 
	format="default"/> is unidirectional.  It is part of a tuple 
	(Source DET, Destination DET, Connection ID) that contains the 
	operational state of the unidirectional secure messages (e.g. 
	session key, sequence number).  Each UA in the secure session link 
	MUST have this tuple, but may have multiple such (at least two, one 
	for each direction) and could be using one Connection ID and 
	session for sending and another for receiving. the basis for the 
	tuple for the secured messaging.
</t>
<t>
	A Connection ID MUST NOT have each 4-bit component the same; this 
	would break the unidirectional feather of the secure connection. 
	When a UA receives a Nonce Enabled A2A message, it MUST send its 
	own and the contained nonce MUST NOT have the same first 4 bits as 
	the one received.  After sending its Nonce Enabled A2A message, it 
	MAY immediately switch to a secure session mode.
</t>
<t>
	If a UA receives a secure session message (addressed to its DET), 
	but does not have the security tuple for the contained Connection 
	ID and thus the source DET, it MUST continue to use the Nonce 
	Enabled A2A messages.  A UA that receives a Nonce Enabled A2A 
	message MUST work on the basis that the sending UA does not have 
	similar from it.  The UA MUST send a Nonce Enabled A2A message and 
	switch to these two messages as
</t>
<t>
	This process MAY be repeated for 4 attempts.  At which point it 
	should be assumed something is interfering with message 
	transmissions and act accordingly.
</t>
</section>
<section anchor="SCHC" numbered="true" toc="default"> <name>SCHC compression of DTLS datagram</name>
<t>
	Author Note: the above datagram was produced from a full IPv6|DTLS 
	message.  The MACing is on this original message.  The receiver 
	needs to reverse the SCHC before authenticating the message, but 
	this might be a DOS risk.
</t>
<t>
	TBD
</t>
</section>
</section>
<section anchor="Msgs" numbered="true" toc="default"> <name>A2X Messages</name>
<t>
	Below are the initial defined messages for use in A2X.
</t>
<table anchor="Msg-type"> <name>A2X Messages</name>
  <thead>
    <tr>
      <th>ID</th>
      <th>Bytes</th>
      <th>Name</th>
      <th>Explanation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>20</td>
      <td>Location/Vector</td>
      <td>ASTM Location/Vector Message less timestamp fields</td>
    </tr>
    <tr>
      <td>2</td>
      <td>36</td>
      <td>L/V and Nonce</td>
      <td>Msg 1 plus Nonce</td>
    </tr>
  </tbody>
</table>
</section>
<section anchor="Link" numbered="true" toc="default"> <name>Wireless Transport for A2X messaging</name>
<t>
	Author's Note:  Still need work on what wireless technologies are 
	practical for this approach and even if it is appropriate to 
	discuss actual wireless transport here.  There are messages here 
	that are too large for the ASTM Remote ID BT4 limit of 200 bytes, 
	but may well fit into the practical limits of 250 bytes over BT5 
	and WiFi Beacons.  It is even possible of a multi-RF approach, 
	separating the large messages from the short ones.
</t>
<t>
	Author's Note:  We define here a new ASTM Auth message content that 
	is only sent over BT5 and WiFi Beacons.
</t>
<t>
	Author's Note:  Using SCHC as an Ethertype we can position these 
	messages to work over multiple wireless tech.  Most noteably IEEE 
	802.11ah (HiLo) with 802.11bc (Enhanced Broadcast Service).  Also 
	802.16 and 802.15.16t (Licensed Narrowband) addendum to 802.16.
</t>
<t>
	TBD
</t>
</section>
<section anchor="IANA" numbered="true" toc="default"> <name>IANA Considerations</name>
<t>
	TBD
</t>
</section>
<section anchor="security-considerations" numbered="true" toc="default"> <name>Security Considerations</name>
<t>
	Author's note:  We need to have a discussion on the size of the MAC 
	in the A2A (<xref target="session-msg-tbl" format="default"/>) 
	message. Currently a 12-byte MAC is specified.  Considering this is 
	an authentication MAC and the messages are timestamped, an 8-byte 
	MAC should be adequate.  But the discussion on this is needed and 
	other examples of 8-byte authentication MACs provided.
</t>
<t>
	TBD
</t>
</section>
</middle>
<back>
<displayreference target="I-D.ietf-drip-auth" to="drip-authentication"/>
<displayreference target="DOI_10.6028_NIST.FIPS.202" to="NIST.FIPS.202"/>
<displayreference target="DOI_10.6028_NIST.SP.800-185" to="NIST.SP.800-185"/>
<references> <name>References</name>
<references title="Normative References">
	<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
	<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
	<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9374.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml7/reference.DOI.10.6028/NIST.FIPS.202.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml7/reference.DOI.10.6028/NIST.SP.800-185.xml"/>
</references>
<references title="Informative References">
	<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-drip-auth.xml"/>
	<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml"/>
	<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8724.xml"/>
	<reference anchor="F3411-22a"  target="https://www.astm.org/f3411-22a.html">
		<front>
			<title>Standard Specification for Remote ID and Tracking - F3411−22a</title>
			<author><organization>ASTM International</organization></author>
			<date month="07" year="2022" />
		</front>
	</reference>
	<reference anchor="Ed25519_Curve25519"  target="https://libsodium.gitbook.io/doc/advanced/ed25519-curve25519">
		<front>
			<title>Ed25519 to Curve25519</title>
			<author><organization>Libsodium Documentation</organization></author>
			<date year="2021"/>
		</front>
	</reference>
</references>
</references>
<section numbered="false" toc="default"> <name>Acknowledgments</name>
<t>
	Adam Wiethuechter of AX Enterprize provided review and 
	implementation insights.
</t>
</section>
</back>
</rfc>
