# Securing IPv6 Neighbor Discovery Address Resolution with Voucher-Based Addressing
## 3 Voucher-Based Addressing
### Algorithm Type Options  
There are three default key derivation algorithms that must be included with all the basic implementations of VBA. An Algorithm Type option is a value within LV options that is formatted as a Type-Length-Value (TLV) object, where the type is a numeric identifier uniquely representing a chosen KDF, the length is the width of the total Algorithm Type stub in units of 4 octets, and the value is a compact, binary data format that is zero-padded to the nearest 32-bit (4-octet) boundary. Figure 9 exhibits the structure of Algorithm Type TLV objects as they appear within LV options. Any future versions or extensions of VBA should take advantage of this flexible structure to easily add and formalize new KDF algorithms with their corresponding type identifiers and relevant values. Figure 8: The adjacent DER structure definitions for encoding the ECDSA PublicKey and Signature values in a Link Voucher option. This is not representative of program code; it is a familiar similitude of the declarative data structure notation used by the ITU for DER objects. Figure 9: The basic binary structure of a TLV field that is used in the Algorithm Type field of a Link Voucher option. The type and length fields are a maximum width of 16 bits. The angle brackets to the sides of the Value field indicate a variable length field. The list of the three default KDF Algorithm Type choices is given below:  
**PBKDF2_SHA256**  
The Password-Based Key Derivation Function (PBKDF2) is defined in Section 5.2 of RFC 8018 [22]. It is a CPU-bound KDF, the use of which might result in significant computation speed disparities between embedded systems and high-performance hardware. It is included primarily for portability, universality, and its simple implementation. Type: 1  
Length: Always 2  
Value:  
ITERATIONS_FACTOR  
A 16-bit integer representing the multiplier of an input KDF iteration count, specified in big-endian format. This value is required to be greater than zero, and receivers of zero values will simply assume a value of 1 instead. This linear scaling factor can be used by a VB to amplify the baseline cost of computing the PBKDF2 KDF across all neighbors. Padding  
A total of 16 bits (2 octets) of padding initialized to zero and ignored by receivers. **Argon2d**  
The Argon2 algorithm is specified in Section 3 of RFC 9106 [30]. It is a memory-bound KDF providing significantly less disparate address computation speeds across varying hardware than CPU-bound algorithms like PBKDF2. VBA explicitly opts to use Argon2d instead of Argon2i or Argon2 id because the generation of VBAs does not require any resistance to side-channel attacks. Implementations of VBA should always prefer to employ this Algorithm Type over others when there is no specific reason to opt for another Type, provided all the participating neighbors have Argon2d support. The iteration count value is used as the t input value for Argon2d computations. The Argon2 t parameter indicates the number of passes and is used to increase the algorithm's running time regardless of MemorySize. To give the parameters in the Value field more weight, t is reduced from the KDF's input L value as follows:  
\[\text{t}=(\text{L}>>8)+1\]  
The Argon2 parameters for Secret Value (K) and Associated Data (X) are neither used nor distributed by the LV for any reason, and the Tag Length (T) for Argon2d is set statically to a fixed value of 32. These predefined values assure the Argon2d KDF computation will scale according to a specific projection as the input L value increases. Type: 10  
Length: Always 2  
Value:  
Parallelism  
An 8-bit integer determining how many degrees of parallelism (i.e., lanes) are allowed to run during KDF computation. A value of zero is not acceptable and will instead be defaulted to 1 by receivers. MemorySize  
A 24-bit integer representing the number of kibibytes (KiB) used as space for the KDF computation.