Internet DRAFT - draft-vanrein-tls-symmetry
draft-vanrein-tls-symmetry
Network Working Group R. Van Rein
Internet-Draft ARPA2.net
Intended status: Standards Track March 11, 2016
Expires: September 12, 2016
Symmetry for Transport Layer Security
draft-vanrein-tls-symmetry-01
Abstract
TLS connections can be run over various transports, and can in turn
carry many application protocols. All current transports and at
least some application protocols are capable of running between
symmetric end points, in what could be called peer-to-peer mode, but
the use of TLS introduces a requirement to always assign a client and
server role. This specification defines a TLS Extension to remedy
that stringency of TLS.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 12, 2016.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
Van Rein Expires September 12, 2016 [Page 1]
Internet-Draft TLS Symmetry March 2016
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. The role_preference TLS Extension . . . . . . . . . . . . . . 3
3. Procedures . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Sending ClientHello with role_preference . . . . . . . . 4
3.1.1. Variation with implicit role_preference . . . . . . . 5
3.2. Receiving ClientHello with role_preference . . . . . . . 6
3.3. Not Receiving ClientHello with role_preference . . . . . 7
3.4. Sending ServerHello . . . . . . . . . . . . . . . . . . . 8
4. Configuring TLS for Symmetric Behaviour . . . . . . . . . . . 8
5. Efficiency Considerations . . . . . . . . . . . . . . . . . . 9
6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 9
7. Security Considerations . . . . . . . . . . . . . . . . . . . 9
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10
9. Normative References . . . . . . . . . . . . . . . . . . . . 10
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 11
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11
1. Introduction
TLS secures many application protocols, some of which can be run
symmetrically between peers, possibly after discovery through a
mechanism such as mDNS. The introduction of TLS as a security layer
underneath application protocols enforces the assignment of
asymmetric client and server roles, something that not all protocols
were designed to negotiate. Examples of application protocols that
do not suggest client and server roles for end points include XMPP
and SIP in peer-to-peer mode, or some uses of the symmetric MSRP
protocol. In addition, there are many non-standard protocols that
have been designed to operate symmetrically from the ground up
because they are meant for peer-to-peer operation.
TLS and its DTLS variation can be carried over transports UDP, TCP
and SCTP. It is commonly understood that UDP can be initiated from
both sides at the same time; and though less well-known, TCP and SCTP
can also be setup between two active end points; in this situation
both end points initiate the connection, and as a result of network
communication delays these attempts cross midway. And indeed, this
is even a practically possible situation when one or both end points
have a known address, for instance as a result of prior exchange of
transparent addresses. Furthermore, firewalls and other middle boxes
tend to faithfully implement the TCP state diagrams [Figure 6 of
[RFC0793]] that enable this connection setup between two active end
points. Lacking an obvious active and passive side for at least some
Van Rein Expires September 12, 2016 [Page 2]
Internet-Draft TLS Symmetry March 2016
transport connections means that this is not always available as a
tie-breaker to assign TLS client and TLS server rolese.
The need to authenticate a remote peer may help to decide which side
must play the role of client, and which is to be the server. But in
situations with mutual authentication using a more-or-less symmetric
CipherSuite, this last reason for asymmetric client/server role
separation may also be unsuitable.
To remedy that, this specification introduces a TLS Extension that
can be used to indicate that the client/server role assignment is
open for negotiation as part of the TLS handshake. It can also be
used by a TLS server that wants to actively initiate a connection to
a TLS client, and even by a TLS end point that wants to open a hole
in its local firewall.
The modified protocol flow lets both end points send a ClientHello
containing the new TLS Extension, and based on a tie-breaker value in
that extension each party reaches the same conclusion on which TLS
end point continues as a client, and which continues as a server.
The following figure demonstrates how the resulting TLS flow looks.
ClientHello <-------> ClientHello
+role_preference +role_preference
ServerHello
ServerKeyExchange
<-------- ServerHelloDone
ClientKeyExchange
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
2. The role_preference TLS Extension
The role_preference extension carries a byte sequence of at least 1
byte and at most 32 bytes in its extension_data field; each of the
bytes must have a value of at least 33 and no more than 126; this
makes the byte sequences suitable for treatment as case-sensitive
ASCII strings; it should however be noted that these strings have no
terminating NUL character.
These role_preference values may be compared on a byte-by-byte basis
to determine whether one is ordered before another. The first byte
value that differs determines which of the strings is ordered before
Van Rein Expires September 12, 2016 [Page 3]
Internet-Draft TLS Symmetry March 2016
the other; and if one string equals the other but has additional
bytes then the shorter is ordered before the longer one. When one
role_preference values is exactly the same as another, they are said
to be ordered as equals. When one role_preference value is neither
ordered before, nor as an equal to another, then the one is said to
be ordered after the other.
An easy way to remember these ordering rules is that an extension
value "client" is ordered before extension value "server"; and this
hints at the intention: if one role_preference value is ordered
before another, then the party who sent the one value should take on
the role of TLS client, whereas the party that sent the other value
should take on the role of TLS server. When two role_preference are
ordered as equals then the surrounding TLS handshake fails, on
grounds of not being able to establish a client/server role
distinction, which should be reported through a handshake_failure
alert.
3. Procedures
This section defines procedures for sending ClientHello and
processing the reception of one.
3.1. Sending ClientHello with role_preference
A ClientHello with the role_preference extension may be sent once by
each of the peers, as the initiation of a TLS handshake. The order
in which the sides send this extension is arbitrary. It is only
possible to send a ClientHello with the role_preference as the first
record in a TLS handshake, either on a fresh connection or during
(secure) renegotiation.
It is considered an error condition when both sides send a
ClientHello but not both incorporate the role_preference extension.
This situation MUST result in a handshake_error alert, and may be the
cause for a new attempt over a new connection. A more conservative
approach would be for a TLS end point to wait for a ClientHello from
the remote end point and see if the extension is present; this can
work if the remote TLS end point is known to be able to act as a
client. Context, historic behaviour and the application protocol can
all be helpful determine the most useful approach here.
The normal practice, used when sending a ClientHello without caring
about the role that one will fulfil, is to generate 32 bytes in the
range from 33 to 126, and send those in the role_preference
extension.
Van Rein Expires September 12, 2016 [Page 4]
Internet-Draft TLS Symmetry March 2016
The role_preference value comprising of a single byte valued 33 will
never have a value ordered before it; this can be sent to require a
client role. The role_preference value comprising of 32 bytes, all
valued 126, will never have a value ordered after it; this can be
sent to require a server role. When both sides send the same
role_preference value, a handshake_error alert will be the result;
this will normally be the result of using these role-insisting, non-
random values in a conflicting manner.
When a TLS end point is neutral about its role as a client or a
server, it can send any value in between, and it should send a random
value to achieve a high probabily of being compatible with any remote
TLS end point. The probability of running into a random value from
the remote that happens to be the same will be negligable for long
enough extension values.
Other details in the ClientHello, such as a Server Name Indication
and listed CipherSuites, SHALL be representative only of a potential
client role; the TLS end point that ends up in the server role will
send a ServerHello with new information and its initial ClientHello
SHALL NOT be processed further.
3.1.1. Variation with implicit role_preference
There may be special circumstances in which both end points know of
themselves and the remote party that both are able and willing to
serve as a client and as a server. This would include application
protocols that are willfully programmed to be symmetric, and to use a
Symmetric TLS layer. The most notable use case for these are so-
called peer-to-peer systems.
Under such special circumstances, other defaults may apply, and even
in absense of a role_preference extension the logic of this
specification could be followed. It is then possible to accept a
ClientHello without a role_preference extension and treat it as one
that had this extension. It is even possible that one endpoint sends
a role_preference extension, while the other leaves it implicit. All
this is left to such special applications, and not specified here,
other than to mention that there might be more liberating
considerations than the general situation described in this
specification.
Under implicit role_preference, the value that would otherwise be
carried in the role_preference TLS extension will in these cases be
taken from the random information included in the ClientHello
message. Specifically, the first 32 bytes of the random_bytes field
in the Random structure. Note that this is the part following after
Van Rein Expires September 12, 2016 [Page 5]
Internet-Draft TLS Symmetry March 2016
the gmt_unix_time field in the Random structure, but that it does not
include the timestamp itself.
In this implicit alternative to the role_preference TLS extension,
there is no way to enforce the client or server role with a specific
value, as that would deteriorate the quality of the random_bytes.
Since the use case for implicit role_preference is for parties that
are willing and able to perform both roles, this should not feel as a
restriction.
The implicit role_preference approach is relatively straightforward
to wrap around any existing TLS implementation. An end point may be
setup as a client, its ClientHello passed from TLS stack out over the
network connection to the remote peer, and the remote's ClientHello
received but not directly forwarded. Then, the role_preference bytes
are extracted from both ClientHello's, and roles assigned. If the
local endpoint ends up in the client role, then the remote
ClientHello is dropped and further TLS exchanges will be passed on
between remote peer and local TLS stack without further intervention.
Alternatively, if the local endpoint ends up in the server role, the
local TLS client connection is torn down and replaced by a TLS server
connection. At that point the ClientHello from the remote peer will
be forwarded to the local TLS stack, and further TLS exchanges will
be passed on between remote peer and local TLS stack without further
intervention.
3.2. Receiving ClientHello with role_preference
When a ClientHello with the role_preference extension is received and
a ClientHello has not been sent yet, then a ClientHello with the
role_preference should still be sent by supporting implementations.
Only TLS implementations or configurations that do not support the
role_preference extension would not send this ClientHello.
After a ClientHello with role_preference is both sent and received,
their values can be ordered. When the extension value sent is
ordered before the extension value received, the local side will
continue as a TLS client and the ClientHello sent continues as the
ClientHello record for the TLS handshake, whereas the ClientHello
received is strikken from the TLS handshake. When the extension
value sent is ordered after the extension value received, the local
side will continue as a TLS server and the received ClientHello
continues as the ClientHello record for the TLS Handshake, whereas
the ClientHello sent is strikken from the TLS handshake. When the
extension values sent and received are ordered as equals, a
handshake_error alert is locally processed as though it had been
received over the TLS connection.
Van Rein Expires September 12, 2016 [Page 6]
Internet-Draft TLS Symmetry March 2016
When a ClientHello mesage is strikken from the TLS handshake, the
following can be said:
o All the information contained in the strikken ClientHello message
is forgotten.
o The random material in the strikken ClientHello message is
therefore also dropped; the same random material may however be
used in the ServerHello, since that is sent by the same party and
because it impacts further security mechanisms in the same manner.
o The strikken ClientHello message has no security impact; even the
selection of the role is not a security matter, since that is
already customarily done outside the protected scope of TLS. As a
result, the strikken ClientHello message is not taken into account
when constructing the handshake_messages for the Finished message
[Section 7.4.9 of [RFC5246]] or other messages. In other words,
the handshake_messages are formed from the traditional sequence
ClientHello, ServerHello, ...
3.3. Not Receiving ClientHello with role_preference
When a ClientHello with the role_preference extension has been sent,
but the remote TLS end point respondes with a ClientHello without
role_preference extension, then a handshake_error alert MUST be
raised, as the handshake procedure was not properly adapted to this
specification.
When a ClientHello with the role_preference extension has been sent,
but the remote TLS end point responds with a ServerHello, it is clear
that no ClientHello is to be expected. The conclusion is then that
the remote TLS end point does not implement the role_preference
extension. In this case, the handshake continues as it would have
without the role_preference extension; the TLS end point that sent
the ClientHello continues as a client and the TLS end point that
responded with a ServerHello continues as a server.
As an exception to the last paragraph, there is the situation where
the role_preference was set to require a server role. In this case,
a ServerHello response from the remote TLS end point SHOULD be
considered an error, and will raise the handshake_error alert. Note
that this is actually a new use case, where a server sends a
ClientHello and expects the other side to initiate a client
connection on its initiative; this is not part of the usual TLS flow,
so it does not dismantle any of the normal TLS usage patterns.
Van Rein Expires September 12, 2016 [Page 7]
Internet-Draft TLS Symmetry March 2016
3.4. Sending ServerHello
When one of the TLS end points has been selected to fulfil the server
role, it will send the usual ServerHello. ServerHello messages MUST
NOT include the role_preference extension, as this has already been
acknowledged in the ClientHello response preceding the ServerHello.
In fact, the ServerHello and all follow-up messages conform to the
existing TLS procedures. Only when renegotiating TLS with a new
handshake will the possibility of change of roles come up again.
4. Configuring TLS for Symmetric Behaviour
The role_preference extension MUST NOT be sent by default by a
general TLS implementation. Only when it is implemented with the
possibility of symmetric peers in mind, or when it is explicitly
configured to permit this mode of operation, SHOULD the
role_preference extension be sent.
Most current applications of TLS are aware of client and server
roles, and will specify their authentication and encryption
requirements in those terms. For example, it is often assumed that a
client does not offer authentication, but that a server will
authenticate to the client. The client thereby becomes the
responsible party to detect man-in-the-middle attacks, because the
server cannot distinguish an honest client from a rogue one. Note
that this protocol flow is asymmetric, and as a result so is its
configuration.
When welcoming both client and server roles, the TLS implementation
conceals the actual client and server role assignment, and the
application using it will be considered as a symmetric peer. This
has an impact on the configuration, which must now speak in terms of
local and remote configuration, instead of in terms of client and
server configuration. Not all CipherSuites are equally suited for
this mode of operation, but use cases that require mutual
authentication are reasonably well-supported, and are also the most
likely for symmetric peer-to-peer applications of TLS.
During renegotiation of the handshake, the roles of client and server
may be swapped. This process is asynchronous to the application-
level protocol, and MUST NOT be permitted by default, unless it is
explicitly configured from code that is aware of the application
protocol's assumptions.
TLS implementations that can end up being either a client or a server
SHOULD permit separate configuration of the various parameters that
are negotiated during the ClientHello, ServerHello handshake. They
Van Rein Expires September 12, 2016 [Page 8]
Internet-Draft TLS Symmetry March 2016
should permit separate CipherSuite lists for the two roles, for
instance, and their use of Server Name Indications and other
extensions may also differ between the two roles.
5. Efficiency Considerations
The TLS changes specified here introduce one more message to the TLS
handshake. When this message is generated asynchronously, there is
no need for an extra roundtrip, as both sides simply start sending it
as soon as the connection comes up. Whether this is safe depends in
part on the application protocol; symmetric peer-to-peer protocols
will often be able to assume support for the extension.
When the extension is negotiated by a side that defaults to the
client role, then a side that defaults to the server role would await
it and be required to send the additional ClientHello in its response
to indicate support for the role_preference extension. If this
response lets the sides take on their default roles, then no extra
roundtrip is required because the additional ClientHello can be sent
together with the ServerHello that immediately follows it. If the
response switches sides, then half a roundtrip is added, as the sides
switch their roles. The added flexbility of making this switch may
be considered sufficiently valuable to invest this half roundtrip
time.
The generated random values for the role_preference extension need
not be cryptographically secure values; they merely exist as a tie-
breaker in the client/role appointment. This can be achieved with a
lower quality random number generator, which can be implemented more
efficiently than a secure random number generator.
6. Privacy Considerations
The ClientHello sent by the server provides additional information,
such as the CipherSuites acceptable to the server when it ends up in
client mode, and extension information such as a Server Name
Indication.
7. Security Considerations
This specification introduces more dynamicity to TLS, and that is
automatically a concern. The additional flexibility is not advised
as a default mode of operation for general TLS implementations, to
avoid interfering with the assumptions made by current applications
about strict client/server behaviour of TLS.
Applications that are aware of their potential to be either a TLS
client or a TLS server should be mindful, and select separate
Van Rein Expires September 12, 2016 [Page 9]
Internet-Draft TLS Symmetry March 2016
configuration settings for each role. It may be helpful to permit
configuration to take place in terms of requirements of
authenticating the remote end. And, just as any TLS configuration
should take the possibility of NULL CipherSuites into account, it
should also be aware of the impact of the various CipherSuites on the
two roles to be played.
In a symmetric peer-to-peer application, it makes some sense to
consider both the client and server role, and setup for both. This
work is otherwise done separately on each end, but symmetric peer-to-
peer protocols tend to connect in both directions and therefore
already require both configurations to be defined. This has not
changed; what has changed is that the application is not necessarily
aware of which applies.
Having said that, most TLS implementations will not conceal the
chosen role completely, because many application protocols need to
know about it.
A concern that TLS end points must be aware of when permitting
changes of role, is that there may sometimes be a reason to
renegotiate the handshake, in which case the client has a decisive
role, whereas the server can only ask the client. Whether this could
be problematic is an application-level decision to be taken into
account before enabling Symmetric TLS through the role_preference
extension.
It is also worth noting that the renegotiation provides an
opportunity for change of the assignment of client and server roles.
This may happen in a manner that is asynchronous to the application-
layer protocol. This may or may not be a desired effect, which is
why it is recommended as an explicit option to configure, defaulting
towards the conservative option of not permitting a change of the
roles.
8. IANA Considerations
This specification defines a TLS extension, to be registered by IANA
in the TLS Extensions Registry, ExtensionType Values subregistry.
The Extension Name to be used is role_preference.
9. Normative References
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
RFC 793, DOI 10.17487/RFC0793, September 1981,
<http://www.rfc-editor.org/info/rfc793>.
Van Rein Expires September 12, 2016 [Page 10]
Internet-Draft TLS Symmetry March 2016
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<http://www.rfc-editor.org/info/rfc5246>.
Appendix A. Acknowledgements
This work was conducted under an SIDNfonds grant for the "p2p
toolkit" project.
Author's Address
Rick van Rein
ARPA2.net
Haarlebrink 5
Enschede, Overijssel 7544 WP
The Netherlands
Email: rick@openfortress.nl
Van Rein Expires September 12, 2016 [Page 11]