Daniel,
I don't think an area reviewer has to 'approve' that your changes are
satisfactory. But I will take a quick look. I think WG chairs, the doc
shepherd, the IESG, or whoever it may concern might look at comments in
area reviews to check they have been addressed, but I don't think this
is meant to be a heavyweight process that you have to 'pass'.
Pls see inline, tagged [BB]...
On 24/09/2021 15:04, Daniel Migault wrote:
Hi Bob,
I am willing to publish the changes on the git. Let me know if you are
planning to do a pull request or if you have any additional comments.
Yours,
Daniel
On Thu, Sep 2, 2021 at 5:37 PM Daniel Migault <[email protected]
<mailto:[email protected]>> wrote:
Hi Bob,
Thanks for the careful review. I am responding inline to your
comments. I have uploaded the version with the changes here:
https://github.com/mglt/draft-mglt-lwig-minimal-esp/commit/e20ac927b8d0f41e91868a9c2bb81a765f337fbe
<https://github.com/mglt/draft-mglt-lwig-minimal-esp/commit/e20ac927b8d0f41e91868a9c2bb81a765f337fbe>
Yours,
Daniel
On Wed, Sep 1, 2021 at 7:54 PM Bob Briscoe via Datatracker
<[email protected] <mailto:[email protected]>> wrote:
Reviewer: Bob Briscoe
Review result: On the Right Track
This document has been reviewed as part of the transport area
review team's
ongoing effort to review key IETF documents. These comments
were written
primarily for the transport area directors, but are copied to
the document's
authors and WG to allow them to address any issues raised and
also to the IETF
discussion list for information.
When done at the time of IETF Last Call, the authors should
consider this
review as part of the last-call comments they receive. Please
always CC
[email protected] <mailto:[email protected]> if you reply to or
forward this review.
==A) General Comments==
===A.1) Caveat Regarding Transport Area Expertise ===
Although this review is on behalf of the transport area review
team, I don't
claim to know much about the interactions between IPsec and
the transport layer
(e.g. NAT traversal, etc), which is not my area of expertise.
===A.2). The document doesn't do what the Title, Abstract and
Intro say===
Abstract
This document describes a minimal implementation of the IP
Encapsulation Security Payload (ESP) defined in RFC 4303. Its
purpose is to enable implementation of ESP with a minimal
set of
options to remain compatible with ESP as described in RFC 4303.
Introduction
...This document describes the minimal properties an ESP
implementation needs to meet to remain interoperable with
[RFC4303]
ESP. In addition, this document also provides a set of
options to
implement these properties under certain constrained
environments.
The draft doesn't define a minimal implementation (singular).
It gives
considerations that might help minimize each of many
application-specific
implementations (plural).
Given the title, abstract and introduction, the reader expects
a draft that
defines a single clear profile that is a subset of the generic
ESP protocol -
perhaps like minimal IKEv2 [RFC7815] is a subset of IKEv2
[RFC7296]. That
expectation rapidly leads to disappointment. Indeed, the
style of this draft
is quite the opposite from a single recommended
implementation. The draft's
style is not even clear-cut conditional statement like "in
scenario X do Y".
The style is more like "Think carefully about this, that and
the other".
So the word "Considerations" definitely ought to be included
in the title.
Perhaps "Considerations for Minimizing Encapsulation Security
Payload (ESP)
Implementations" (also note the abbreviation is expanded).
[BB] Title: Pls consider expanding the ESP abbreviation.
If this were about TCP, DNS, IPsec, BGP, HTTP, they certainly wouldn't
need expansion.
But ...ESP? ...nyuh.
I got your point, overall the document details how to implement
ESP with the minimum functionalities to remain compatible with
4303 which I think is a minimal ESP. The document also describes
how in a constrained world these functions can be implemented. I
think we should clarify the protocol and implementation aspects in
the abstract as follows:https://datatracker.ietf.org/doc/html/rfc793
Abstract:
"""
This document describes a minimal IP Encapsulation Security
Payload (ESP) defined in RFC 4303. Its purpose is to enable
implementation of ESP with a minimal set of options to remain
compatible with ESP as described in RFC 4303.
A minimal version of ESP is not intended to become a replacement
of the RFC 4303 ESP.
Instead, a minimal implementation is expected to be optimized for
constrained environment while remaining interoperable with
implementations of RFC 4303 ESP.
In addition, this document also provides some considerations to
implement minimal ESP in a constrained environment which includes
limiting the number of flash writes, handling frequent wakeup /
sleep states, limiting wakeup time, or reducing the use of random
generation.
This document does not update or modify RFC 4303, but provides a
compact description of how to implement the minimal version of the
protocol. RFC 4303 remains the authoritative description.
"""
For the introduction I do not believe this should be clarified and
it seems the following text is clear enough. Is there anything
that we should clarify ?
"""
This document describes the minimal properties an ESP
implementation needs to meet to remain interoperable with <xref
target="RFC4303"/>ESP.
In addition, this document also provides a set of options to
implement these properties under certain constrained environments.
This document does not update or modify RFC 4303, but provides a
compact description of how to implement the minimal version of the
protocol.
RFC 4303 remains the authoritative description.
"""
[BB] Abstract: The doc really does not describe just one minimal ESP.
Why write an abstract that describes something different to what the
document is?
Intro: Agree it's OK.
===A.3). Interoperability===
After Nancy Cam-Winget's review of -03, the sentence in the
introduction was
clarified that interop meant interop with full RFC4303
implementations
... to remain interoperable with [RFC4303] ESP.
However, in the sections on specific fields, I believe there
are cases where
interop seems to be restricted to an app-specific ESP peer
rather than any
general RFC4303 peer. For instance: * §2 suggests use of an
SPI that includes
the memory address of the SAD structure, but it is not spelled
out how the
remote (possibly vanilla RFC4303) peer will know to apply an
SPI to packets
that will have the appropriate value for the local peer to
locate in its SAD,
given the SPI set by the remote peer is the local peer's
inbound SPI.
Well the remote peer does not need to know how you generate the
SPI nor how you handle the SPI. In this example, you tell the peer
to use the SPI that corresponds to your memory address. The peer
will use that SPI for your incoming packet. Upon receiving the
packet you interpret the SPI as a memory address. Note that for
outgoing packets, the lookup is based on the traffic selectors -
that is the clear text packet.
[BB] OK - I'll concede that one :)
But I'm sure there were other examples that seemed app-specific (like
the next one), but I'll leave you to check them all.
* In §3
it is remarked that the sender's use of time to generate the
SN would require
the receiver to be appropriately configured, which implies the
receiving peer
would somehow have to know the typical size of the sending
peer's SN increments
to configure an appropriate window size.
I see your point but note that 4303 only requires an only
increasing function to be used to generate the SN. While in some
cases this might lead to sub optimal configuration this still
provides interoperability. Suppose that one peer defines a window
size to be set to X. This means that it is willing to accept no
more than X packets. Using a packet counter you may reach that
number, which is unlikely to be the case when you use time. But in
any case you do not exceed the window size. You may have a few
additional packets to retransmit though.
[BB] When using time, the range of seq numbers covered for say 100
packets would typically be significantly more than 100 (see later about
irregular inter-packet time intervals).
When you say there would be a few retransmissions, does that imply that
you're thinking that a sequence of packet timestamps would map to SNs
that sometimes collide and then cause false positive replay detection.
Surely you wouldn't want the granularity of the mapping between time and
SNs to be that poor?
===A.4) Completeness===
The IPsec protocol fields are used as the framework to hang
the document
contents from. But surely the data plane is not the only part
of an IPsec ESP
implementation? What about restricting the range of valid
values in an SA
itself, to reduce complexity? What about reducing complexity
of the SAD
(mentioned in §2, but not addressed specifically in its own
right)? What about
simplifying the management interface? There's no mention of
simplifying (or
eliminating) auditing, which is optional in RFC4303.
I am not involved in the security area, so apologies if all
the above is dealt
with in other lwig drafts.
Well, IPsec defines an architecture and ESP is one protocol used
to transmit data, so in essence it is restricted to the data
plane. The document considers cases when the device is
provisioned with a long term key, but in general we recommend
IKEv2 to configure ESP. The IPsec architecture does not define how
to configure ESP. Only recently a YANG model has been defined.
Reducing the complexity of the SAD seems to me out of scope of the
document.
[BB] That's what I'm asking - the document needs to say what is and
isn't in scope - and why.
Why is the SAD out of scope? It's what ESP uses for every packet lookup.
Streamlining the complexity of the SAD is surely likely to significantly
help a constrained device.
Why is auditing out of scope? Not supporting auditing would considerably
lighten a constrained implementation.
All the code to supporting an interface to manage the device is likely
to take up more memory than the data plane, unless the full extent of
configuration and management flexibility is cut to the bone.
===A.5) 'It is recommended' ambiguity===
There are 5 occurrences of this ambiguous phrase. The first
two examples (at
least) are ambiguous:
For nodes supporting only unicast communications, it is
recommended
to index SA with the SPI only.
...
For inbound traffic, it is recommended that any receiver
provides
anti-replay protection,
Do these mean that RFC4303 recommends these things, or that
the present draft
recommends them for minimal implementations? Pls check the
other 3 occurrences
too.
recommendations are from the document, but closely rephrasing
4303. 4303 says:
The SPI has a local significance to index the Security Association
(SA). From [RFC4301] section 4.1, nodes supporting only unicast
communications can index their SA only using the SPI. On the other
hand, nodes supporting multicast communications must also use the IP
addresses and thus SA lookup needs to be performed using the longest
match.
and
The SN is set by the sender so the receiver can implement anti-replay
protection. The SN is derived from any strictly increasing function
that guarantees: if packet B is sent after packet A, then SN of
packet B is strictly greater then the SN of packet A.
In the early version of the document we used RECOMMENDED but we have been
asked to use lower letters as the document is informational. I am wondering if
the confusion comes from the use of lower letters.
[BB] No, the confusion comes from the use of the passive, which doesn't
say what is doing the recommending: this draft or RFC4303? Please just
say either "the present document recommends" or "RFC4303 recommends",
whichever you mean.
===A.6) 'May not' ambiguity ===
There's 5 occurrences of this too. I think only the first 2
are ambiguous.
... nodes designed to only send data may not implement this
capability.
...a minimal ESP implementation may not
generate such dummy packet.
Pls avoid it. In English, 'may not' can either mean 'might
not' or 'must not',
depending where the emphasis is.
Thanks, the meaning here is "might not". A "must not" would update
4303. I will leave it as it is until we are sure we do not re
capitalize the text, but if it remains with lower letters I will
check with my ADs / rfc editor what is most appropriate.
[BB] Pls do not leave it as it is. If it means might not, say might not.
It is coincidental that we're talking about two words (may and must)
that are sometimes capitalized. My point was nothing to do with whether
these were normative. The problem is purely that the phrase "may not"
should be avoided in English because it is invariably ambiguous.
===A.7) Try to avoid words that would be normative if upper
case===
It's up to the authors, but I would advise against using must,
should, may etc.
in lower case in any RFC, given readers sometimes imagine that
they might have
been intended to mean MUST, SHOULD, or MAY. Suggested lower
case alternatives:
have to, ought to, and might.
In our case that is how they came. I will check with our AD/IESG
what their preference is. My personal preference would be upper
case, than lower case - I think for the exact reasons you raised.
Thanks for providing the alternatives, that is useful.
==B) Specific Technical Points==
===B.1) Vague sentence in §2===
Some other local constraints
on the node may require a combination of the SPI as well as
other
parameters to index the SA.
I propose the following change:
OLD:
"""
For nodes supporting only unicast communications, it is
recommended to index SA with the SPI only.
The index may be based on the full 32 bits of SPI or a subset of
these bits.
Some other local constraints on the node may require a combination
of the SPI as well as other parameters to index the SA.
"""
NEW:
"""
For nodes supporting only unicast communications, it is
recommended to index SA with the SPI only.
The index may be based on the full 32 bits of SPI or a subset of
these bits.
The node may require a combination of the SPI as well as other
parameters (like the IP address) to index the SA.
"""
===B.2) Last para of §2.1 ends up in the air===
I think this para is trying to say that there's no need to
ensure that SPI
generation is properly random if a privacy analysis of the
application doesn't
require this. It falls short, needing a final sentence to
actually say this, if
that is what it intends to say.
ok I propose the following changes:
OLD:
While the use of randomly generated SPIs may reduce the leakage or
privacy of security related information by ESP itself, these
information may also be leaked otherwise and a privacy analysis
should consider at least the type of information as well the
traffic pattern.
NEW:
While the use of randomly generated SPIs may reduce the leakage or
privacy of security related information by ESP itself, these
information may also be leaked otherwise.
As a result, a privacy analysis should consider at least the type
of information as well the traffic pattern before determining non
random SPI can be used.
Rather than make the controversial point that the state of a
sensor reporting
the open/closed state of a door doesn't typically leak privacy
info, the
controversy can be avoided. All that is needed is to say that
/if/ messages for
a particular application are not privacy sensitive, a
randomized SPI is not
necessary.
I think the new text makes it clearer. The purpose of the door is
to provide an illustrative example, that proves the existence of
such situation.
[BB] My point was that, given this is only an example, you don't need to
say that the state of a door doesn't typically leak privacy info, which
is a controversial statement (for instance I don't think I could agree
with that). But it doesn't matter whether it's true, you don't need to
say it. All you need to say is "for instance, if the state of a sensor
reporting the open/closed state of a door doesn't leak privacy info, a
randomized SPI is not necessary."
BTW, this does beg the question whether the implementer can
foresee the
different trust environments an application might be used in
(e.g a door
open/closed message might have no privacy implications for one
application, but
then a more ambitious application might be built on top of the
original app).
Application in constrained environment are by definition very
specific, as such non constrained applications developers are
more likely to base their development on more generic
implementation, unless they have a strong willingness to make it
wrong.
In summary, it's a moot point whether an app developer can be
expected to
properly analyse privacy vulnerabilities, or whether it's just
better to play
safe with a randomized SPI.
I think the text clearly says random SPIs are recommended - which
I think goes along what you are mentioning. The other way around
is that for device that cannot generate these randoms. In that
case it seems safer to provide a mean they can use ESP to protect
their communication that they do not implement any security.
===B.3) Use of time-driven SN still requires sequence state===
When the use of a
clock is considered, one should take care that packets
associated
with a given SA are not sent with the same time value.
To check that no two time values are the same requires holding
the same state
as would be needed to increment a counter - taking us back to
square 1.
This is enforced by design of your application and of course there
are application this does not work. This is left as an option.
[BB] The doc needs to say that then. For example, "one should only
consider use of a clock to generate SNs if the application will
inherently ensure that no two packets with a given SA are sent with the
same time value. Otherwise sequence state will be required, defeating
the benefit of using a clock."
===B.4) Other problems with time-driven SN===
§3 says
...if not appropriately configured, the use of a
significantly larger SN may result in the packet out of the
receiver's windows and that packet being discarded.
BTW, I think that is meant to say 'a significantly larger SN
*increment* may
result in...' Assuming that's what was meant, it's not just a
question of a
standard receiver being 'appropriately configured', but also
whether standard
receiver implementations would be even capable of supporting a
much larger
anti-replay window, which would require receivers to manage a
significantly
larger bit-map in memory.
I think increment can mean counter +=1 and so could be misleading
as opposed to using larger, so I prefer to keep larger unless this
is not what needs to be clarified.
[BB] OK, use "SN difference" then. But pls don't leave it as it is -
surely you don't mean that the size of each sequence number itself is large.
Again, there are cases this is not appropriated and we are not
recommending to implement this everywhere. That said, there is no
special need for the receiver if the receiver has a window size of
1000 and is using a packet count for anti-replay. The sender using
time will makes the windows size as packets sent in the last 1000 ms.
[BB] You seem to be imagining that packets are sent at absolutely
regular intervals. That never happens. Imagine the designer has to allow
for packets sent at the following monotonically increasing μs times, and
the smallest delta is known to be 50μs. Then the best stateless
translation into SNs will produce the following sequence:
14568 -> 0
15243 -> 14
15293 -> 15
16897 -> 47
18432 -> 77
18743 -> 84
This has expanded the size of replay window needed by about 16x. Of
course, the application might not be so irregular but, when mapping
timestamps to SNs, there will always be some expansion in the required
window size due to a degree of jitter.
This tradeoff between statelessness and increased window size needs to
be explained. Personally I cannot imagine /any/ case where saving one
integer of state to avoid SN duplication could ever be worth the cost of
the state needed to hold an inflated replay window, which is bound to be
greater than one int. If such a tradeoff makes sense to you, then it
surely needs to be explained (not to me in this email, but in the doc).
Also, for devices that spend significant time sleeping, the SN
would jump
hugely on first waking. That shouldn't require any larger
window (unless a
stale packet from prior to the sleep was only released after a
new packet on
waking). But the receiver would need to be able to somehow
detect massive jumps
in the high order bits that are not communicated in the SN field.
Small jumps or massive jumps have no impact on the windows size.
The windows size only tells the packets that will not be rejected.
These packets are those with the SN between LAST_SN and LAST_SN -
WINDOW_SIZE.
[BB] When a massive jump wraps the ESN, surely the SN could collide with
one already recorded in the anti-replay window?
===B.5) The need for anti-replay protection===
§3 says:
Receiving peers may also
implement their own anti-replay mechanism.
Assuming this is meant to mean "Receiving *applications* may
also...", it is
true. However, as I understand it, IPsec provides a general
anti-replay
facility for all the cases where anti-replay is not done e2e
in higher layers.
Indeed, most e2e security protocols prevent replay, but most
application logic
does not, and sometimes, just sometimes, this might open up a
vulnerability .
IPsec anti replay mechanism only apply to the IP layer. I
understand application replay as the same query being sent. If the
query is in a different packet IPsec does not help.
That said in IoT world, device and applications might be the same
entity, in which case the application may leverage from IPsec
anti-replay protection. But in general application logic should
provide some protection against anti-replay. I think we agree on
this. Now I am trying to understand if there is anything that
could be added to the document, but I think that applications
considerations are a bit out of scope of the document.
[BB] I guess it's not clear why the sentence I quoted is there in the
draft. It's perhaps hinting that IPsec anti-replay might not be needed?
Which is why I pointed out that IPsec anti-replay is really doing a
different job. So, if this sentence is used, it should be clear what
implication is intended.
===B.6) TFC more appropriate for IoT?===
One could argue that Traffic Flow Confidentiality (§4) is
*more* applicable for
large classes of IoT applications than other 'traditional'
applications of
IPsec. Many IoT apps send only a few different types of
message, which are
perhaps more likely to be distinguishable from the sizes of
the encrypted
messages. This point is made in the draft, but not clearly enough:
In
most cases, the payload carried by these nodes is quite
small, and
the standard padding mechanism may also be used as an
alternative to
TFC,
This comes just after the draft has recommended that TFC is
*not* used (because
standard devices haven't adopted it). But it's not really
clear here that it is
recommending that TFC ought to be used in these cases with a
limited set of
messages, and that 32-bit alignment will often be a sufficient
mechanism.
Indeed the draft continues, saying it is preferred to poll,
rather than send
only when an event occurs. That is surely a form of TFC as well.
If anything, the draft ought *not* to recommend against TFC,
which is only on
the spurious grounds than non-IoT applications have tended not
to need it.
Padding/dummy packet are likely to remain sufficient. If that is
not the case, and that TFC is needed it is likely that we do not
have a constrained device as we are trying hard to limit the
number of frames sent for IoT devices. It is also really hard to
configure TFC properly, so currently implementing it is likely to
create a bias that will detect the application in question and as
such loose a lot of the expected privacy.
[BB] Apart from the first sentence these are different points. They
basically say TFC doesn't work. Unfortunately, the problem TFC was meant
to solve still exists, whether TFC works or not. The draft should not
translate "TFC doesn't work" into "A working TFC isn't needed".
===B.7) Sleep as well as reboot===
§8 on Security Considerations discusses using session keys
across reboots. I
think it would appropriate to talk about across sleep periods
as well.
A SA is not affected by a sleep. It does not make any deference
the devices sleep or not and more importantly IV are not repeated
- by design. Reboot clear the SA context and might repeat the IV.
Unless I am missing anything I do not see the concern with sleep.
[BB] OK.
Bob
==C) Editorial Nits==
I found loads. I'll send an edited XML file if time permits.
Otherwise, we'll
have to trust that the RFC Editor will find them and fix them all.
Regards
Bob Briscoe
_______________________________________________
Lwip mailing list
[email protected] <mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/lwip
<https://www.ietf.org/mailman/listinfo/lwip>
--
Daniel Migault
Ericsson
--
Daniel Migault
Ericsson
_______________________________________________
Tsv-art mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/tsv-art
--
________________________________________________________________
Bob Briscoehttp://bobbriscoe.net/
_______________________________________________
Lwip mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/lwip