[Anima] Russ/Ben: Re: Russ Housley's review of draft-ietf-autonomic-control-plane-24

Toerless Eckert <tte@cs.fau.de> Wed, 24 June 2020 02:34 UTC

Return-Path: <eckert@i4.informatik.uni-erlangen.de>
X-Original-To: anima@ietfa.amsl.com
Delivered-To: anima@ietfa.amsl.com
Received: from localhost (localhost []) by ietfa.amsl.com (Postfix) with ESMTP id 6CB723A00B3; Tue, 23 Jun 2020 19:34:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.87
X-Spam-Status: No, score=-0.87 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_NEUTRAL=0.779, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id WFRH0QFG19zW; Tue, 23 Jun 2020 19:34:16 -0700 (PDT)
Received: from faui40.informatik.uni-erlangen.de (faui40.informatik.uni-erlangen.de [IPv6:2001:638:a000:4134::ffff:40]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 42EEB3A00B0; Tue, 23 Jun 2020 19:34:12 -0700 (PDT)
Received: from faui48f.informatik.uni-erlangen.de (faui48f.informatik.uni-erlangen.de []) by faui40.informatik.uni-erlangen.de (Postfix) with ESMTP id 2B44B548068; Wed, 24 Jun 2020 04:34:07 +0200 (CEST)
Received: by faui48f.informatik.uni-erlangen.de (Postfix, from userid 10463) id 20360440043; Wed, 24 Jun 2020 04:34:07 +0200 (CEST)
Date: Wed, 24 Jun 2020 04:34:07 +0200
From: Toerless Eckert <tte@cs.fau.de>
To: housley@vigilsec.com
Cc: draft-ietf-anima-autonomic-control-plane.ad@ietf.org, anima@ietf.org, Benjamin Kaduk <kaduk@mit.edu>, evyncke@cisco.com, rwilton@cisco.com
Message-ID: <20200624023407.GA41244@faui48f.informatik.uni-erlangen.de>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
User-Agent: Mutt/1.10.1 (2018-07-13)
Archived-At: <https://mailarchive.ietf.org/arch/msg/anima/4Qil0N2FhckzW7Qh70ItSGvdpko>
Subject: [Anima] Russ/Ben: Re: Russ Housley's review of draft-ietf-autonomic-control-plane-24
X-BeenThere: anima@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Autonomic Networking Integrated Model and Approach <anima.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/anima>, <mailto:anima-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/anima/>
List-Post: <mailto:anima@ietf.org>
List-Help: <mailto:anima-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/anima>, <mailto:anima-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 24 Jun 2020 02:34:19 -0000

Hi Russ/Ben, *

I had a writeup of this reply several weeks back, and then it got lost in some
stupid crash, so i had to recreate it alltogether, and that conflicted
with other priorities. And then i made the wrong choice trying to finish the
IPsec and Joel halperns review before pushing out -25, so further delay to
get this reply out. Oh well..

Diff here


You are also free to compare the final -25 against -24, but that has
additional changes in response to bove mentioned input to -24, Joel and
IPsec stuff.

For the numbered list of arguments for use of rfc822name, please use latest -25
version, it adds argument 3.5 about CA issues signing certs with non-standrd

I will discuss the additional arguments/discussions re. rfc822name on the
according threads on the mailing list. 

I find the discussion about rfc822name to be somewhat of an outliar. All the
rest of the SEC IESG review was really good and to the actual point of security.
Sure, it caused me a lot of pain/work getting up to speed on a lot of security 
protocol details, but IMHO hopefully good improvement for the doc. This rfc822name,
 if you excuse me saying so is an outliar:

- The decision for rfc822name was a long-time compromise by practical experience
  and repeated discussions in the WG.

- No contest beyond yours was maintained after reviewing the points explaining
  the choice in 6.1.2. This list was improved several times to address questions
  and resolved them. I have not seen any comment from you how the arguments
  made in that list create a good framework to justify the choice.

-  We also had what i felt to be a good discussion with Ben in person at IETF106
   @ANIMA-WG, that i thought would have explained/persuaded him of our choice, but
  the only followup i saw afterwards was only repeating the "this looks like not
  the right thing" statement.

- I don't think such an assessment is a good technical argument during WG
  time or IETF review compared to the arguments in the document in the list
  in 6.1.2, and even less so during IESG SEC review:

- I have not heard any actual security issue raised against this choice. I
  was under the impression that IESG SEC reviews primary role is to exactly
  support that.

- We have for all the years we revisited the decision a security advisor in
  ANIMA and she too never raised a security issue about this.

Specific replies to all the points inline below. And thanks a lot for the
excellent_review - rfc822name ;-)


