blob: 40a004d0d06b8bf5123a5c607141354240240a71 [file] [log] [blame]
.. _Signed Interest:
Signed Interest
===============
**Signed Interest** is a mechanism to issue an authenticated Interest.
A signed Interest is an Interest where:
* Name ends with ``ParametersSha256DigestComponent``.
* ``InterestSignature`` is present.
See :ref:`Interest Signature section <InterestSignature>` for details on ``InterestSignature``.
Construction of Signed Interest
-------------------------------
The following procedure describes the signing of an Interest:
1. Remove all ``ParametersSha256DigestComponent`` components from ``Name`` if present, regardless of the location.
2. If ``ApplicationParameters`` element is absent, append a zero-length ``ApplicationParameters`` element to the Interest.
3. Prepare an ``InterestSignatureInfo`` element and append it at the end of the Interest.
4. Compute the cryptographic signature according to :ref:`Interest Signature section <InterestSignature>`.
5. Insert the computed signature as an ``InterestSignatureValue`` element at the end of the Interest.
6. Compute the ``ParametersSha256DigestComponent`` according to :ref:`Interest Parameters Digest Component <Interest Parameters Digest Component>` section and append it at the end of ``Name``.
Signed Interest processing
--------------------------
Upon receiving an Interest, the producer, according to the Interest name prefix, should be able to tell whether the Interest is required to be signed.
If the received Interest is required to be signed, the application protocol or the producer should also explicitly define whether ``SignatureNonce``/``SignatureTime``/``SignatureSeqNum`` must be present in the ``InterestSignatureInfo`` or not.
If any of the required elements is missing, treat the Interest as invalid.
Additionally, a signed Interest must be treated as invalid if any of the following conditions is true:
1. The last name component is not ``ParametersSha256DigestComponent``, or its TLV-VALUE is incorrect according to :ref:`Interest Parameters Digest Component <Interest Parameters Digest Component>` section.
2. The ``InterestSignatureInfo`` element is missing or any mandatory sub-element is missing from the ``InterestSignatureInfo`` element.
3. The ``InterestSignatureValue`` element is missing.
4. The signature cannot be cryptographically verified.
5. The key used to create the signature is not trusted for signing the Interest.
6. If ``SignatureTime`` (`t`) is present in the ``InterestSignatureInfo``:
Lookup the last recorded ``SignatureTime`` (`t0`) used in conjunction with the same key. Use ``CurrentTime - GracePeriod`` if no previous record exists. The recommended grace period is 60 seconds.
If `t0` >= `t`, consider the Interest as invalid.
Update `t0` to `t` if the signed Interest has been validated according to this and all other rules.
.. note::
Sharing private keys is not recommended. If private key sharing is inevitable, it is the key owner's responsibility to keep clocks synchronized.
7. If ``SignatureNonce`` is present:
To perform this check, the recipient must remember a list of ``SignatureNonce`` carried in previously received Signed Interests used in conjunction with the specific signing key.
Check whether the ``SignatureNonce`` carried in the current signed Interest is a repetition of a recorded ``SignatureNonce`` used with the same key.
If it is a repetition, treat the Interest as invalid.
Add the newly received ``SignatureNonce`` into the ``SignatureNonce`` list if the signed Interest has been validated according to this and all other rules.
.. note::
The size of the ``SignatureNonce`` list and the lifetime of each ``SignatureNonce`` remembered by the receiver depend on the application protocol's need.
8. If ``SignatureSeqNum`` (`s`) is present:
Lookup the last recorded ``SignatureSeqNum`` (`s0`) used in conjunction with the same key. If `s0` >= `s`, consider the Interest as invalid.
If no previous record exists, check `s` against the application policy.
If `s` does not satisfy the application policy, treat the signed Interest as invalid.
Update `s0` to `s` if the signed Interest has been validated according to this and all other rules.
.. note::
The first ``SignatureSeqNum`` received is considered valid only if it satisfies the application's policy. For example, application can decide the first ``SeqNum`` can only be a minimum value like 0 or 1, or a value that both sender and receiver agree on.