[Anima] Review of draft-ietf-anima-constrained-join-proxy-02 (part 1)

Esko Dijk <esko.dijk@iotconsultancy.nl> Wed, 24 March 2021 09:22 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 B2CCF3A284A for <anima@ietfa.amsl.com>; Wed, 24 Mar 2021 02:22:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.101
X-Spam-Level:
X-Spam-Status: No, score=-2.101 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=iotconsultancy.nl
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 t6wcI9B4LAQI for <anima@ietfa.amsl.com>; Wed, 24 Mar 2021 02:22:40 -0700 (PDT)
Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10135.outbound.protection.outlook.com [40.107.1.135]) (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 EDC003A2847 for <anima@ietf.org>; Wed, 24 Mar 2021 02:22:39 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n+BQIHXCQhnWTHC2J4da8BdOTdG8R5eVviRKZfRSEeJB7pAsT1LmTdOK+NYcljNgN5xCP02NsbRGjOiUxKAjY/TOGew93n6/jpGz+trGeBGiHcQ6n4A54a5d3XiCeBoaLhtY0+k6iz2WlQv+56WgU7DlCmwcMiPT2dRJcaH5n6451b2YhDmzT+p8Y5O8D6DOatmW950tWchUrmti27bDFB59XwDszpBJ98MQwBrlu3CIj8e9RCy6bykmGzBEveFy6YRshYes9RAWwlSd4oVLUeKrMjWC/jNJKd45zI3PNmEG8dBmyJC3QkIhKMeMqXfiOBjnHA6EHbpIt+7/4D5XhA==
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=svU22SYL4vqlJi8emeUpXkajhHIxypk0IzV4sd2cEFI=; b=U/ldZzjhVwMywLy4JsRDlS4alO7Xex6qsIhJDJgxQ/9UBCL8Ohs6HMWoC85UmY/OKYlig6vf/HJriJTIeTjyRAAfN8MDMgtHWbsJDUeFzfiicCM6boASZSCfUI3yC0nKNcDRPS95yBmK1XyvuFuRhGL20WiaEs486XaeXA8jzffAgeJLsvVKYMnGwNxRtUNdiwEt1j1k8o2mlHGtvTP121Qyxq5Zn/jUM84XrP8vLA7rr/kLkfNVXRL50pzb0a85v8EN9lPfX18N4S9UEeTBmpxXb0eUm4lioME1BvoueGCFrH8QHkWoAUYIRh6EHKNzQSX7ZeYlf9oLRLx0pEy4uQ==
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=iotconsultancy.nl; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=svU22SYL4vqlJi8emeUpXkajhHIxypk0IzV4sd2cEFI=; b=uqnUSehFL32dLyMqObWycaA9k4NQQA7j1ifIOLKIxJkBlZ52zCUXBxLJ6k6IYaYmVdhK4QmbAUoQLTqRhKbZNbxFsUMeMWXKJ1cM4+l/NEA1qY+s5lrKbrk/u77LODV7XKrbudpZsPejBrvYvqOISOLv1Zgf1OiCgFxMBfFmfXU=
Received: from AM8P190MB0979.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:1d3::8) by AM4P190MB0067.EURP190.PROD.OUTLOOK.COM (2603:10a6:200:61::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3955.24; Wed, 24 Mar 2021 09:22:35 +0000
Received: from AM8P190MB0979.EURP190.PROD.OUTLOOK.COM ([fe80::6415:492c:7afa:f296]) by AM8P190MB0979.EURP190.PROD.OUTLOOK.COM ([fe80::6415:492c:7afa:f296%5]) with mapi id 15.20.3955.027; Wed, 24 Mar 2021 09:22:35 +0000
From: Esko Dijk <esko.dijk@iotconsultancy.nl>
To: "anima@ietf.org" <anima@ietf.org>
Thread-Topic: Review of draft-ietf-anima-constrained-join-proxy-02 (part 1)
Thread-Index: AdcgjX41uxllwqBhSymn6HVUOaa3nA==
Date: Wed, 24 Mar 2021 09:22:34 +0000
Message-ID: <AM8P190MB0979E05F9A53B2F0C48020FAFD639@AM8P190MB0979.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: ietf.org; dkim=none (message not signed) header.d=none; ietf.org; dmarc=none action=none header.from=iotconsultancy.nl;
x-originating-ip: [2001:1c02:3103:f500:19d8:658b:8ad:28b5]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 4195afac-265a-4b37-b915-08d8eea65c49
x-ms-traffictypediagnostic: AM4P190MB0067:
x-microsoft-antispam-prvs: <AM4P190MB0067FE6E37FCCBDD327CC275FD639@AM4P190MB0067.EURP190.PROD.OUTLOOK.COM>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: CzcRaATTuda3g4r/YnxSI88rcq8BicC6mojCXZTbhB5VZfYuxQE/AKfBbceRefHz++yF3hNwnfZ4Ttom+0WaIwBPRd7K6edVElYogxb0AsTjGA7QBnGmjc4yHUBA5gZInH0cMm9Ln9RZFVUeEV61jT+Dyjx//b70FW9HC3WZPDxesRY6iOZSN4XGCeZGLWa88B2UMpPvI/F7TjPW2515n2YwGCFZoGCD0bbDrd+DbSUcSUHpLoSEj44E00lDKzOc48+epCYpddstJea7vdOjWaqJsRBxqwROL5t0+c8gOhs9oxpNnIZW7tFUf5opXYZTpzpE0quqvBDi1+QhllP1vKP6obCm7u3GCZF1LP8LLubFozN4f9+dMDOCkvqUC5Hw9B4Az1B+gic+N7lv6cTlK2DcuX/4+MJSXAIydK5+2ccx+0k7uSGOM0fCC80anIWRQ5HcWCUAzlKo7gwjTN7Uyj6U+2gQnUFym5b7fkzndpZKTXNbhZeQ7TLYKQh1ACjRCVmb0DW4NHcR/aemJdraANe4lRUmiEyB00I8q39Xmrsg8awi+05rcxwX876M5QtkMgu5/N5qrVa6RE4qiXgQ/RJBu+9LZkPUxhgE7T/5rCKH0yvI+EcN3DlTf7s5FqnIl85z5ew3KyfyQQ/46p0HwQH3eih2xuJJw4tGjGIgqdXYcUu52eiNO/9TkeJKkJe0guTbB1F8zGYaoFWWEDKd0Ofn1j9SHvGPLb4zti98Nt2XlGXv+U++7865cfJ06mfl
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8P190MB0979.EURP190.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(376002)(346002)(366004)(39830400003)(136003)(396003)(9686003)(6506007)(55016002)(83380400001)(478600001)(38100700001)(52536014)(2906002)(66476007)(7696005)(86362001)(66556008)(71200400001)(6916009)(64756008)(66446008)(33656002)(66946007)(8936002)(44832011)(76116006)(8676002)(5660300002)(316002)(186003); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata: =?utf-8?B?YUszYUhpVy90SzVzNnk1b0xWd2tOWEFIdHh4N2hVbjR3NWRVWnVIbVNjdmdK?= =?utf-8?B?Z0tpVHJQcHUyL0k4M1I1MjdQRTRkMkVGWFd1aDJWMmV6L01xb1BVS3lTLzU5?= =?utf-8?B?WVk4cG9pSjN3OGpjYmpFUTMyUkdTTC9rSWFaTUtlVTRZRCtTZUJLb09rSUJ6?= =?utf-8?B?NGlobUZlbVpJcG9nNkp5SFhvK2FPWFlKWURxWlRmOVdqcngvWjYvUklmZ2tI?= =?utf-8?B?UzZIWFNpazBBWi8xdjArMG5ZcXFGSldvSVNrekZJenozejg1aTlibjlYVXQ0?= =?utf-8?B?cUZsSUZTU0x4ZWd3VHlrdmw5QjdGQWdQellldUpHN0dLUmp5K1Vqd1htTE9V?= =?utf-8?B?Tk50TjdhS0UvTndrQXdqTUhuUE1HSlQyOFo1SDRWbVoxVDRVN0FOZ291c3I1?= =?utf-8?B?K3ZuYSswWldydXNCZW9rcGY0UTF1RFhVQlU4a05acmVyYTlQK0NDQ2d5aXF5?= =?utf-8?B?S3ZjMVVFOUFoNkdoMklWblNHbEpPWFJlNkx6S0M2SUhpVC9mZUUxL0RXdUY0?= =?utf-8?B?NStNV1Y0ZUxZRGxVNmsxMXM5aC80RGM4OGtac2FDTjBrVXNwRERvMEVxdmtu?= =?utf-8?B?Rk9CMGYzOGlTRFpvOGZhRHBuUit1VEIyVUY4ZEtacFh6d0lRbDhTeWZYZkxI?= =?utf-8?B?UHBJdWlOVXg1WUE4ZHRjYnZVcmRzZWFQVGptQjRYdTRySVUxUG5pb2t1MzVs?= =?utf-8?B?SzBJWmVZNTM1eGJ6TXpCdnloTmFES25ncjVJZXNkVHBrdW9SZDBzNDh0anZG?= =?utf-8?B?SE9HOFQ2RU8rS0g3MnlZaDVJSEdrai9wTHFsWmNyeExlTTh1VnNjSW8vbnF1?= =?utf-8?B?Mlh1WC9CTFQwbEYrL1FtQ1hITmhWc3QvVUMyUy83dEVYdFprbU14L1pHRzln?= =?utf-8?B?c25VbW4rV08xbytFeFltS0h6cnZ2SityNXZQU3FLQ0xmYmh5aVh5dnZHT09P?= =?utf-8?B?MTZGcVFkaDJtOGJYcUdhMUp4MU00TEQrbHJwVGJJRCt1ODBDa3JBaEpDUk96?= =?utf-8?B?WnRUTmZXOENwVjZrQlNzQUViNUhuVDZCdjNndWlYK0kyWWJMUVpYeDUxZ0Zs?= =?utf-8?B?NVo1MkRpZGJCZmdNNXRncmNwSmtLNmJINkNGSWE5TGxuM2ZZa2FmY3pHMkJp?= =?utf-8?B?emxSUlk2ZUxKWVk3Q0huM1A3Zkh3V3gvQWdSMnk3MVFKWnpkc2FpRkM5MmNa?= =?utf-8?B?YkZrRU1UMlNRU1EzdGsrUEZUclpiUmpiSE1pMk9sZCsreWF3UHA2QVV0bXo2?= =?utf-8?B?bzhNN3BhcVhLQXhOd0VsUUZJNTdGemRMQjFTeDljbHIxN25pcXVIc1Z2M3Jr?= =?utf-8?B?aDNoQWV6M2J6a3VVRGpPSTduTlI0WUk4dEpCOXpaeWhMdWVZeWtIYzVad1pK?= =?utf-8?B?YzloQnVrZ2NGV1B3d1Q0enNCSGQ5Z3FWaDZENzd3VmtZV2pxa054bXV5dFdR?= =?utf-8?B?ZWNCVFdwYVljZDkyMi9DSm1BNTdkdGpVcUZpT2h5cmp0V1p4SFYrUGVlc0tq?= =?utf-8?B?WEdrY204Zjhtb0xoK1dxQ3hPMWhXZFRBb2hRenRLUXFIbEdrME9ra3YrMGhE?= =?utf-8?B?dXlEdy80clpGSm83dW16Um54dCtxa0Y1c0dsTDBEZkFMQmdLcjNZazNyRTlm?= =?utf-8?B?VnRwR29Ob3BFajRCdnVCT2MyaEpObFhYN0FwcVlGTmhsL24yNDdLbUFEemtP?= =?utf-8?B?UWI4S0RueklsUzdiOGRXZ1Z3TGNtRHozQUNiMkxHTEtVeFArRG5pcWljTE80?= =?utf-8?B?YmdDbmVWMlFLbDVjMGt1NlZDb3J1aFMweGtEYlZybEY2MjFTMkg4TkdsM01t?= =?utf-8?B?Mm9GNnFDcGpDT3J0eUNURHBmTE1KYlpxRElhMkxNWVB2UklMVFlDcXhJcklz?= =?utf-8?Q?7GotmIwviUDyW?=
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-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: AM8P190MB0979.EURP190.PROD.OUTLOOK.COM
X-MS-Exchange-CrossTenant-Network-Message-Id: 4195afac-265a-4b37-b915-08d8eea65c49
X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Mar 2021 09:22:35.0384 (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: IR1EKnQONmpihyDtmgukZs574dGy8Q+/KU7TOdVTpnKAqvRadQSr1B9kqa4iFe9Ufcv+Rxb14ZZBLE7igqQLyDL+cclJTfNCYwt29/XBik8=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4P190MB0067
Archived-At: <https://mailarchive.ietf.org/arch/msg/anima/irHrS8pym4hGl6FhLTA24-Oi6qA>
Subject: [Anima] Review of draft-ietf-anima-constrained-join-proxy-02 (part 1)
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 Mar 2021 09:22:47 -0000

Hello,

I'm doing a review of draft-ietf-anima-constrained-join-proxy-02; below part 1 of my review comments. The remainder will follow soon hopefully. 
Note that I did not make or work with an implementation of this draft but I have experience with similar proxy implementations: for example OpenThread (https://github.com/openthread/openthread) uses one.  And I've worked with an implementation that uses a proxy to a BRSKI Registrar (https://github.com/openthread/ot-registrar/).
So it is definitely a useful document and an essential component of any constrained BRSKI solution for wireless mesh networks.

General throughout text: 
The terms "Pledge" and "joining device" and ""joining" device" are all used - this could be harmonized to a single term to be sure what we're talking about. What about using "Pledge" for all?

Abstract
“replacing the Circuit-proxy by a stateless/stateful constrained (CoAP) Join Proxy. It transports join traffic from the pledge to the Registrar without requiring per-client state”
-> may be confusing; first it looks like we define both stateless and stateful versions. But the last sentence implies always stateless?
- the word "relay" may be useful to add somewhere in the abstract, as the proxy relays DTLS records between Pledge and Registrar.

1. Introduction
“The {I-D.ietf-anima-constrained-voucher} describes the BRSKI extensions to the Registrar.”
-> this should be updated to the latest scope of this referenced draft. It describes also Pledge behavior, not only Registrar. This is now called the Pledge - Registrar part of the protocol ("BRSKI-EST") . 
-> We could clarify here that in {I-D.ietf-anima-constrained-voucher} BRSKI is also being extended with CoAP and DTLS.
- the word "relay" may be useful to add somewhere in the introduction, as the proxy relays DTLS records between Pledge and Registrar.

"A new "joining" device can only initially use a link-local IPv6 address to communicate with a
   neighbour node using neighbour discovery [RFC6775] until it receives the necessary network configuration parameters. "
-> the part about "using neighbour discovery" I don't fully understand and is in general incorrect. The OpenThread implementation allows for example a Pledge to use Mesh Link Establishment (MLE, draft-ietf-6lo-mesh-link-establishment-00) communication to initiate discovery and linking with peer nodes.  There's no ND used. And with a link-local address the Pledge can also use other protocols like UDP or DTLS-over-UDP in principle, anything link-local would be possible. Most of this traffic of course won't be accepted by nodes in the mesh network due to security reasons. But a protocol may define some specific use cases where link-local UDP (or other protocols) are accepted without requiring the Pledge to use ND in any way. Again in OpenThread as an example, DTLS-over-UDP is used to do the handshake via the proxy/relay without ever using ND.

- Section 1 would need to have some text about the stateful/stateless solutions, too. I know this is said in Section 5 as well, but typically an introduction is meant to guide the reader into what can be expected in the rest of the document and this incurs some overlap of topics necessarily.

4. Join Proxy functionality

"assuming appropriate credentials are exchanged out-of-band, e.g. a hash of the Pledge (P)'s raw public
   key could be provided to the Registrar (R)."
-> I don't understand this, why is this assumption necessary? Can't we just assume the BRSKI case that P contains an IDevID and R may know nothing yet about P ?
(or, it may know a serial number of P but not yet the complete IDevID.) R learns the identity of P during the DTLS handshake that involves R learning about the IDevID.

Figure 1 and explanation -> we may also add that a Registrar can be located externally to the mesh. So, not necessarily on-mesh as the figure seems to suggest.

"EST Server" -> better replace with the introduced term "Registrar" to keep consistency.

This section defines the overall architecture and has the deployment diagram. So this would be a good section to consider the most common deployment cases, like:
A) Pledge -> stateful JP -> Registrar
B) Pledge -> stateless JP -> Registrar
C) Pledge -> stateless JP -> Registrar-Proxy -> Registrar
The latter C) I've added here to illustrate what could be deployed. Since the Registrar may be a "classic" Registrar per constrained-BRSKI that only serves DTLS on port 5684 and knows nothing about the JPY message format introduced in Section 5.2. In this case another proxy is required which I call "Registrar-Proxy" that translates JPY messages back to regular DTLS towards the existing/legacy Registrar.  Note that the Registrar-Proxy may reside at the same IP host as the Registrar, albeit at a different UDP port (not 5684) - this is then very similar to the case B).
It would be good to have some of these deployment considerations. The benefit of C) is that any 'stateful' operations are moved out of the mesh network to the Registrar-Proxy which resides typically on a powerful IP host outside the mesh.  Any constrained devices only implement stateless JP.