On Mon, Mar 23, 2020 at 08:56:14PM -0700, Benjamin Kaduk wrote:
> Hi all,
> I had asked Russ to take a look at the rfc822Name usage.  I guess I did not
> do a good enough job of setting the background information for how the
> certificate containing it would be used, so he had to read some other bits
> of the document as well.
> FWIW I agree with his sentiment that "assigning another name type seems
> preferable, even if it has the same syntax" (and that something more
> efficient could be used if we had desire to do so).
> -Ben

> On Fri, Mar 20, 2020 at 05:12:52PM -0400, Russ Housley wrote:
> The document defines Enrollment:
>    Enrollment:  The process where a node presents identification (for
>       example through keying material such as the private key of an
>       IDevID) to a network and acquires a network specific identity such
>       as an LDevID and trust anchors such as Certificate Authority (CA)
>       certificates.
> First, an annoyance.  CA = Certification Authority (not Certificate Authority).  This applies to an earlier definition and many other places as well.

[fun excourse]

In my defense, i grew up in a town with a dialect:

google: site:cisco.com "certificate   authority" -> 59,700
google: site:cisco.com "certification authority" ->  8,580



grep -il "ertification authorit" rfc*.txt    | wc -> 272 (#RFCs)
grep -il "ertificate authorit" rfc*.txt      | wc -> 136 (#RFCs)

grep -il "ertification authorit" rfc8???.txt | wc -> 38 (#RFCs)
grep -il "ertificate authorit" rfc8???.txt   | wc -> 13 (#RFCs)

ratio is getting better for your side... a bit.

Does RFC editor have a negative list of wrong words ?
RFC editor abbreviation lists only the correct term.

[/fun excourse]


> IDevID and LDevID are certificates.  In this context, enrollment should be using an IDevID for authentication in order to get a LDevID.

That was the intention of the text.

Pls. check fixed text for CA, Enrollment, root CA, and TA, i hope they are better now.

> The document defines Trust Anchor in a way that is not fully compatible with RFC 5280.  It ought to use the definition from RFC 5280.

I apologize, but this is a bit of a riddle to me because i could not find text that looks like a definition of "trust anchor" in rfc5280 and your concern above also does not explain exactly how the ACP text does not comply with such an "definition".

Are you taking offense in conflating trust anchor and trust anchor information ?
That seems to be a common issue in other documents, eg. in 5280:

"When the trust anchor is provided in the form of a self-signed certificate"

"When trust anchor information" ?

In any case, in lack of a better pointe to an RFC, the ACP text now uses the X.509 text to define trust anchor and i tried to go through the text and distinguish between TA and TA information as good as i could.

If there are still concern about this point, i would appreciate if you could be more specific as to what exactly is still wrong and provide suggested text fixes.

> Section 6.1:
> - The text uses the word "trust" in a vague way.  It should say what they are trusted to do, and what they are trusted to not do.
> - The test says:
>    An ACP node MUST
>    have a Local Device IDentity certificate (LDevID) and a Trust Anchor
>    (TA) consisting of a certificate (chain) used to sign the LDevID of
>    all ACP domain members.
> This does not seem accurate to me in several ways.  Most importantly, a TA is not c certifications path or chain.

Fixed to: To trust another ACP member node with access to the ACP Domain, each ACP member requires
keying material: An ACP node MUST have a Local Device IDentity certificate (LDevID),
henceforth called the ACP Domain Certificate and information about one or more Trust Anchor (TA)
as required for the ACP domain membership check (<xref target="certcheck"/>)

{ Please suggest better text if this is still not good enough}.

> Section 6.1.1:
> - s/X.509/X.509v3/


> - What does "All elements are [RFC5280] compliant??? mean?


It was just meant to be unnecessary duplicaction of initial sentence from same section:
"ACP domain certificates MUST be [RFC5280] compliant X.509v3 certificates"

> - MUST do both RSA and ECC? I think this is too simplistic.  I do not expect devices to have both kinds of private key, but they need to handle both kinds of public key.  This seems to be where the transition paragraph is going, but it is not very clear.


"ACP nodes MUST support RSA and Elliptic Curve (ECC) public keys in ACP certificates"


"ACP nodes MUST support handling ACP certificates with RSA public keys and ACP certificates with Elliptic Curve (ECC) public keys"

Hope i was guessing right what you are aluding to, if now, then explicit text suggestions are always welcome.

> - I do not understand the wording about ECC curves that MUST be supported.  Normally I see a single curve that MUST be supported for interoperability and and others that SHOULD be supported.  The "or better" wording is really unclear.  Also, each of the curves has a specific key length associated with it.

In the ACP we have any-to-any connectivity and hence any-any mutual cert authentication, so i felt it to be prudent to support some good range of cert key sizes to ensure interoperability across a wide range of equipment within a single ACP - but also exclude key sizes that we feel are unnecessarily weak, such as RSA with less than 2048 bits.

I changed the two paragraphs now to the following three:

<t>ACP nodes MUST support handling ACP certificates, TA certificates and certificate chain certificates (henceforth just called certificates in this section) with RSA public keys and certificates with Elliptic Curve (ECC) public keys. Certificates with ECC keys MUST indicate to be Elliptic Curve Diffie-Hellman capable (ECDH) if X.509 v3 keyUsage and extendedKeyUsage are included in the certificate.</t>

<t>ACP nodes MUST NOT support certificates with RSA public keys of less than 2048 bits. They MUST support certificates with RSA public keys with 2048 bits and SHOULD support longer RSA keys. ACP nodes MUST support certificates with ECC public keys using NIST P-256, P-384 and P-521 curves.</t>

<t>ACP nodes MUST support SHA-256, SHA-384, SHA-512 signatures for certificates with RSA key and the same RSA signatures plus ECDSA signatures for certificates with ECC key.</t>

I don't understand whether your note about the key length of the curves is an indication of missing text. When i first reviewed with Ben, i had to enter the curves because thats as specific as necessary AFAIK, but given how the key length is implied, i wouldn't understand why i would need to write those down. I don't remember that i have seen that being done either in other RFCs i read through.

In any case, specific text suggestions always welcome in case this text is not sufficient.

> - I would really like to see some clarity about digital signature vs. key establishment.  The two are jumbled together is a way that is difficult to figure out.  One way to read it is that digital signature is required, but key establishment is optional.  I am not sure that is the intent.

I may not understand what you mean with "key establishment".

The first two paragraphs talk about the requirements to handle public key in the certificate
including permitted minimum key-length for RSA.  Is that what you call "key establishment" ?

The third paragraph talks about requirements against the signatures in the certificates.

The idea is to have the necessary and sufficient text for all ACP nodes to be
able to authenticte each other wrt. to their certificate.

> - The TLS reference should point to TLS 1.3 (not TLS 1.2).

The MTI for the ACP is TLS 1.2, TLS 1.3 is SHOULD because of the need for
lowest common denominator in more embedded device space moving very slowly
from TLS 1.2 to TLS 1.3.  See e.g.: 6.8.2. Also note that TLS profile
for ACP is quite close to TLS 1.3 wrt. crypto requirements.

> Section 6.1.2:
> - Using rfc822name seems wrong to me.  Assigning another name type seems preferable, even if it has the same syntax.  The semantics are different.  This is the approach used in RFC 4556 for the Kerberos Principal Name.

Can you point me to any specifc RFC text that actually prohibits what we want to do ?

I was reading through the RFCs (forgot number now) that i think defined the
encodings, and i could not find anything that would prohibit to use the existing
rfc822name for a name that is a valid rfc822name.

It would also be good if you review and address the bullet points 2.1 ... 2.6 and
3.1 ... 3.5 in section 6.1.2. These points explain and justify the choice
of rfc822name.

For example, points 2.1 , 2.4 and 2.5 would be closest in addressing your semantic concern.

> - The document claims that "subjectAlName / otherName" will not be able to be supported because it uses a field that is not mandatory.  I do not think that this is a very big deal.  The otherName definition is:
>    OtherName ::= SEQUENCE {
>         type-id    OBJECT IDENTIFIER,
>         value      [0] EXPLICIT ANY DEFINED BY type-id }

> So, the "extra" processing is parse past the type and length for the SEQUENCE, perform an exact match to the constant value of the object identifier, parse past the type and length of the value.  For example, when using the python ASN.1 library for the certificate processing, the additional code is tiny.  After this, the parsing of the string is exactly the same.  In fact, it might be possible to define a format that is even easier to parse if it did not have to look like an email address.  Since this "extra" is so small, I think we should not use rfc822name in this context.

This is addressed in for example point 3.2 in 6.1.2. The ASN.1 libraries available in 
embedded systems do not necessarily provide the ability to be extended. They may
often come from embedded system OS vendors or third parties.

Also see points 2.2 and 2.3 of 6.1.2: There is a whole backend and diagnostic infrastructure that needs to be extended when introducing new types to decode the new field. This is highly undesirable for easy operationalization.

> Section 6.1.3:
> - validity period checking (in step 1) is part of path validation (in step 3).

Sigh... hope i fixed all the references to the rule numbers in the document
after eliminating this step 1 and mentioning how it is included in what is
now step 2.

> - In step 4, revocation checking allowed to be initially skipped, but the wording is concerning since the check is in a MUST statement.  Then, the checking takes place when communications are established.  I assume some cache is used, otherwise the connection works for a short while, then shuts down, over and over and over.

Hopefully fixed.

Pls. check the reworded text. I conditioned the MUST
with a "when availalable" and changed the secondary MUST to lower case as they
just explain the mechanism.

Wrt to the up/down issue you mention: It seems cleat that one must periodically
re-try a connection to another peer because it could have received a new

If the connection is torn down at any point in time because of newly learned
CRL/OCSP information, it also seems clear the connection needs to be torn down.

I do not understand all possible connection setup protocols, but from
what i understand, a negative CRL or OCSP information will not change back
to positive in the future, so a connection torn down once because of
a particular certificate would need to be retried later up to the
point that the signaling gets to the same certificate, at which point in
time it would fail. 

Aka: with caching of OCSP/CRL results, the connection would still be probed
periodically, but would not be brought up again until there is a new cert.

Is there anything of these explanations you would like to see written
down ? Or that are wrong ?

> Section 6.1.4:
> - Please use the terms from RFC 5280.  That is, use "trust anchor" not "root-CA".

a) While trying to do this, it seemed to me as if the word "trust point" that
was also used in the text was also redundant. So i hopefully correctly
eliminated it and replaced it with TA.

b) Given how rfc7030 in 4.1.3 also refers to Root CA, and equaly
the BRSKI draft in several places, and also rfc8572, aka: all the
documents that this ACP relates to, i wonder what the rule of thumb is when
 it is appropriate to use root CA as a term and when not... I don't want
to be the first RFC of all the ones that the ACP builds on or relates
to that is NOT using the term... without understanding why ACP should be
the only one not using it...

There are similarily few occurrances of "root CA" as in those other documents...

Just wondering.

Thanks a lot for the review, and apoligies for my delay.

> Russ