forked from juga0/privacy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
draft-ietf-dhc-anonymity-profile.xml
1383 lines (1293 loc) · 61.6 KB
/
draft-ietf-dhc-anonymity-profile.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc791 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0791.xml'>
<!ENTITY rfc2131 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2131.xml'>
<!ENTITY rfc2132 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2132.xml'>
<!ENTITY rfc3315 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3315.xml'>
<!ENTITY rfc3633 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3633.xml'>
<!ENTITY rfc3925 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3925.xml'>
<!ENTITY rfc3942 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3942.xml'>
<!ENTITY rfc4086 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4086.xml'>
<!ENTITY rfc4361 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4361.xml'>
<!ENTITY rfc4702 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4702.xml'>
<!ENTITY rfc4704 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4704.xml'>
<!ENTITY rfc4861 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4861.xml'>
<!ENTITY rfc4941 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4941.xml'>
<!ENTITY rfc4578 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4578.xml'>
<!ENTITY rfc6059 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6059.xml'>
<!ENTITY rfc6355 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6355.xml'>
<!ENTITY rfc7217 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.7217.xml'>
<!ENTITY rfc7618 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.7618.xml'>
<!ENTITY I-D.ietf-6man-default-iids PUBLIC ''
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-6man-default-iids.xml">
<!ENTITY I-D.ietf-6man-ipv6-address-generation-privacy PUBLIC ''
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-6man-ipv6-address-generation-privacy.xml">
<!ENTITY I-D.ietf-dhc-dhcp-privacy PUBLIC ''
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dhc-dhcp-privacy.xml">
<!ENTITY I-D.ietf-dhc-dhcpv6-privacy PUBLIC ''
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dhc-dhcpv6-privacy.xml">
<!ENTITY I-D.ietf-dhc-rfc3315bis PUBLIC ''
"http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-dhc-rfc3315bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc compact="yes"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<!-- Expand crefs and put them inline -->
<?rfc comments='yes' ?>
<?rfc inline='yes' ?>
<rfc category="std"
docName="draft-ietf-dhc-anonymity-profile-08.txt"
ipr="trust200902"
>
<front>
<title abbrev="DHCP Anonymity Profile">
Anonymity profile for DHCP clients
</title>
<author fullname="Christian Huitema" initials="C." surname="Huitema">
<organization>Microsoft</organization>
<address>
<postal>
<street> </street>
<city>Redmond</city>
<code>98052</code>
<region>WA</region>
<country>U.S.A.</country>
</postal>
<email>[email protected]</email>
</address>
</author>
<author fullname="Tomek Mrugalski" initials="T." surname="Mrugalski">
<organization abbrev="ISC">Internet Systems Consortium,
Inc.</organization>
<address>
<postal>
<street>950 Charter Street</street>
<city>Redwood City</city>
<region>CA</region>
<code>94063</code>
<country>USA</country>
</postal>
<email>[email protected]</email>
</address>
</author>
<author fullname="Suresh Krishnan" initials="S." surname="Krishnan">
<organization>Ericsson</organization>
<address>
<postal>
<street>8400 Decarie Blvd.</street>
<city>Town of Mount Royal</city>
<region>QC</region>
<country>Canada</country>
</postal>
<phone>+1 514 345 7900 x42871</phone>
<email>[email protected]</email>
</address>
</author>
<date year="2016" />
<abstract>
<t>
Some DHCP options carry unique identifiers. These identifiers can enable device tracking
even if the device administrator takes care of randomizing other potential
identifications like link-layer addresses or IPv6 addresses. The anonymity profile
is designed for clients that wish to remain anonymous to the visited network.
The profile provides guidelines on the composition of DHCP or DHCPv6 requests,
designed to minimize disclosure of identifying information.
</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>
There have been reports of systems that would monitor the wireless connections of
passengers at Canadian airports <xref target="CNBC" />. We can assume that these are either fragments
or trial runs of a wider system that would attempt to monitor Internet users as they roam through
wireless access points and other temporary network attachments. We can also assume that privacy
conscious users will attempt to evade this monitoring, for example by ensuring that low level
identifiers such as link-layer addresses are "randomized," so that the devices do not broadcast
the same unique identifier
in every location that they visit.
</t>
<t>
Of course, link layer "MAC" addresses are not the only way to identify a device. As soon as it connects to a
remote network, the device may use DHCP and DHCPv6 to obtain network parameters. The analysis of DHCP and DHCPv6
options shows that parameters of these protocols can reveal identifiers of the device, negating the benefits of
link-layer address randomization. This is documented in detail in <xref target = "I-D.ietf-dhc-dhcp-privacy" />
and <xref target="I-D.ietf-dhc-dhcpv6-privacy" />. The natural reaction is to restrict the number and values of such parameters
in order to minimize disclosure.
</t>
<t>
In the absence of a common standard, different system developers are likely to implement this minimization of
disclosure in different ways. Monitoring entities could then use the differences to identify the software version running
on the device. The proposed anonymity profile provides a common standard that minimizes information
disclosure, including the disclosure of implementation identifiers.
</t>
<section title="Requirements">
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in <xref target="RFC2119" />.
</t>
</section>
</section>
<section title="Application domain" anchor="appdomain" >
<t>
Mobile nodes can be tracked using multiple identifiers, the most prominent being link-layer addresses, a.k.a. MAC addresses.
For example, when
devices use Wi-Fi connectivity, they place the MAC address in the header of all the packets that they transmit.
Standard implementation of Wi-Fi use unique 48 bit link-layer addresses, assigned to the devices according to procedures
defined by IEEE 802. Even when the Wi-Fi packets are encrypted, the portion of the header containing the addresses
will be sent in clear text. Tracking devices can "listen to the airwaves" to find out what devices are transmitting
near them.
</t>
<t>
We can easily imagine that the MAC addresses can be correlated with other data, e.g., clear text
names and cookies, to build a registry linking MAC addresses to the identity of devices' owners. Once that
correlation is done, tracking the MAC address is sufficient to track individual people, even when all application data
sent from the devices is encrypted.
link-layer addresses can also be correlated with IP addresses of devices, negating potential privacy benefits of
IPv6 "privacy" addresses. Privacy advocates have reasons to be concerned.
</t>
<t>
The obvious solution is to "randomize" the MAC address. Before connecting to a particular network, the device replaces
the MAC address with a randomly drawn 48 bit value. Link-layer address randomization was successfully
tried at the IETF in Honolulu
in November 2014 <xref target="IETFMACRandom" /> and in following meetings <xref target="IETFTrialsAndMore"/>;
it is studied in the IEEE 802 EC Privacy Recommendation Study Group <xref target="IEEE802PRSG"/>.
However, we have to consider the linkage between
link-layer addresses, DHCP identifiers
and IP addresses.
</t>
<section title="MAC address Randomization hypotheses" >
<t>
There is not yet an established standard for randomizing link-layer addresses.
Various prototypes have tried different strategies, such as:
</t>
<t>
<list style="hanging">
<t hangText="Per connection:">Configure a random link-layer address at the time of connecting to a network, e.g. to specific Wi-Fi SSID,
and keep it for the duration of the connection.
</t>
<t hangText="Per network:">Same as "per connection," but always use the same link-layer address for the same network -- different of course
from the addresses used in other networks.
</t>
<t hangText="Time interval:">Change the link-layer address at regular time intervals.
</t>
</list>
</t>
<t>
In practice, there are many reasons to keep the link-layer address constant for
the duration of a link-layer connection, as in the "per connection"
or "per network" variants. On Wi-Fi networks, changing the link-layer address
requires dropping the existing Wi-Fi connection and then
re-establishing it, which implies repeating the connection process and associated procedures.
The IP addresses will change, which
means that all required TCP connections will have to be re-established. If the network access
is provided through a NAT, changing
IP address also means that the NAT traversal procedures will have to be restarted. This means
a lot of disruption. At the same time,
an observer on the network will easily notice that a station left, another came in just after
that, and that the new one appears to be
communicating with the same set of IP addresses as the old one. This provides for easy correlation.
</t>
<t>
The anonymity profile pretty much assumes that the link-layer address randomization follows the "per connection" or "per network" strategies,
or a variant of the "time interval" strategy in which the interval has about the same duration as the average connection.
</t>
</section>
<section title="MAC address Randomization and DHCP">
<t>
From a privacy point of view, it is clear that link-layer address, IP address and DHCP identifier shall evolve in synchrony.
For example, if the link-layer address changes and the DHCP identifier stays constant, then it is really easy to correlate old and
new link-layer addresses, either by listening to DHCP traffic or by observing that the IP address remains constant,
since it is tied to the DHCP identifier. Conversely, if the DHCP identifier changes but the link-layer address remains constant,
the old and new identifiers and addresses can be correlated by listening to L2 traffic. The procedures documented in the
following sections construct DHCP identifiers from the current link-layer address, automatically providing for this
synchronization.
</t>
<t>
The proposed anonymity profiles solve this synchronization issues by deriving most identifiers from the link-layer address,
and generally by making sure that DHCP parameter values do not remain constant after an address change.
</t>
</section>
<section title="Radio fingerprinting" >
<t>
MAC address randomization solves the trivial monitoring problem in
which someone just uses a Wi-Fi scanner and records the MAC addresses
seen on the air. DHCP anonymity solves the more elaborated scenario
in which someone monitor link-layer addresses and identities used in DHCP at the access
point or DHCP server. But these are not the only ways to track a mobile device.
</t>
<t>
Radio fingerprinting is a process that identifies a radio transmitter by the unique "fingerprint"
of its signal transmission, i.e., the tiny differences caused by minute imperfections of
the radio transmission hardware. This can be applied to diverse types of radios, including
Wi-Fi as described for example in <xref target="WiFiRadioFingerprinting" />.
No amount of link-layer address randomization will protect against
such techniques. Protections may exist, but they are outside the scope of the
present document.
</t>
<t>
On the other hand, we should not renounce randomization just because radio fingerprinting exists.
The radio fingerprinting techniques are harder to deploy than just recording link-layer addresses with
a scanner. They can only track devices for which the fingerprint are known, and thus have a
narrower scope of application than mass monitoring of addresses and DHCP parameters.
</t>
</section>
<section title="Operating system fingerprinting" >
<t>
When a standard like DHCP allows for multiple options, different implementers will make
different choices for the options that they support or the values they chose for the
options. Conversely, monitoring the options and values present in DHCP messages reveals
these differences and allows for "operating system fingerprinting," i.e., finding the
type and version of software that a particular device is running. Finding these
versions provides some information about the device identity, and thus goes against
the goal of anonymity.
</t>
<t>
The design of the anonymity profiles attempts to minimize the number of options and the
choice of values, in order to reduce the possibilities of operating system fingerprinting.
</t>
</section>
<section title="No anonymity profile identification" anchor="desire" >
<t>
Reviewers of the anonymity profiles have sometimes suggested adding an option to explicitly
identify the profiles as "using the anonymity option."
One suggestion is that if the client wishes to remain anonymous,
it would be good if the client told the server about that in case the server is willing to co-operate.
Another possibility would be to use specific privacy-oriented construct,
such as for example a new type of DUID for a temporary DUID that would be changing over time.
</t>
<t>
This is not workable in a
large number of cases as it is possible that the network
operator (or other entities that have access to the operator's
network) might be actively participating in surveillance and
anti-privacy, willingly or not.
Declaring a preference for anonymity is a bit
like walking around with a Guy Fawkes mask. (See <xref target="GuyFawkesMask"/> for
an explanation of this usage.) When anonymity is
required, it is generally not a good idea to stick out of the crowd.
Simply revealing the desire
for privacy, could cause the attacker to react by triggering
additional surveillance or monitoring mechanisms. Therefore we
feel that it is preferable to not disclose one's desire for
privacy.
</t>
<t>
This preference leads to some important
implications. In particular, we make an effort to make the
mitigation techniques difficult to distinguish from regular
client behaviors, if at all possible.</t>
</section>
<section title="Using the anonymity profiles" anchor="profileUse">
<t>
There are downsides to randomizing link-layer addresses and DHCP identifiers. By definition, randomization will break
management procedures that rely on tracking link-layer addresses. Even if this is not too much of a concern, we have to be worried
about the frequency of link-layer address randomization. Suppose for example that many devices would get new random link-layer addresses at
short intervals, maybe every few minutes. This would generate new DHCP requests in rapid succession, with a high risk of
exhausting DHCPv4 address pools. Even with IPv6, there would still be a risk of increased neighbor discovery traffic, and
bloating of various address tables. Implementers will have to be cautious when programming devices to use randomized MAC
addresses. They will have to carefully chose the frequency with which such addresses will be renewed.
</t>
<t>
This document only provides guidelines for using DHCP when clients care about privacy.
We assume that the request for anonymity is materialized
by the assignment of a randomized link-layer address to the network
interface. Once that decision is made, the following guidelines will avoid leakage of identity in DHCP parameters or in
assigned addresses.
</t>
<t>
There may be rare situations where the clients want anonymity to attackers but not
to their DHCP server. These clients should still use link-layer address randomization to
hide from observers, and some form of encrypted communication to the DHCP server.
This scenario is out of scope for this document.
</t>
<t>
To preserve anonymity, the clients need to not use stable values for the client identifiers.
This is clearly a tradeoff, because a stable client identifier guarantees that the client will
receive consistent parameters over time.
An example is given in
<xref target="RFC7618" />, where the client identifier is used to
guarantee that the same client will always get the same combination of IP address and port range.
Static clients benefit most from stable parameters, and can often be already identified by physical
connection layer parameters. These static clients will normally not use the anonymity profile. Mobile clients,
in contrast, have the option of using the anonymity profile in conjunction
with <xref target="RFC7618" />
if they are more concerned with privacy protection than with stable parameters.
</t>
</section>
<section title="What about privacy for DHCP servers" anchor="serverPrivacy" >
<t>
This document only provides recommendations for DHCP clients. The main target are DHCP clients used in mobile devices.
Such devices are a tempting target for various monitoring systems, and providing them with a simple anonymity
solution is urgent. We can argue that some mobile devices embed DHCP servers, and that providing solutions for such devices
is also quite important. Two plausible examples would be a DHCP server for a car network, or a DHCP server for a
mobile hot spot. However, mobile servers get a lot of privacy protection through the use of access control and link layer
encryption. Servers may disclose information to clients through DHCP, but they normally only do that to clients
that have passed the link-layer access control and have been authorized to use the network services. This arguably
makes solving the server problem less urgent than solving the client problem.
</t>
<t>
Server privacy issues are
presented in <xref target = "I-D.ietf-dhc-dhcp-privacy" /> and <xref target="I-D.ietf-dhc-dhcpv6-privacy" />.
Mitigation of these issues is left to further study.
</t>
</section>
</section>
<section title="Anonymity profile for DHCPv4" anchor="anonymousV4" >
<t>
Clients using the DHCPv4 anonymity profile limit the disclosure of information by
controlling the header parameters and by limiting the number and values of options.
The number of options depend on the specific DHCP message:
</t>
<t>
<list style="hanging">
<t hangText="DHCPDISCOVER:"> The anonymized DHCPDISCOVER messages
MUST contain the Message Type,
MAY contain the Client Identifier, and
MAY contain the
Parameter Request List options. It SHOULD NOT contain any other
option.
</t>
<t hangText="DHCPREQUEST:"> The anonymized DHCPREQUEST messages
MUST contain the Message Type,
MAY contain the
Client Identifier, and
MAY contain the Parameter Request List options.
If the message is in response
to a DHCPOFFER, it MUST contain the corresponding Server Identifier option
and the Requested IP address. If the message is not in response to a
DHCPOFFER, it MAY contain a Requested IP address as explained in
<xref target="requestedIP" />.
It SHOULD NOT contain any other option.
</t>
<t hangText="DHCPDECLINE:"> The anonymized DHCPDECLINE messages
MUST contain the Message Type, Server Identifier, and Requested IP address options,
and MAY contain the Client Identifier options.
</t>
<t hangText="DHCPRELEASE:"> The anonymized DHCPRELEASE messages
MUST contain the Message Type and Server Identifier options, and
MAY contain the Client Identifier option.
</t>
<t hangText="DHCPINFORM:"> The anonymized DHCPINFORM messages
MUST contain the Message Type,
and MAY contain the
Client Identifier and Parameter Request List options. It SHOULD NOT contain any other
option.
</t>
</list>
</t>
<t>
Header fields and option values SHOULD be set in accordance with the DHCP specification,
but some header fields and option values SHOULD be constructed per the following guidelines.
</t>
<t>
The inclusion of HostName and FQDN options in DHCPDISCOVER, DHCPREQUEST or
DHCPINFORM messages is discussed in
<xref target="hostNameOption" /> and <xref target="fqdnv4" />.
</t>
<section title="Avoiding fingerprinting" anchor="finger4" >
<t>
There are many choices for implementing DHCPv4 messages. Clients can choose to
transmit a specific set of options, pick particular encoding for these options,
and transmit options in different orders. These choices can be use to fingerprint
the client.
</t>
<t>
The following sections provide guidance on the encoding of options and
fields within the packets. However, this
guidance alone may not be sufficient to prevent fingerprinting from revealing
information, such as the device type, vendor type or OS type and in some cases
specific version, or from revealing whether the client is using the anonymity
profile.
</t>
<t>
The client intending to protect its privacy SHOULD limit the subset of options
sent in messages to the subset listed in the remaining subsections.
</t>
<t>
The client intending to protect its privacy SHOULD randomize options
order before sending any DHCPv4 message. If this random
ordering cannot be implemented, the client MAY
arrange options by increasing order of option codes.
</t>
</section>
<section title="Client IP address field" >
<t>
Four bytes in the header of the DHCP messages carry the "Client IP address" (ciaddr) as defined in <xref target="RFC2131"/>.
In DHCP, this field is used by the clients to indicate the address that they used previously, so that as much as
possible the server can allocate them the same address.
</t>
<t>
There is very little privacy implication of sending this address in the DHCP messages,
except in one case, when connecting
to a different network than the last network connected.
If the DHCP client somehow repeated the address used in a previous network attachment,
monitoring services might use the information to tie the two network locations. DHCP clients SHOULD ensure that
the field is cleared when they know that the network attachment has changed, and in particular if the link layer
address is reset by the device's administrator.
</t>
<t>
The clients using the anonymity profile MUST NOT include in the message a Client IP Address that has been
obtained with a different link-layer address.
</t>
</section>
<section title="Requested IP address option" anchor="requestedIP" >
<t>
The Requested IP address option is defined in <xref target="RFC2132" /> with code 50.
It allows the client to request that a particular IP address be assigned.
The option is mandatory in some protocol messages per <xref target="RFC2131" />, for example when a client
selects to use an address offered by a server. However, this option is not mandatory in the DHCPDISCOVER message.
It is simply a convenience, an attempt to regain the same IP address that was used in a previous connection.
Doing so entails the risk of disclosing an IP address used by the client at a previous location, or with a
different link-layer address. The risk exists for all forms of IP addresses, public or private, as some
private addresses may be used in a wide scope, e.g. when an Internet Service Provider
is using Network Address Translation.
</t>
<t>
When using the anonymity profile, clients SHOULD NOT
use the Requested IP address option in DHCPDISCOVER messages. They MUST use the option when mandated
by the DHCP protocol, for example in DHCPREQUEST messages.
</t>
<t>
There are scenarios in which a client connecting to a network remembers
previously allocated address, i.e. is in the INIT-REBOOT state.
In that state, the client
that is concerned with privacy SHOULD perform a complete
four way handshake starting with DHCPDISCOVER to obtain a new address lease.
If the client can ascertain that this is exactly the same network
to which it was previously connected, and if the link layer address did not change,
the client MAY issue a DHCPREQUEST to try reclaim the current address.
</t>
</section>
<section title="Client hardware address field" anchor="clientAddressField" >
<t>
Sixteen bytes in the header of the DHCP messages carry the "Client hardware address" (chaddr) as defined
in <xref target="RFC2131"/>. The presence of this address is necessary for the proper operation of the
DHCP service.
</t>
<t>
Hardware addresses, called "link layer address" in many RFCs, can be used to uniquely identify a device, especially
if they follow the IEEE 802 recommendations.
If the hardware address is reset to a new value,
or randomized, the DHCP client SHOULD use the new randomized value in the
DHCP messages.
</t>
</section>
<section title="Client Identifier Option" anchor="dhcpv4ClientId">
<t>
The client identifier option is defined in <xref target="RFC2132"/> with option code 61. It is discussed in
detail in <xref target="RFC4361"/>. The purpose of the client identifier option is to identify the client in
a manner independent of the link layer address. This is particularly useful if the DHCP server is expected to
assign the same address to the client after a network attachment is swapped and the link layer address changes.
It is also useful when the same node issues requests through several interfaces, and expects the DHCP server
to provide consistent configuration data over multiple interfaces.
</t>
<t>
The considerations for hardware independence and strong client identity have an adverse effect on the privacy
of mobile clients, because the hardware-independent unique identifier obviously enables very efficient tracking of the
client's movements. One option would be to not transmit this option at all, but this may affect interoperability
and will definitely mark the client as requesting anonymity, exposing it to the risks mentioned in
<xref target="desire" />.
</t>
<t>
The recommendations in <xref target="RFC4361"/> are very strong, stating for example that "DHCPv4
clients MUST NOT use client identifiers based solely on layer two addresses that are hard-wired to
the layer two device (e.g., the Ethernet MAC address)." These strong recommendations are in fact a tradeoff
between ease of management and privacy, and the tradeoff should depend on the circumstances.
</t>
<t>
In contradiction to <xref target="RFC4361"/>, when using the anonymity
profile, DHCP clients MUST use client identifiers based solely on the
link layer address that will be used in the underlying
connection. This will ensure that the DHCP client identifier does not
leak any information that is not already available to entities
monitoring the network connection. It will also ensure that a strategy
of randomizing the link layer address will not be nullified by the Client Identifier Option.
</t>
<t>
There are usages of DHCP where the underlying connection is a point to point link, in which case there is no
link layer address available to construct a non-revealing identifier.
If anonymity is desired in such networks, the client SHOULD pick a random identifier that is
highly likely to be unique
to the current link, using for example a combination of a local secret and an identifier of the
connection. The algorithm for combining secret and identifiers described in
section 5 of <xref target="RFC7217" /> solves a similar problem. The criteria
for the generation of random numbers are stated in <xref target="RFC4086" />.
</t>
</section>
<section title="Parameter Request List Option" anchor="PRLoption">
<t>The Parameter Request List (PRL) option is defined in <xref target="RFC2132"/> with option code 55.
It list the parameters requested from the server by the client.
Different implementations request different parameters.<xref target="RFC2132"/> specifies that
"the client MAY list the options in order of preference." It practice, this means that
different client implementations will request different parameters, in different orders.</t>
<t>The choice of option numbers and the specific ordering of option numbers in the Parameter Request
List can be used
to fingerprint the client. This may not reveal the
identity of a client, but may provide additional information,
such as the device type, vendor type or OS type and in some cases
specific version.
</t>
<t>
The client willing to protect its privacy SHOULD only request a minimal
number of options in PRL, and SHOULD also
randomly shuffle the option codes order in PRL. If this random
ordering cannot be implemented, the client MAY
order option codes order in PRL by increasing order of option codes.
</t>
</section>
<section title="Host Name Option" anchor="hostNameOption">
<t>
The Host Name option is defined in <xref target="RFC2132"/> with option code 12. Depending on implementations,
the option value can carry either a fully qualified domain name such as "node1984.example.com," or a simple
host name such as "node1984." The host name is commonly used by the DHCP server to identify the host, and
also to automatically update the address of the host in local name services.
</t>
<t>
Fully qualified domain names are obviously unique identifiers, but even simple host names can provide a
significant amount of information on the identity of the device. They
are typically chosen to be unique in the context where the device is most often used. If that context is
wide enough, in a large company or in a big university, the host name will be a pretty good identifier of
the device. Monitoring services could use that information in conjunction with traffic analysis and quickly
derive the identity of the device's owner.
</t>
<t>
When using the anonymity profile, DHCP clients SHOULD NOT send the host name option.
If they chose to send the option, DHCP clients MUST always send a non-qualified
host name instead of a fully qualified domain name, and MUST obfuscate the
host name value.
</t>
<t>
There are many ways to obfuscate a host name. The construction rules SHOULD guarantee that a different host name is generated each time the link-layer address changes and
that the obfuscated host name will not reveal the underlying link layer address. The construction
SHOULD generate names that are unique enough to minimize collisions in the local link. Clients MAY use the following algorithm: compute a secure hash of a local secret and of the link layer address that will be
used in the underlying connection, and then use the hexadecimal representation of the
first 6 bytes of the hash as the obfuscated host name.
</t>
<t>
There is a potential downside to having a specific name pattern for hosts that require
anonymity, as explained in <xref target="desire" />. For this reason, the above
algorithm is just a suggestion.
</t>
</section>
<section title="Client FQDN Option" anchor="fqdnv4" >
<t>
The Client FQDN option is defined in <xref target="RFC4702" /> with option code 81. The option allows the
DHCP clients to advertise to the DHCP server their fully qualified domain name (FQDN) such as "mobile.example.com." This
would allow the DHCP server to update in the DNS the PTR record for the IP address allocated to the client.
Depending on circumstances, either the DHCP client or the DHCP server could update in the DNS the A record
for the FQDN of the client.
</t>
<t>
Obviously, this option uniquely identifies the client, exposing it to the DHCP server or to anyone listening to
DHCP traffic. In fact, if the DNS record is updated, the location of the client becomes visible to anyone with
DNS lookup capabilities.
</t>
<t>
When using the anonymity profile, DHCP clients SHOULD NOT
include the Client FQDN option in their DHCP requests. Alternatively, they MAY
include a special purpose FQDN using the same hostname as in the Host Name Option,
with a suffix matching the connection-specific DNS suffix being advertised by
that DHCP server. Having a name in the DNS allows working with legacy systems
that require one to be there, e.g., by verifying a forward and reverse lookup
succeeds with the same result.
</t>
</section>
<section title="UUID/GUID-based Client Identifier Option" anchor="PXEOption" >
<t>
The UUID/GUID-based Client Machine Identifier option is defined in <xref target="RFC4578"/>, with option code 97.
The option is
part of a set of options for Intel Preboot eXecution Environment (PXE). The purpose of the PXE system is to
perform management functions on a device before its main OS is operational. The Client Machine Identifier carries
a 16-octet Globally Unique Identifier (GUID), which uniquely identifies the device.
</t>
<t>
The PXE system is clearly designed for devices operating in a controlled
environment. The main usage of the PXE system is to install a new version of
the operating system through a high speed Ethernet connection. The process
is typically controlled from the user interface during the boot process.
Common sense seems to dictate that getting a new operating system from an
unauthenticated server at an untrusted location is a really bad idea, and
that even if the option was available users would not activate it. In any
case, the option is only used in the "pre boot" environment, and there is
no reason to use it once the system is up and running.
Nodes visiting untrusted networks MUST NOT send or use the PXE options.
</t>
</section>
<section title="User and Vendor Class DHCP options">
<t>
Vendor identifying options are defined in <xref target="RFC2132" /> and <xref target="RFC3925" />.
When using the anonymity profile, DHCP clients SHOULD NOT use the Vendor Specific Information option (code 43),
the Vendor Class Identifier Option (60),
the Vendor Class option (code 124), or the Vendor Specific Information option (code 125)
as these options potentially reveal identifying information.
</t>
</section>
</section>
<section title="Anonymity profile for DHCPv6" anchor="anonymityV6">
<t>
DHCPv6 is typically used by clients in one of two scenarios: stateful and stateless configuration. In the
stateful scenario, clients use a combination of SOLICIT, REQUEST, CONFIRM, RENEW, REBIND and
RELEASE messages to obtain addresses, and manage these addresses.
</t>
<t>
In the stateless scenario, clients configure addresses using a combination of client managed identifiers
and router-advertised prefixes, without involving the DHCPv6 services.
Different ways of constructing these prefixes have different
implications on privacy, which are discussed in <xref target="I-D.ietf-6man-default-iids" />
and <xref target="I-D.ietf-6man-ipv6-address-generation-privacy" />. In the stateless scenario,
clients use DHCPv6 to obtain network configuration parameters, through the INFORMATION-REQUEST
message.
</t>
<t>
The choice between the stateful and stateless scenarios depends on flag and prefix options published
by the "Router Advertisement" messages of local routers, as specified in <xref target="RFC4861"/>.
When these options enable stateless address configuration hosts using the anonymity profile
SHOULD use stateless address configuration instead of stateful address configuration, because
stateless configuration requires
fewer information disclosures than stateful configuration.
</t>
<t>
When using the anonymity profile, DHCPv6 clients carefully select DHCPv6 options used in the various
messages that they send. The list of options that are mandatory or optional for each message is
specified in <xref target="RFC3315" />. Some of these options have specific implications
on anonymity. The following sections provide guidance on the choice of option values when
using the anonymity profile.
</t>
<section title="Avoiding fingerprinting" anchor="finger6" >
<t>
There are many choices for implementing DHCPv6 messages. As explained in <xref target="finger4"/>,
these choices can be use to fingerprint the client.
</t>
<t>
The following sections provide guidance on the encoding of options. However, this
guidance alone may not be sufficient to prevent fingerprinting from revealing
information, such as the device type, vendor type or OS type and in some cases
specific version, or from revealing whether the client is using the anonymity
profile.
</t>
<t>
The client intending to protect its privacy SHOULD limit the subset of options
sent in messages to the subset listed in the following sections.
</t>
<t>
The client intending to protect its privacy SHOULD randomize options
order before sending any DHCPv6 message. If this random
ordering cannot be implemented, the client MAY
arrange options by increasing order of option codes.
</t>
</section>
<section title="Do not send Confirm messages, unless really sure where" anchor="dhcpv6Confirm">
<t><xref target="RFC3315" /> requires clients to send a
Confirm message when they attach to a new link to verify
whether the addressing and configuration information they
previously received is still valid. This requirement was
relaxed in <xref target="I-D.ietf-dhc-rfc3315bis" />.
When these clients send
Confirm messages, they include any IAs assigned to the
interface that may have moved to a new link, along with the
addresses associated with those IAs. By examining the
addresses in the Confirm message an attacker can trivially
identify the previous point(s) of attachment.</t>
<t>Clients interested in protecting their privacy
SHOULD NOT send Confirm messages and instead directly try to
acquire addresses on the new link.
However, not sending confirm messages can result in connectivity hiatus
in some scenarios, e.g. roaming between two access points in the
same wireless network. DHCPv6 clients that can verify that the
previous link and the current link are part of the same
network MAY send Confirm messages while still protecting
their privacy. Such link identification should happen before DHCPv6
is used, and thus cannot depend on the DHCPv6 information used in
<xref target="RFC6059" />. In practice, the most reliable detection
of network attachment is through link layer security, e.g.
<xref target="IEEE8021X" />.
</t>
</section>
<section title="Client Identifier DHCPv6 Option" anchor="V6ClientId">
<t>
The client identifier option is defined in <xref target="RFC3315"/> with option code 1. The purpose of the client
identifier option is to identify the client to the server. The content of the option is a DHCP Unique Identifier (DUID).
One of the primary privacy concerns is that a client is
disclosing a stable identifier (the DUID) that can be use for
tracking and profiling.
Three DUID formats are specified in <xref target="RFC3315"/>: Link-layer address
plus time (DUID-LLT), Vendor-assigned unique ID based on Enterprise Number, and
Link-layer address. A fourth type, DUID-UUID is defined in <xref target="RFC6355" />.
</t>
<t>
When using the anonymity profile in conjunction with randomized link-layer addresses,
DHCPv6 clients MUST use the DUID format number 3, Link-layer address. The value of the
Link-layer address should be that currently assigned to the interface.
</t>
<t>
When using the anonymity profile without the benefit of randomized link-layer addresses,
clients that want to protect their privacy
SHOULD generate a new randomized DUID-LLT every time they
attach to a new link or detect a possible link change
event. Syntactically this identifier will conform to <xref target="RFC3315" />
but its content is meaningless.
The exact details are left up to implementors, but
there are several factors should be taken into
consideration. The DUID type SHOULD be set to 1
(DUID-LLT). Hardware type SHOULD be set appropriately to the
hardware type. The link address embedded in the LLT SHOULD be
set to a randomized value. Time SHOULD be set to a random timestamp from
the previous year. Time MAY be set to current time, but this will
reveal the fact that the DUID is newly generated, and could
provide information for device fingerprinting.
The criteria for generating highly unique random numbers
are listed in <xref target="RFC4086" />.
</t>
<section title="Anonymous Information-Request">
<t>According to <xref target="RFC3315" />, a DHCPv6 client
includes its client identifier in most of the
messages it sends. There is one exception, however. Client is
allowed to omit its client identifier when sending
Information-Request.</t>
<t>When using stateless DHCPv6, clients wanting to
protect their privacy SHOULD NOT include client identifiers in
their Information-Request messages. This will prevent the
server from specifying client-specific options if it is
configured to do so, but the need for anonymity precludes such
options anyway.</t>
</section>
</section>
<section title="Server Identifier Option" anchor="random-duid">
<t>
When using the anonymity profile, DHCPv6 clients SHOULD use the Server Identifier Option (code 2)
as specified in <xref target="RFC3315"/>. Clients MUST only include server identifier
values that were received with the current link-layer address, because reuse of
old values discloses information that can be used to identify the client.
</t>
</section>
<section title="Address assignment options" anchor="useIA_NA">
<t>
When using the anonymity profile, DHCPv6 clients might have to use SOLICIT or REQUEST messages to obtain IPv6 addresses
through the DHCP server. In DHCPv6, the collection of addresses assigned to
a client is identified by an Identity Association (IA).Clients interested in privacy SHOULD request addresses using the
Identity Association for Non-temporary Addresses Option (IA_NA, code 3).
</t>
<t>
The IA_NA option includes an IAID parameter that identifies a unique identity association
for the interface for which the
Address is requested. Clients interested in protecting their privacy MUST ensure that
the IAID does not enable client identification. They also need to conform to the
requirement of <xref target="RFC3315"/> that the IAID for that IA MUST be consistent
across restarts of the DHCP client. We interpret that as requiring that the IAID MUST be constant
for the association, as long as the link layer address remains constant.
</t>
<t>
Clients MAY meet the privacy, uniqueness and stability requirement of the IAID
by constructing it as the combination of one byte encoding the interface number
in the system, and the first three bytes of the link layer address.
</t>
<t>
The clients MAY use the IA Address Option (code 5) but need to balance the potential advantage of
"address continuity" versus the potential risk of "previous address disclosure." A potential solution
is to remove all stored addresses when a link-layer address changes, and to only use the IA Address option
with addresses that have been explicitly assigned through the current link-layer address.
</t>
<section title="Obtain temporary addresses" anchor="v6Temporary" >
<t><xref target="RFC3315" /> defines a special container
(IA_TA, code 4) for requesting temporary addresses. This is a good
mechanism in principle, but there are a number of issues
associated with it. First, this is not a widely used
feature, so clients depending solely on temporary
addresses may lock themselves out of service.
Secondly, <xref target="RFC3315" /> does not
specify any lifetime or lease length for temporary
addresses. Therefore support for renewing temporary
addresses may vary between
client implementations, including not being supported at all.
Finally, by requesting temporary addresses a client reveals its
desire for privacy and potentially risks countermeasures as described
in <xref
target="desire"/>.</t>
<t>Because of these Clients interested in their privacy SHOULD NOT use
IA_TA.</t>
<t>The addresses obtained according to <xref target="useIA_NA" /> are temporary
in nature, and will be discarded when the link layer address is changed. They thus meet most of
the use cases of the temporary addresses defined in <xref target="RFC4941"/>. Clients interested
in their privacy
should not publish their IPv6 addresses in the DNS or otherwise associate them
with name services, and thus do not normally need two classes of addresses, one public,
one temporary.</t>
<t>The use of mechanisms to allocate several IPv6 addresses to a client while
preserving privacy is for further study.</t>
</section>
<section title="Prefix delegation" anchor="IA_PD" >
<t>
The use of DHCPv6 address assignment option for Prefix Delegation is defined in
<xref target="RFC3633" />.
Because current host OS implementations do not typically request prefixes, clients that wish
to use DHCPv6 PD - just like clients that wish to use any DHCP or DHCPv6 option that is not
currently widely used - should recognize that doing so will serve as a form of fingerprinting
unless or until client use of DHCPv6 PD becomes more widespread.
</t>
<t>
The anonymity properties of DHCPv6 Prefix Delegation, which use IA_PD identity associations,
are similar to those of of DHCPv6 address assignment using IA_NA identity associations. The
IAID could potentially be used to identify the client, and a prefix hint sent in the IA_PD Prefix
option could be used to track the client's previous location.
Clients that desire anonymity and never request more than one
prefix SHOULD set the IAID value to zero, as authorized in section 6 of <xref target="RFC3633" />,
and SHOULD NOT document any previously assigned prefix in the IA_PD Prefix option.
</t>
</section>
</section>
<section title="Option Request Option" anchor="OROv6option" >
<t>
The Option Request Option (ORO) is defined in <xref target="RFC3315"/> with option code 6. It specifies
the options that the client is requesting from the server.
The choice of requested options and the order of encoding of these options in the ORO
can be used to fingerprint the client.
</t>
<t>
The client willing to protect its privacy SHOULD only request a
minimal subset of options and SHOULD
randomly shuffle the option codes order in ORO. If this random
ordering cannot be implemented, the client MAY
order option codes in ORO by increasing order of option codes.
</t>
<!-- CH: What we actually implemented was a strict ordering of the option codes.
This is simpler than the random shuffle. -->
<!-- tomek: I also briefly thought about paranoid type of
a client that could ask in ORO for other random options.
That would be sort of fun, but may have adverse effects in the
long term. There may be options defined in the future that
could affect how DHCPv6 operates (e.g. client supporting
feature X should request option Y.). So this has a potential
for too much (random) breakage in the future. -->
<section title="Previous option values">
<t>
According to <xref target="RFC3315"/>, the client that includes an Option Request Option in a
Solicit or Request message MAY additionally include instances of those options that are
identified in the Option Request option, with data values as hints to
the server about parameter values the client would like to have returned.
</t>
<t>
When using the anonymity profile, clients SHOULD NOT include such instances of options because
old values might be used to identify the client.
</t>
</section>
</section>
<section title="Authentication Option">
<t>
The purpose of the Authentication option (code 11) is to
authenticate the identity of clients and servers and
the contents of DHCP messages. As such, the option
can be used to identify the client, and is incompatible with the stated
goal of "client anonymity." DHCPv6 clients that use the anonymity profile SHOULD NOT use
the authentication option. They MAY use it if they recognize that they are
operating in a trusted environment, e.g., in a work place network.
</t>
</section>
<section title="User and Vendor Class DHCPv6 options">
<t>
When using the anonymity profile, DHCPv6 clients SHOULD NOT use the User Class option (code 15) or the Vendor Class
option (code 16), as these options potentially reveal identifying information.
</t>
</section>
<section title="Client FQDN Option">
<t>
The Client FQDN option is defined in <xref target="RFC4704"/> with option code 29. The option allows the
DHCP clients to advertise to the DHCP server their fully qualified domain name (FQDN) such as "mobile.example.com."
When using the anonymity profile, DHCPv6 clients SHOULD NOT include the Client FQDN
option in their DHCPv6 messages because it identifies the client. As explained in
<xref target="fqdnv4" /> they MAY use a local-only FQDN by combining a host name derived from the
link layer address and a suffix advertised by the local DHCP server.
</t>
</section>
</section>
<section title="Operational Considerations" anchor="operations" >
<t>The anonymity profile has the effect of hiding the client identity from the
DHCP server. This is not always desirable. Some DHCP servers provide
facilities like publishing names and addresses in the DNS, or ensuring that
returning clients get reassigned the same address.</t>
<t>Clients using the anonymity profile may be consuming more resources. For
example when they change link-layer address and request for a new IP, the old one is
still marked as leased by the server.</t>
<t>Some DHCP servers will only give addresses to pre-registered MAC addresses,
forcing clients to choose between remaining anonymous and obtaining
connectivity.</t>
<t>Implementers SHOULD provide a way for clients to control when the anonymity