The HHIT is a small but important enhancement over the flat Host Identity Tag (HIT) space, constructed as an Overlay Routable Cryptographic Hash IDentifier (ORCHID) [
RFC 7343]. By adding two levels of hierarchical administration control, the HHIT provides for device registration/ownership, thereby enhancing the trust framework for HITs.
The 128-bit HHITs represent the HI in only a 64-bit hash, rather than the 96 bits in HITs. 4 of these 32 freed up bits expand the Suite ID to 8 bits, and the other 28 bits are used to create a hierarchical administration organization for HIT domains. HHIT construction is defined in
Section 3.5. The input values for the encoding rules are described in
Section 3.5.1.
A HHIT is built from the following fields (
Figure 1):
-
p = an IPv6 prefix (max 28 bit)
-
28-bit HID which provides the structure to organize HITs into administrative domains. HIDs are further divided into two fields:
-
8-bit HHIT Suite ID (HHSI)
-
ORCHID hash (92 - prefix length, e.g., 64) See Section 3.5 for more details.
14 bits| 14 bits 8 bits
+-------+-------+ +--------------+
| RAA | HDA | |HHIT Suite ID |
+-------+-------+ +--------------+
\ | ____/ ___________/
\ \ _/ ___/
\ \/ /
| p bits | 28 bits |8bits| o=92-p bits |
+--------------+------------+-----+------------------------+
| IPv6 Prefix | HID |HHSI | ORCHID hash |
+--------------+------------+-----+------------------------+
The Context ID (generated with openssl rand) for the ORCHID hash is:
Context ID := 0x00B5 A69C 795D F5D5 F008 7F56 843F 2C40
Context IDs are allocated out of the namespace introduced for Cryptographically Generated Addresses (CGA) Type Tags [
RFC 3972].
The IPv6 HHIT prefix
MUST be distinct from that used in the flat-space HIT as allocated in [
RFC 7343]. Without this distinct prefix, the first 4 bits of the RAA would be interpreted as the HIT Suite ID per [
RFC 7401].
Initially, the IPv6 prefix listed in
Table 1 is assigned for DET use. It has been registered in the "IANA IPv6 Special-Purpose Address Registry" [
RFC 6890].
HHIT Use |
Bits |
Value |
DET |
28 |
2001:30::/28 |
Table 1: Initial DET IPv6 Prefix
Other prefixes may be added in the future either for DET use or other applications of HHITs. For a prefix to be added to the registry in
Section 8.2, its usage and HID allocation process have to be publicly available.
The HHIT Suite IDs specify the HI and hash algorithms. These are a superset of the 4-bit and 8-bit HIT Suite IDs as defined in
Section 5.2.10 of
RFC 7401.
The HHIT values 1 - 15 map to the basic 4-bit HIT Suite IDs. HHIT values 17 - 31 map to the extended 8-bit HIT Suite IDs. HHIT values unique to HHIT will start with value 32.
As HHIT introduces a new Suite ID, EdDSA/cSHAKE128, and because this is of value to HIPv2, it will be allocated out of the 4-bit HIT space and result in an update to HIT Suite IDs. Future HHIT Suite IDs may be allocated similarly, or they may come out of the additional space made available by going to 8 bits.
The following HHIT Suite IDs are defined:
HHIT Suite |
Value |
RESERVED |
0 |
RSA,DSA/SHA-256 |
1 [RFC 7401] |
ECDSA/SHA-384 |
2 [RFC 7401] |
ECDSA_LOW/SHA-1 |
3 [RFC 7401] |
EdDSA/cSHAKE128 |
5 |
Table 2: Initial HHIT Suite IDs
Support for 8-bit HHIT Suite IDs allows for HDA custom HIT Suite IDs (see
Table 3).
HHIT Suite |
Value |
HDA Private Use 1 |
254 |
HDA Private Use 2 |
255 |
Table 3: HDA Custom HIT Suite IDs
These custom HIT Suite IDs, for example, may be used for large-scale experimentation with post-quantum computing hashes or similar domain-specific needs. Note that currently there is no support for domain-specific HI algorithms.
They should not be used to create a "de facto standardization".
Section 8.2 states that additional Suite IDs can be made through IETF Review.
The HID provides the structure to organize HITs into administrative domains. HIDs are further divided into two fields:
-
14-bit Registered Assigning Authority (RAA)
-
14-bit HHIT Domain Authority (HDA)
The rationale for splitting the HID into two 14-bit domains is described in
Appendix B.
The two levels of hierarchy allow for Civil Aviation Authorities (CAAs) to have it least one RAA for their National Air Space (NAS). Within its RAAs, the CAAs can delegate HDAs as needed. There may be other RAAs allowed to operate within a given NAS; this is a policy decision of each CAA.
An RAA is a business or organization that manages a registry of HDAs. For example, the Federal Aviation Authority (FAA) or Japan Civil Aviation Bureau (JCAB) could be RAAs.
The RAA is a 14-bit field (16,384 RAAs). Management of this space is further described in [
DRIP-REG]. An RAA
MUST provide a set of services to allocate HDAs to organizations. It
SHOULD have a public policy on what is necessary to obtain an HDA. The RAA need not maintain any HIP-related services. At minimum, it
MUST maintain a DNS zone for the HDA zone delegation for discovering HIP RVS servers [
RFC 8004] for the HID. Zone delegation is covered in [
DRIP-REG].
As DETs under administrative control may be used in many different domains (e.g., commercial, recreation, military), RAAs should be allocated in blocks (e.g., 16-19) with consideration of the likely size of a particular usage. Alternatively, different prefixes can be used to separate different domains of use of HHITs.
The RAA DNS zone within the UAS DNS tree may be a PTR for its RAA. It may be a zone in a HHIT-specific DNS zone. Assume that the RAA is decimal 100. The PTR record could be constructed as follows (where 20010030 is the DET prefix):
100.20010030.hhit.arpa. IN PTR raa.example.com.
Note that if the zone 20010030.hhit.arpa is ultimately used, a registrar will need to manage this for all HHIT applications. Thus, further thought will be needed in the actual DNS zone tree and registration process [
DRIP-REG].
An HDA may be an Internet Service Provider (ISP), UAS Service Supplier (USS), or any third party that takes on the business to provide UAS services management, HIP RVSs or other needed services such as those required for HHIT and/or HIP-enabled devices.
The HDA is a 14-bit field (16,384 HDAs per RAA) assigned by an RAA and is further described in [
DRIP-REG]. An HDA must maintain public and private UAS registration information and should maintain a set of RVS servers for UAS clients that may use HIP. How this is done and scales to the potentially millions of customers are outside the scope of this document; they are covered in [
DRIP-REG]. This service should be discoverable through the DNS zone maintained by the HDA's RAA.
An RAA may assign a block of values to an individual organization. This is completely up to the individual RAA's published policy for delegation. Such a policy is out of scope for this document.
The Edwards-Curve Digital Signature Algorithm (EdDSA) [
RFC 8032] is specified here for use as HIs per [
RFC 7401].
The intent in this document is to add EdDSA as a HI algorithm for DETs, but doing so impacts the HIP parameters used in a HIP exchange. Sections [
3.4.1] through [
3.4.2] describe the required updates to HIP parameters. Other than the HIP DNS RR (Resource Record) [
RFC 8005], these should not be needed in a DRIP implementation that does not use HIP.
See
Section 3.2 for use of the HIT Suite in the context of DRIP.
The addition of EdDSA as a HI algorithm requires a subfield in the HIP HOST_ID parameter (
Section 5.2.9 of
RFC 7401) as was done for ECDSA when used in a HIP exchange.
For HIP hosts that implement EdDSA as the algorithm, the following EdDSA curves are represented by the fields in
Figure 2.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| EdDSA Curve | NULL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Public Key |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
EdDSA Curve:
-
Curve label
-
Public Key:
-
Represented in Octet-string format [RFC 8032]
For hosts that implement EdDSA as a HIP algorithm, the following EdDSA curves are defined. Recommended curves are tagged accordingly:
Algorithm |
Curve |
Values |
EdDSA |
RESERVED |
0 |
EdDSA |
EdDSA25519 |
1 [RFC 8032] (RECOMMENDED) |
EdDSA |
EdDSA25519ph |
2 [RFC 8032] |
EdDSA |
EdDSA448 |
3 [RFC 8032] (RECOMMENDED) |
EdDSA |
EdDSA448ph |
4 [RFC 8032] |
Table 5: EdDSA Curves
The HIP DNS RR is defined in [
RFC 8005]. It uses the values defined for the 'Algorithm Type' of the IPSECKEY RR [
RFC 4025] for its PK Algorithm field.
The 'Algorithm Type' value and EdDSA HI encoding are assigned per [
RFC 9373].
The HIT_SUITE_LIST parameter contains a list of the HIT suite IDs that the HIP Responder supports. The HIT_SUITE_LIST allows the HIP Initiator to determine which source HIT Suite IDs are supported by the Responder. The HIT_SUITE_LIST parameter is defined in
Section 5.2.10 of
RFC 7401.
The following HIT Suite ID is defined:
HIT Suite |
Value |
EdDSA/cSHAKE128 |
5 |
Table 6: HIT Suite ID
Table 7 provides more detail on the above HIT Suite combination.
The output of cSHAKE128 is variable per the needs of a specific ORCHID construction. It is at most 96 bits long and is directly used in the ORCHID (without truncation).
Index |
Hash function |
HMAC |
Signature algorithm family |
Description |
5 |
cSHAKE128 |
KMAC128 |
EdDSA |
EdDSA HI hashed with cSHAKE128, output is variable |
Table 7: HIT Suites
This section improves on [
RFC 7343] with three enhancements:
-
the inclusion of an optional "Info" field between the Prefix and ORCHID Generation Algorithm (OGA) ID.
-
an increase in flexibility on the length of each component in the ORCHID construction, provided the resulting ORCHID is 128 bits.
-
the use of cSHAKE [NIST.SP.800-185] for the hashing function.
The cSHAKE XOF hash function based on [
Keccak] is a variable output length hash function. As such, it does not use the truncation operation that other hashes need. The invocation of cSHAKE specifies the desired number of bits in the hash output. Further, cSHAKE has a parameter 'S' as a customization bit string. This parameter will be used for including the ORCHID Context Identifier in a standard fashion.
This ORCHID construction includes the fields in the ORCHID in the hash to protect them against substitution attacks. It also provides for inclusion of additional information (in particular, the hierarchical bits of the HHIT) in the ORCHID generation. This should be viewed as an update to [
RFC 7343], as it can produce ORCHIDv2 output.
The following subsections define the new general ORCHID construct with the specific application for HHITs. Thus items like the hash size are only discussed in terms of how they impact the HHIT's 64-bit hash. Other hash sizes should be discussed for other specific uses of this new ORCHID construct.
ORCHIDv2 [
RFC 7343] is defined as consisting of three components:
ORCHID := Prefix | OGA ID | Encode_96( Hash )
where:
-
Prefix
-
A constant 28-bit-long bitstring value (IPv6 prefix)
-
OGA ID
-
A 4-bit-long identifier for the Hash_function in use within the specific usage context. When used for HIT generation, this is the HIT Suite ID.
-
Encode_96( )
-
An extraction function in which output is obtained by extracting the middle 96-bit-long bitstring from the argument bitstring.
The new ORCHID function is as follows:
ORCHID := Prefix (p) | Info (n) | OGA ID (o) | Hash (m)
where:
-
Prefix (p)
-
An IPv6 prefix of length p (max 28 bits long).
-
Info (n)
-
n bits of information that define a use of the ORCHID. 'n' can be zero, which means no additional information.
-
OGA ID (o)
-
A 4- or 8-bit long identifier for the Hash_function in use within the specific usage context. When used for HIT generation, this is the HIT Suite ID [IANA-HIP]. When used for HHIT generation, this is the HHIT Suite ID [HHSI].
-
Hash (m)
-
An extraction function in which output is 'm' bits.
Sizeof(p + n + o + m) = 128 bits
The ORCHID length
MUST be 128 bits. For HHITs with a 28-bit IPv6 prefix, there are 100 bits remaining to be divided in any manner between the additional information ("Info"), OGA ID, and the hash output. Consideration must be given to the size of the hash portion, taking into account risks like pre-image attacks. 64 bits, as used here for HHITs, may be as small as is acceptable. The size of 'n', for the HID, is then determined as what is left; in the case of the 8-bit OGA used for HHIT, this is 28 bits.
This update adds a different encoding process to that currently used in ORCHIDv2. The input to the hash function explicitly includes all the header content plus the Context ID. The header content consists of the Prefix, the Additional Information ("Info"), and the OGA ID (HIT Suite ID). Secondly, the length of the resulting hash is set by the sum of the length of the ORCHID header fields. For example, a 28-bit prefix with 28 bits for the HID and 8 bits for the OGA ID leaves 64 bits for the hash length.
To achieve the variable length output in a consistent manner, the cSHAKE hash is used. For this purpose, cSHAKE128 is appropriate. The cSHAKE function call is:
cSHAKE128(Input, L, "", Context ID)
Input := Prefix | Additional Information | OGA ID | HOST_ID
L := Length in bits of the hash portion of ORCHID
For full Suite ID support (those that use fixed length hashes like SHA256), the following hashing can be used (Note: this does not produce output identical to ORCHIDv2 for a /28 prefix and Additional Information of zero length):
Hash[L](Context ID | Input)
Input := Prefix | Additional Information | OGA ID | HOST_ID
L := Length in bits of the hash portion of ORCHID
Hash[L] := An extraction function in which output is obtained
by extracting the middle L-bit-long bitstring
from the argument bitstring.
The middle L-bits are those bits from the source number where either there is an equal number of bits before and after these bits, or there is one more bit prior (when the difference between hash size and L is odd).
HHITs use the Context ID defined in
Section 3.
This section discusses how to provide backwards compatibility for [
RFC 7343] as used in [
RFC 7401].
For HIPv2, the Prefix is 2001:20::/28 (
Section 6 of
RFC 7343). 'Info' is zero-length (i.e., not included), and OGA ID is 4-bit. Thus, the HI Hash is 96 bits in length. Further, the Prefix and OGA ID are not included in the hash calculation. Thus, the following ORCHID calculations for fixed output length hashes are used:
Hash[L](Context ID | Input)
Input := HOST_ID
L := 96
Context ID := 0xF0EF F02F BFF4 3D0F E793 0C3C 6E61 74EA
Hash[L] := An extraction function in which output is obtained
by extracting the middle L-bit-long bitstring
from the argument bitstring.
For variable output length hashes use:
Hash[L](Context ID | Input)
Input := HOST_ID
L := 96
Context ID := 0xF0EF F02F BFF4 3D0F E793 0C3C 6E61 74EA
Hash[L] := The L-bit output from the hash function
Then, the ORCHID is constructed as follows:
Prefix | OGA ID | Hash Output
With this update, the decoding of an ORCHID is determined by the Prefix and OGA ID. ORCHIDv2 [
RFC 7343] decoding is selected when the Prefix is: 2001:20::/28.
For HHITs, the decoding is determined by the presence of the HHIT Prefix as specified in
Section 8.2.
This section is included to provide backwards compatibility for [
RFC 7343] as used for [
RFC 7401].
HITs are identified by a Prefix of 2001:20::/28. The next 4 bits are the OGA ID. The remaining 96 bits are the HI Hash.