5. Join Proxy specification

Two modes are introduced here; it may be clarified that a Join Proxy MUST implement at least one of these two. (There may be implementations that can do both, or can switch to the right model to use based on some network configuration. But in typical cases a network standard only implements one of the two ways.)

5.1 Statefull Join Proxy

"The Join Proxy has has been enrolled via the Registrar and consequently knows the IP address and port of the Registrar.  "
-> this is not the case typically. The Join Proxy itself previously enrolled through another Join Proxy, without knowing the IP address of the Registrar!
There may be a mechanism to send the IP address of the Registrar to a Pledge after it has onboarded but we can't be sure that this is the case. It is not specified. And the way a Join Proxy learns about the Registrar's IP address (or hostname!) would be specific to the type/standard of 6lowpan network used. There are many flavours of it.

"The Pledge first discovers and selects the most appropriate Join Proxy.  (Discovery can be based upon [I-D.ietf-anima-bootstrapping-keyinfra] section 4.3 ..."
-> The discovery method for the Pledge is described in Section 4.1, not 4.3.

"The Join Proxy changes the IP packet (without modifying the DTLS message) by modifying both
   the source and destination addresses to forward the message to the intended Registrar."
-> The IP addresses of an IP packet should preferably not be changed in transit. A link-local destined packet from the Pledge also does not travel beyond the local link normally. 
Perhaps it is better described as the Proxy creating a new IP message, with new source/destination addresses. The new message then contains the relayed DTLS record.  This is conceptually more in line with the IPv6 addressing architecture. 
Whether we should call this NAT or not, is another question. For me personally I would just avoid calling it NAT. (E.g. I don't think any NAT would translate a link-local address to a global scope address.)

"Global IP address" -> used in the figure; it may be sufficiently clear already that this may be a ULA or GUA type address. Optionally this could be clarified in the Terms section what "global IP address" means, but if others disagree we don't need to add this.

Figure: the middle of the figure now has ":" characters, here we could add a generic statement like "<further DTLS messages>" or so.
-> caption of the figure could add 'DTLS' here, so "... DTLS joining message flow ..."


Best regards
Esko