Detail PKI now that we know how it works.
This commit is contained in:
parent
b0aa9c35b2
commit
141d1ba4ea
1 changed files with 133 additions and 57 deletions
|
|
@ -59,10 +59,11 @@
|
||||||
<abstract>
|
<abstract>
|
||||||
|
|
||||||
<t>The Layer 3 Discovery and Liveness protocol OPEN PDU contains a
|
<t>The Layer 3 Discovery and Liveness protocol OPEN PDU contains a
|
||||||
key which can be used to verify signatures on subsequent PDUs. This
|
key and a certificate, which can be used to verify signatures on
|
||||||
document describes two mechanisms based on digital signatures, one
|
subsequent PDUs. This document describes two mechanisms based on
|
||||||
that is Trust On First Use (TOFU), and one that uses certificates to
|
digital signatures, one that is Trust On First Use (TOFU), and one
|
||||||
provide authentication as well as session integrity.</t>
|
that uses certificates to provide authentication as well as
|
||||||
|
session integrity.</t>
|
||||||
|
|
||||||
</abstract>
|
</abstract>
|
||||||
|
|
||||||
|
|
@ -82,13 +83,13 @@
|
||||||
|
|
||||||
<section anchor="intro" title="Introduction">
|
<section anchor="intro" title="Introduction">
|
||||||
|
|
||||||
<t>The Layer 3 Discovery and Liveness protocol [old ref because new
|
<t>The Layer 3 Discovery and Liveness protocol [old ref because
|
||||||
draft not yet pushed] <xref target="I-D.ietf-lsvr-lsoe"/> OPEN PDU
|
new draft not yet pushed] <xref target="I-D.ietf-lsvr-lsoe"/> OPEN
|
||||||
contains an algorithm specifier and a key which can be used to
|
PDU contains an algorithm specifier, a key, and a certificate,
|
||||||
verify signatures on subsequent PDUs. This document describes two
|
which can be used to verify signatures on subsequent PDUs. This
|
||||||
methods of key generation and signing for use by L3DL, Trust On
|
document describes two methods of key generation and signing for
|
||||||
First Use (TOFU) and a PKI-based mechanism to provide authentication
|
use by L3DL, Trust On First Use (TOFU) and a PKI-based mechanism
|
||||||
as well as session integrity.</t>
|
to provide authentication as well as session integrity.</t>
|
||||||
|
|
||||||
<t>The Key in the OPEN PDU SHOULD be the public key of an asymmetric
|
<t>The Key in the OPEN PDU SHOULD be the public key of an asymmetric
|
||||||
key pair. The sender signs with the private key, of course. The
|
key pair. The sender signs with the private key, of course. The
|
||||||
|
|
@ -101,11 +102,10 @@
|
||||||
Type.</t>
|
Type.</t>
|
||||||
|
|
||||||
<t>With the PKI-mechanism, an enrollment step is performed. The
|
<t>With the PKI-mechanism, an enrollment step is performed. The
|
||||||
public key and an identifier of the subject are put into a
|
public key is put into a certificate, which is signed by the the
|
||||||
certificate, which is signed by the the operational environment's
|
operational environment's trust anchor. In this way, the relying
|
||||||
trust anchor. In this way, the relying party can be confident that
|
party can be confident that the public key is under control of the
|
||||||
the public key is under control of the identified L3DL protocol
|
identified L3DL protocol entity.</t>
|
||||||
entity.</t>
|
|
||||||
|
|
||||||
<t>To the receiver verifying signatures on PDUs, the two methods are
|
<t>To the receiver verifying signatures on PDUs, the two methods are
|
||||||
indistinguishable; the key provided in the OPEN PDU is used to
|
indistinguishable; the key provided in the OPEN PDU is used to
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
|
|
||||||
<t>In the PKI method the OPEN key MUST be verified against the trust
|
<t>In the PKI method the OPEN key MUST be verified against the trust
|
||||||
anchor for the operational domain. It is then used to verify all
|
anchor for the operational domain. It is then used to verify all
|
||||||
subsequent PDUs from the same peer with the same Key Type.</t>
|
subsequent PDUs in the session.</t>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
@ -124,7 +124,7 @@
|
||||||
<t>There are three parts to using a key: signing PDUs, verifying
|
<t>There are three parts to using a key: signing PDUs, verifying
|
||||||
the OPEN PDU, and verifying subsequent PDUs.</t>
|
the OPEN PDU, and verifying subsequent PDUs.</t>
|
||||||
|
|
||||||
<section anchor="signing" title="Signing a PDU">
|
<section anchor="tofu-pdu-signing" title="Signing a PDU">
|
||||||
|
|
||||||
<t>All signed PDUs are generated in the same way:</t>
|
<t>All signed PDUs are generated in the same way:</t>
|
||||||
|
|
||||||
|
|
@ -134,8 +134,10 @@
|
||||||
<t>
|
<t>
|
||||||
Compose the PDU, with all fields including "Sig Type" and
|
Compose the PDU, with all fields including "Sig Type" and
|
||||||
"Signature Length" set, but omitting the trailing
|
"Signature Length" set, but omitting the trailing
|
||||||
"Signature" field itself. This is the "message to be
|
"Signature" field itself. The Certificate Length should
|
||||||
signed" for purposes of the signature algorithm.
|
be zero and the Certificate field should be empty. This
|
||||||
|
is the "message to be signed" for purposes of the
|
||||||
|
signature algorithm.
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
<t>
|
<t>
|
||||||
|
|
@ -165,7 +167,7 @@
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="verify-open" title="Verifying the OPEN PDU">
|
<section anchor="tofu-open-verifying" title="Verifying the OPEN PDU">
|
||||||
|
|
||||||
<t>
|
<t>
|
||||||
The process for verifying an OPEN PDU is slightly different
|
The process for verifying an OPEN PDU is slightly different
|
||||||
|
|
@ -224,7 +226,7 @@
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section anchor="verify-other" title="Verifying Other PDUs">
|
<section anchor="tofu-other-verifying" title="Verifying Other PDUs">
|
||||||
|
|
||||||
<t>
|
<t>
|
||||||
The process for verifying non-OPEN PDUs is slightly simpler,
|
The process for verifying non-OPEN PDUs is slightly simpler,
|
||||||
|
|
@ -283,29 +285,100 @@
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
<t>
|
<t>
|
||||||
Use of a PKI requires, at minimum, configuration of a trust
|
Generating an OPEN PDU using the PKI method requires a
|
||||||
anchor and an End-Entity certificate corresponding to each peer
|
certificate, which must be supplied via out of band
|
||||||
with which this l3dl instance is expected to establish sessions.
|
configuration. The certificate is a signature of the public key
|
||||||
Optionally, a PKI MAY also allow configuration of zero or more
|
to be sent in the Key field of the OPEN PDU, signed by the trust
|
||||||
intermediate CA certificates and certificate revocation lists,
|
anchor private key.
|
||||||
as needed to support an operator's preferred PKI architecture.
|
|
||||||
In general, however, we strongly recommend keeping the PKI as
|
|
||||||
simple as possible, because all of the configured PKI data must
|
|
||||||
be provided via out-of-band means, and will require maintenance.
|
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
<!--
|
<t>
|
||||||
This would be easier if we were providing certificates rather
|
Verifying an OPEN PDU using the PKI method requires the public
|
||||||
than raw public keys in the OPEN PDU, but that would create a
|
key of the trust anchor, which the receiver uses to verify the
|
||||||
significant difference between the TOFU and PKI cases. Not
|
certificate, thereby demonstrating that the supplied is
|
||||||
happy about having to preconfigure all the peer EE certs, though,
|
represents an authorized L3DL speaker in this administrative
|
||||||
so we might want to consider this.
|
domain.
|
||||||
|
</t>
|
||||||
|
|
||||||
Have deliberately not yet said "X.509v3" in so many words
|
<t>
|
||||||
because suspect LSVR people would run screaming from the room,
|
We use the term "certificate" here in the generic sense. These
|
||||||
but that's another thing like TLS that it's probably just
|
are not X.509 certificates: X.509 is much more complicated than
|
||||||
not worth reinventing.
|
we need for I3DL. The certificates used here are just
|
||||||
-->
|
signatures of one key (the session key supplied in the Key field
|
||||||
|
of the OPEN PDU) by another key (the trust anchor).
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<section anchor="pki-open-signing" title="Signing OPEN PDU with PKI">
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Generating and signing the OPEN PDU with the PKI method is
|
||||||
|
almost the same as in <xref target="tofu-pdu-signing"/>. The
|
||||||
|
only difference is that the PKI method MUST supply the
|
||||||
|
appropriate certificate in the Certificate field.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Note that the Auth Type field applies to both the Key and
|
||||||
|
Certificate fields. That is: the certificate uses the same
|
||||||
|
certificate suite as the session keys, L3DL does not support
|
||||||
|
cross-algorithm-suite certification.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section anchor="verify-pki-open" title="Verifying OPEN PDU with PKI">
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Verifying the OPEN PDU with PKI is similar to verifying with
|
||||||
|
TOFU as described in <xref target="tofu-open-verifying"/>, but
|
||||||
|
includes one critical extra step:
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
After extracting the Key field from the PDU but before
|
||||||
|
verifying the Signature, extract the Certificate field and
|
||||||
|
verfiy that the Certificate is a valid signature of the Key
|
||||||
|
field, according to the rules for the signature suite
|
||||||
|
specified by Auth Type. If this step fails, handle as in
|
||||||
|
<xref target="tofu-open-verifying"/>.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section anchor="local-policy" title="Local Policy">
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Whether to use TOFU, PKI, or no signatures at all is a matter of
|
||||||
|
local policy, to be decided by the operator. The useful
|
||||||
|
policy combinations for Key and Certificate are probably:
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
<list style="symbols">
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Not signing: sender need not sign, receiver does not check.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Require TOFU: sender MUST supply key and receiver MUST
|
||||||
|
check, certificate not needed and ignored if sent.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Allow TOFU: sender must supply key and receiver MUST check,
|
||||||
|
receiver SHOULD check certificate if supplyed by sender.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<t>
|
||||||
|
Require PKI: sender must supply key and certificate,
|
||||||
|
receiver must check both.
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</list>
|
||||||
|
</t>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
@ -319,7 +392,7 @@
|
||||||
is needed.</t>
|
is needed.</t>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
protocol "Type = 8:8,Payload Length:16,New Key Type:8,New Key Length:16,New Key ...:40,Old Sig Type:8,Old Signature Length:16,Old Signature ...:40"
|
protocol "Type = 8:8,Payload Length:16,New Key Type:8,New Key Length:16,New Key ...:32,New Cert Length:16,New Certificate ...:32,Old Sig Type:8,Old Signature Length:16,Old Signature ...:40"
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<figure>
|
<figure>
|
||||||
|
|
@ -329,19 +402,22 @@
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| Type = 8 | Payload Length | New Key Type |
|
| Type = 8 | Payload Length | New Key Type |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| New Key Length | ~
|
| New Key Length | New Key ... |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
~ New Key ... | Old Sig Type |
|
| | New Cert Length |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| New Certificate ... |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| Old Sig Type | Old Signature Length | |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
|
||||||
|
| Old Signature ... |
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
| Old Signature Length | ~
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
|
||||||
~ Old Signature ... |
|
|
||||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
</artwork>
|
</artwork>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<t>The New Key Type, New Key Length, and New Key fields declare the
|
<t>The New Key Type, New Key Length, New Key, New Cert Length, and
|
||||||
replacement algorithm suite and key.</t>
|
New Certificate field declare the replacement algorithm suite,
|
||||||
|
key, and certificate.</t>
|
||||||
|
|
||||||
<t>The NEWKEY PDU is signed using the current (soon to be old)
|
<t>The NEWKEY PDU is signed using the current (soon to be old)
|
||||||
algorithm suite and key.</t>
|
algorithm suite and key.</t>
|
||||||
|
|
@ -363,10 +439,10 @@
|
||||||
|
|
||||||
<t>
|
<t>
|
||||||
The rekeying operation changes the session key and algorithm
|
The rekeying operation changes the session key and algorithm
|
||||||
suite described in <xref target="verify-other"/>. The NEWKEY
|
suite described in <xref target="tofu-other-verifying"/>. The
|
||||||
PDU itself is verified using the old algorithm and session key,
|
NEWKEY PDU itself is verified using the old algorithm and
|
||||||
subsequent PDUs are verified with the new algorithm and session
|
session key, subsequent PDUs are verified with the new algorithm
|
||||||
key recorded after the NEWKEY PDU has been accepted.
|
and session key recorded after the NEWKEY PDU has been accepted.
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -387,7 +463,7 @@
|
||||||
the same as in the TOFU method.</t>
|
the same as in the TOFU method.</t>
|
||||||
|
|
||||||
<t>With the PKI-based method, automated device provisioning could
|
<t>With the PKI-based method, automated device provisioning could
|
||||||
restrict which subsidiary certificates are allowed from which peers
|
restrict which certificates are allowed from which peers
|
||||||
on a per interface basis. This would complicate key rolls. Where
|
on a per interface basis. This would complicate key rolls. Where
|
||||||
one draws the line between rigidity, flexibility, and security
|
one draws the line between rigidity, flexibility, and security
|
||||||
varies.</t>
|
varies.</t>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue