Re: [Anima] Benjamin Kaduk's Discuss on draft-ietf-anima-bootstrapping-keyinfra-39: (with DISCUSS and COMMENT)

Esko Dijk <esko.dijk@iotconsultancy.nl> Thu, 02 April 2020 08:46 UTC

Return-Path: <esko.dijk@iotconsultancy.nl>
X-Original-To: anima@ietfa.amsl.com
Delivered-To: anima@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 212683A0DC9 for <anima@ietfa.amsl.com>; Thu, 2 Apr 2020 01:46:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.89
X-Spam-Level:
X-Spam-Status: No, score=-1.89 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_MSPIKE_H2=-0.001, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=iotconsultancynl.onmicrosoft.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CNKfyhc5mHbp for <anima@ietfa.amsl.com>; Thu, 2 Apr 2020 01:46:18 -0700 (PDT)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2134.outbound.protection.outlook.com [40.107.20.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 088C93A0DC8 for <anima@ietf.org>; Thu, 2 Apr 2020 01:46:17 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l8ToMEPo6wQse6DmiStJHQdrUV9eq6M3DJXEh9Z3+sROCUaxCgl3ssGNYR9VruNphfceh1LmWj8IWGfDZNg+I+Upsr8zu5VVhzujBUwuX+Wlu6MD8VpJJ9HEWi69Mu8TGpnGb40jjbeqRtRzqlXJKur4RWvOJQa2OobI3hT+PYtkxE8Ii9Wi2k21ZOuk7UHrozkVp78ZsSrVYTZAnupguBPKExEKZVlSAoYvEc/FV2WoEuf8qiRw+WnBqqkgcylT3sTVkA7sloOSPMv8RqQn11Jt3TyHunkAlWJ/fKR9hQEjZ6rpNYyDNu4Fn/eewcpDwT4RgqEmEdrdN4Iatyf42A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tCkjfZmM6VkaKbUINPUcth+6ag8BP01zqUtfLj+YgLQ=; b=lLTxxm9DT8Mrtm7cbnO5/I5UWWocta5qooBHe713Gw8DgXEltsWePM1zmaeKn5uZ4GdZMRRHVQkJjyuEZvJiy6cA7K1hL3/H8LXHlQSa9lZUlpmyAqrZcF0Iqf5UVhRiaP0Q7kmPq5t7s/XbMSQ5+yG5+C/cbMsoscT/ZMy069TuHQj/6raqxpPj7GwugcM8Ys13wV26qYEKdtoSmoAMA8Pz7gk38Rwsu5QSxRtTXzGhIBTfcIDuhTfiCu/3wuRSYS6XAdcx7e6CBuAPQUQXEKTJd++ExVLVafvwruxcUWfGY7I6XsnxqXZyxmwS9rcvf6fswMqypODhIfgsJUFOQg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=iotconsultancy.nl; dmarc=pass action=none header.from=iotconsultancy.nl; dkim=pass header.d=iotconsultancy.nl; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iotconsultancynl.onmicrosoft.com; s=selector2-iotconsultancynl-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tCkjfZmM6VkaKbUINPUcth+6ag8BP01zqUtfLj+YgLQ=; b=bvtrpoNUICJ9kao5Hq5MnbPXYAvksNkeAHNvTnfSNWWgEFG+tPUfm88OcTRE5qGN4W1QVVUc8cuYA7l5Q5kTWsQW6Ks4JxZghIdJ7nBDRdq44qlr7r7eiDsYJVa7Qx9W9zHeGyXimL3yJbn4LZIEAlCCCIFrNCdKsyb+njrTY2U=
Received: from AM5P190MB0275.EURP190.PROD.OUTLOOK.COM (10.161.62.28) by AM5P190MB0388.EURP190.PROD.OUTLOOK.COM (10.161.62.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Thu, 2 Apr 2020 08:46:14 +0000
Received: from AM5P190MB0275.EURP190.PROD.OUTLOOK.COM ([fe80::8c96:a66b:e170:bf8f]) by AM5P190MB0275.EURP190.PROD.OUTLOOK.COM ([fe80::8c96:a66b:e170:bf8f%3]) with mapi id 15.20.2856.019; Thu, 2 Apr 2020 08:46:14 +0000
From: Esko Dijk <esko.dijk@iotconsultancy.nl>
To: "Max Pritikin (pritikin)" <pritikin@cisco.com>
CC: Michael Richardson <mcr+ietf@sandelman.ca>, Benjamin Kaduk <kaduk@mit.edu>, "anima@ietf.org" <anima@ietf.org>
Thread-Topic: [Anima] Benjamin Kaduk's Discuss on draft-ietf-anima-bootstrapping-keyinfra-39: (with DISCUSS and COMMENT)
Thread-Index: AQHWBu/ZmuKBXSTnP0+1TFNY1ukEm6hh9VUAgADXdgCAAF8PAIAAzCFwgACBKACAAQxSYA==
Date: Thu, 2 Apr 2020 08:46:14 +0000
Message-ID: <AM5P190MB027545415B5E568C9E2DF3F5FDC60@AM5P190MB0275.EURP190.PROD.OUTLOOK.COM>
References: <158561301296.11367.9776561744635554098@ietfa.amsl.com> <4603.1585620652@localhost> <20200331150202.GH50174@kduck.mit.edu> <600.1585687336@localhost> <AM5P190MB02751866462AE590EAD2EB14FDC90@AM5P190MB0275.EURP190.PROD.OUTLOOK.COM> <832A0B17-70F4-43DE-8CC0-F81DFA7DC874@cisco.com>
In-Reply-To: <832A0B17-70F4-43DE-8CC0-F81DFA7DC874@cisco.com>
Accept-Language: en-US, nl-NL
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: spf=none (sender IP is ) smtp.mailfrom=esko.dijk@iotconsultancy.nl;
x-originating-ip: [85.147.167.236]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d7bb16b6-6360-4b51-6022-08d7d6e24d81
x-ms-traffictypediagnostic: AM5P190MB0388:
x-microsoft-antispam-prvs: <AM5P190MB03883ACB03254125D33138A7FDC60@AM5P190MB0388.EURP190.PROD.OUTLOOK.COM>
x-ms-oob-tlc-oobclassifiers: OLM:8273;
x-forefront-prvs: 0361212EA8
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM5P190MB0275.EURP190.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(346002)(396003)(366004)(39830400003)(136003)(376002)(9686003)(186003)(55016002)(316002)(86362001)(30864003)(5660300002)(81156014)(81166006)(8676002)(54906003)(8936002)(52536014)(26005)(2906002)(6506007)(53546011)(508600001)(33656002)(966005)(4326008)(44832011)(6916009)(66556008)(66446008)(76116006)(7696005)(66476007)(71200400001)(64756008)(66946007); DIR:OUT; SFP:1102;
received-spf: None (protection.outlook.com: iotconsultancy.nl does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 4WgVwSL4Aq2npl+GG0oG98JkXbPuXfrikZzQB9wTA5nVl1wqlq88+ylcU/3CWk/F2IfSDEakGYJ7VkETCU3xrVMqOHB7Qz6ixaVNM2RfFb4MMVC9tnSS38zjYbtznqDqp82orllQvpQNbmguswR1UF4byskPi5RCnE52EXdhDoeAL5ZDnriXeK6zvNffTZhdu3s1VppOKhBXeCncncBHXEXqHumIir/yMypXPw8xLlMxGDfFj4Hw7utI4MTZW+IBKSdIXvQV2JYT/8HOCAswxAJFwYvXGmDtXNIXaOLocRFEOApqVVATLnqXzRvWpgKU4z4C3m6BSB72pqxzCOYmH9udmHuC83koFNeZD0BWa5rBUVk6OG8SYZnIiW1hMELIqvHVjanfhYkbt0ivnM8JsVyWyZ8ygSKPMGvx1j7Y7rTXgBQtNI4X1bi1mqcI4ZHglh67OxYWKmPBODV3BHJMk/1x5TCz97rm4jj4xPs0czBCMEGGSOrddMbSd+bDddisAhnBdfmhPpjlgg751yjFwg==
x-ms-exchange-antispam-messagedata: 4AKADGFR5xCAMDFV6CmSuLNxU5V8aehHSube6EcB+XLLUhhIAafKKO2ybKe0cmpHb/d/04aT/8VpHzlRQCqCKmhpSK9T7ZjluZCnnU51SrUFFOIJYTX54QHwL4jflzs+6ig6VlZkl7zccl8FAhNN/Q==
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: iotconsultancy.nl
X-MS-Exchange-CrossTenant-Network-Message-Id: d7bb16b6-6360-4b51-6022-08d7d6e24d81
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Apr 2020 08:46:14.6658 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 58bbf628-15d2-46bc-820b-863b6774d44b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: We5fRL5xxqH2khHz3DTpZdbgG/W3RA1iCN29Yj1WCG92QiLk+W9/84Y7olLmYZuWIqWWMIjJNSnNsnqmXJhKRfblVR4XUZxAJ7F8Av227fM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5P190MB0388
Archived-At: <https://mailarchive.ietf.org/arch/msg/anima/fPZA7nz0Ojw3zSUUMNgJsq3OtWg>
Subject: Re: [Anima] Benjamin Kaduk's Discuss on draft-ietf-anima-bootstrapping-keyinfra-39: (with DISCUSS and COMMENT)
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: Thu, 02 Apr 2020 08:46:21 -0000

Hello Max,

Taking the RFC8366 text you quote, and especially this part:

> The domain certificate MUST have this certificate
>           somewhere in its chain of certificates.  

It seems quite a strong requirement. The domain certificate mentioned in the text is there defined as is the certificate that the Pledge will later obtain via EST (as part of BRSKI) , and the text requires that the pinned certificate MUST be in the cert chain of that EST-certificate.
It cannot be an RA:TRUE and CA:FALSE certificate, I think, because a certificate chain should have CA certificates only except for the first cert (which is the domain EE cert obtained via EST).
A CA:TRUE certificate for the domain certificate would meet that requirement.

Or am I overlooking something?

Esko

-----Original Message-----
From: Max Pritikin (pritikin) <pritikin@cisco.com> 
Sent: Wednesday, April 1, 2020 18:35
To: Esko Dijk <esko.dijk@iotconsultancy.nl>
Cc: Michael Richardson <mcr+ietf@sandelman.ca>ca>; Benjamin Kaduk <kaduk@mit.edu>du>; anima@ietf.org
Subject: Re: [Anima] Benjamin Kaduk's Discuss on draft-ietf-anima-bootstrapping-keyinfra-39: (with DISCUSS and COMMENT)


On the discussion of what the ‘pinned-domain-cert’ is please refer to the language of RFC8366:

      leaf pinned-domain-cert {
        type binary;
        mandatory true;
        description
          "An X.509 v3 certificate structure, as specified by RFC 5280,
           using Distinguished Encoding Rules (DER) encoding, as defined
           in ITU-T X.690.
           This certificate is used by a pledge to trust a Public Key
           Infrastructure in order to verify a domain certificate
           supplied to the pledge separately by the bootstrapping
           protocol.  The domain certificate MUST have this certificate
           somewhere in its chain of certificates.  This certificate
           MAY be an end-entity certificate, including a self-signed
           entity.";

Within that document we opted for this language as it supports a large set of use cases including offline voucher issuance etc. It supports pinning a specific end-entity and it supports pinning a CA. Each of these have operational benefits as discussed extensively throughout this working groups activities. The example voucher’s within draft-ietf-anima-bootstrapping-keyinfra-39 are consistent with this. 

This discussion has raises a discontinuity though. The brski draft encourages, actually mandates, using the CA certificate. This is too likely too strong of a “be conservative in what you do” as it limits use of public CA infrastructures and it causes confusion in the intended pledge behavior of “be generous in what you accept”. 

To resolve this the draft can be slightly less explicit in which certificate is sent from the registrar to be pinned. This is not as conservative as the current language but ensures all uses cases envisioned by the RFC8366 work is maintained. The following is a summary of changes intended but expect an actual diff real soon:

s 5.5. Registrar Requests Voucher from MASA
"The entire registrar certificate chain, up to and including the Domain CA, MUST be included in the CMS structure.”
This sentence will be softened to allow the registrar flexibility to choose how high up the chain to pin. This is ‘less conservative’ and admits the flexibility intended. 

s 5.5.2 MASA pinning of registrar
"This CA certificate will be used to populate the "pinned-domain-cert" of the voucher being issued.”
This sentence to clarify that the highest cert in the chain submitted by the registrar is used rather than the explicit CA certificate. This is being more “generous in what you accept”. 

s 5.6.2 Pledge authentication of provisional TLS connection
"The 'pinned-domain-cert' element of the voucher contains the domain CA's public key.” 
This language aligned with the RFC8366 language to ensure we maintain the “generous in what you accept” behavior intended by RFC8366. 

Michael is a rock star and is working on the actual text changes. 

-max

> On Apr 1, 2020, at 3:16 AM, Esko Dijk <esko.dijk@iotconsultancy.nl> wrote:
> 
> Michael, Could you clarify what you mean with "EE certificate" and "domain's EE certificate" ? Of which entity? And how can a domain have an end entity certificate - I expect this to always be a CA?
> 
> I share Ben's view that the pinned-domain-cert is a CA certificate. If not the case, then the text needs to be updated in several places. 
> Based on the discussion, trying to list some practical cases we can have of the pinned-domain-cert:
> 
> 1. the Registrar's certificate, which is an RA type certificate at least. (It MAY be a CA certificate instead of RA, if the Registrar itself acts as CA non-delegated. )
>  This is the most narrow pinned certificate that enables the Pledge to validate the Registrar it's talking to. If we allow RA certificate pinning then the BRSKI text needs to be updated!
> 2. the Domain CA certificate used by the EST server (=Registrar) to sign newly created certificates. (This MAY equal the Registrar's certificate, although it typically will not be.)
>  This is a wider pinned certificate that enables the Pledge to validate the Registrar it's talking to, and also validate the Domain CA that will be used later on to issue operational certificate via EST.
>  It is not necessarily a root CA certificate. This case is compatible with current BRSKI text.
> 3. a Domain CA cert of a domain larger than the above EST CA.
>  It is not necessarily a root CA certificate. This case is compatible with current BRSKI text.
> 4. the root CA cert of the Domain.
>  This case seems compatible with current BRSKI text, although the text suggest that typically the root CA is something with wider scope, beyond the pinned-domain-cert. (But not necessarily)
> 
> Also there are use cases where full PKI is used, and other use cases where a "cheap" self-signed root CA (not using PKI) is used for e.g. a building installation - I say that both cases need to be supported by BRSKI.
> In the latter case, the self-signed limited-scope root CA will typically be used as the pinned-domain-cert. And the EST server will create certificates signed by this same root CA.
> 
> Esko
> 
> -----Original Message-----
> From: Anima <anima-bounces@ietf.org> On Behalf Of Michael Richardson
> Sent: Tuesday, March 31, 2020 22:42
> To: Benjamin Kaduk <kaduk@mit.edu>du>; The IESG <iesg@ietf.org>rg>; draft-ietf-anima-bootstrapping-keyinfra@ietf.org; anima-chairs@ietf.org; anima@ietf.org; tte+ietf@cs.fau.de
> Subject: Re: [Anima] Benjamin Kaduk's Discuss on draft-ietf-anima-bootstrapping-keyinfra-39: (with DISCUSS and COMMENT)
> 
> 
> Benjamin Kaduk <kaduk@mit.edu> wrote:
>> My interpretation of "pinned-domain-cert is always a CA certificate" seems
>> to have persistent support throughout the text:
> 
> I see how you might conclude that the pinned-domain-cert is always a CA
> certificate from the text, rather than being a trust-anchor that the pledge
> is to use to validate the chain that it got.
> 
> It certainly can be a CA certificate. That does work, because when the
> pledge puts it into it's trust-anchor list, the result is that it is able to
> validate the TLS Server Certificate of the provisional TLS connection.
> But, it has no RFC6125 process it can follow to validate a name.
> 
> It does not have to be *the* CA root certificate, it could be some
> intermediate CA if such a thing existed (such as an Enterprise CA), and in
> some cases, if this was a public trust root and there were no path
> constraints, that might actually be *insecure*, since that would authenticate
> any TLS connection.
> 
> I think that this means that the voucher would be able to validate any
> owner within that public CA's list.  It's okay if it's a private CA.
> 
> Eliot says in the call:
>      The pinned-domain-cert must include sufficient chain to validate the TLS
>      connection.  This certificate must only be used for this purpose.
>      Longer use trust anchors are retrieved as part of the EST /cacerts request.
> 
> My implementation of the MASA puts the EE certificate in which is as narrow
> as one can be.  The Siemens implementation puts in the CA certificate, and we
> interoperate because of how we treat this on the pledge.  Siemens has much
> stronger supply chain restrictions though.
> 
> 
> 
> This is the diff that I would make.
> I am most concerned about the difference in the voucher:
> 
> -        <t hangText="pinned-domain-cert:">The domain CA cert. See <xref
> +        <t hangText="pinned-domain-cert:">The domain's EE cert. See <xref
> 
> Because this is too narrow rather than too wide now.
> 
> 
> diff --git a/dtbootstrap-anima-keyinfra.xml b/dtbootstrap-anima-keyinfra.xml
> index b800ec3..3bdf797 100644
> --- a/dtbootstrap-anima-keyinfra.xml
> +++ b/dtbootstrap-anima-keyinfra.xml
> @@ -2143,11 +2143,11 @@ locator3  = [O_IPv6_LOCATOR, fe80::1234, 41, nil]]]></artwork>
>             The registrar's certificate chain is extracted from the signature
>             method.  The entire registrar certificate chain was
>             included in the CMS structure, as specified in <xref target="RequestVoucherFromMASA" />.
> -            This CA certificate will be used to populate the
> +            The EE certificate will be used to populate the
>             "pinned-domain-cert" of the voucher being issued.
>           </t>
>           <t>
> -            If this domain CA is unknown to the MASA, then it is to be
> +            If this domain's CA is unknown to the MASA, then it is to be
>             considered a temporary trust anchor for the rest of the steps
>             in this section.  The intention is not to authenticate the
>             message as having come from a fully validated origin, but
> @@ -2377,7 +2377,7 @@ INSERT_TEXT_FROM_FILE example-voucher.json END
>         <t hangText="assertion:">The method used to verify the relationship
>         between pledge and registrar. See <xref
>           target="MASAassertion"/>.</t>
> -        <t hangText="pinned-domain-cert:">The domain CA cert. See <xref
> +        <t hangText="pinned-domain-cert:">The domain's EE cert. See <xref
>           target="MASApinned"/>. This figure is illustrative, for an example,
>         see <xref target="exampleprocess" /></t>
>         <t hangText="serial-number:">The serial-number as provided in the
> @@ -2454,10 +2454,12 @@ INSERT_TEXT_FROM_FILE example-voucher.json END
>         </section>
>         <section anchor="PledgeAuthenticationOfProvisionalTLS"
>                  title="Pledge authentication of provisional TLS connection">
> -          <t>The 'pinned-domain-cert' element of the voucher contains the domain
> -            CA's public key. The pledge MUST use the 'pinned-domain-cert' trust
> -            anchor to immediately complete authentication of the provisional TLS
> -            connection.</t>
> +          <t>
> +            The 'pinned-domain-cert' element of the voucher contains the
> +            domain CA's issued EE certificate. The pledge MUST use the
> +            'pinned-domain-cert' trust anchor to immediately complete
> +            authentication of the provisional TLS connection.
> +          </t>
>           <t>If a registrar's credentials cannot be verified using the
>             pinned-domain-cert trust anchor from the voucher then the TLS
>             connection is immediately
> 
> --
> Michael Richardson <mcr+IETF@sandelman.ca>ca>, Sandelman Software Works
> -= IPv6 IoT consulting =-
> 
> 
> 
> _______________________________________________
> Anima mailing list
> Anima@ietf.org
> https://www.ietf.org/mailman/listinfo/anima