-
Notifications
You must be signed in to change notification settings - Fork 71
/
ReleaseNotes
4831 lines (4496 loc) · 259 KB
/
ReleaseNotes
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
This document summarizes new features and bugfixes in each stable release
of Tor. If you want to see more detailed descriptions of the changes in
each development snapshot, see the ChangeLog file.
Changes in version 0.2.1.19 - 2009-07-28
Tor 0.2.1.19 fixes a major bug with accessing and providing hidden
services.
o Major bugfixes:
- Make accessing hidden services on 0.2.1.x work right again.
Bugfix on 0.2.1.3-alpha; workaround for bug 1038. Diagnosis and
part of patch provided by "optimist".
o Minor features:
- When a relay/bridge is writing out its identity key fingerprint to
the "fingerprint" file and to its logs, write it without spaces. Now
it will look like the fingerprints in our bridges documentation,
and confuse fewer users.
o Minor bugfixes:
- Relays no longer publish a new server descriptor if they change
their MaxAdvertisedBandwidth config option but it doesn't end up
changing their advertised bandwidth numbers. Bugfix on 0.2.0.28-rc;
fixes bug 1026. Patch from Sebastian.
- Avoid leaking memory every time we get a create cell but we have
so many already queued that we refuse it. Bugfix on 0.2.0.19-alpha;
fixes bug 1034. Reported by BarkerJr.
Changes in version 0.2.1.18 - 2009-07-24
Tor 0.2.1.18 lays the foundations for performance improvements,
adds status events to help users diagnose bootstrap problems, adds
optional authentication/authorization for hidden services, fixes a
variety of potential anonymity problems, and includes a huge pile of
other features and bug fixes.
o Major features (clients):
- Start sending "bootstrap phase" status events to the controller,
so it can keep the user informed of progress fetching directory
information and establishing circuits. Also inform the controller
if we think we're stuck at a particular bootstrap phase. Implements
proposal 137.
- Clients replace entry guards that were chosen more than a few months
ago. This change should significantly improve client performance,
especially once more people upgrade, since relays that have been
a guard for a long time are currently overloaded.
- Network status consensus documents and votes now contain bandwidth
information for each relay. Clients use the bandwidth values
in the consensus, rather than the bandwidth values in each
relay descriptor. This approach opens the door to more accurate
bandwidth estimates once the directory authorities start doing
active measurements. Implements part of proposal 141.
o Major features (relays):
- Disable and refactor some debugging checks that forced a linear scan
over the whole server-side DNS cache. These accounted for over 50%
of CPU time on a relatively busy exit node's gprof profile. Also,
disable some debugging checks that appeared in exit node profile
data. Found by Jacob.
- New DirPortFrontPage option that takes an html file and publishes
it as "/" on the DirPort. Now relay operators can provide a
disclaimer without needing to set up a separate webserver. There's
a sample disclaimer in contrib/tor-exit-notice.html.
o Major features (hidden services):
- Make it possible to build hidden services that only certain clients
are allowed to connect to. This is enforced at several points,
so that unauthorized clients are unable to send INTRODUCE cells
to the service, or even (depending on the type of authentication)
to learn introduction points. This feature raises the bar for
certain kinds of active attacks against hidden services. Design
and code by Karsten Loesing. Implements proposal 121.
- Relays now store and serve v2 hidden service descriptors by default,
i.e., the new default value for HidServDirectoryV2 is 1. This is
the last step in proposal 114, which aims to make hidden service
lookups more reliable.
o Major features (path selection):
- ExitNodes and Exclude*Nodes config options now allow you to restrict
by country code ("{US}") or IP address or address pattern
("255.128.0.0/16"). Patch from Robert Hogan. It still needs some
refinement to decide what config options should take priority if
you ask to both use a particular node and exclude it.
o Major features (misc):
- When building a consensus, do not include routers that are down.
This cuts down 30% to 40% on consensus size. Implements proposal
138.
- New TestingTorNetwork config option to allow adjustment of
previously constant values that could slow bootstrapping. Implements
proposal 135. Patch from Karsten.
- Convert many internal address representations to optionally hold
IPv6 addresses. Generate and accept IPv6 addresses in many protocol
elements. Make resolver code handle nameservers located at IPv6
addresses.
- More work on making our TLS handshake blend in: modify the list
of ciphers advertised by OpenSSL in client mode to even more
closely resemble a common web browser. We cheat a little so that
we can advertise ciphers that the locally installed OpenSSL doesn't
know about.
- Use the TLS1 hostname extension to more closely resemble browser
behavior.
o Security fixes (anonymity/entropy):
- Never use a connection with a mismatched address to extend a
circuit, unless that connection is canonical. A canonical
connection is one whose address is authenticated by the router's
identity key, either in a NETINFO cell or in a router descriptor.
- Implement most of proposal 110: The first K cells to be sent
along a circuit are marked as special "early" cells; only K "early"
cells will be allowed. Once this code is universal, we can block
certain kinds of denial-of-service attack by requiring that EXTEND
commands must be sent using an "early" cell.
- Resume using OpenSSL's RAND_poll() for better (and more portable)
cross-platform entropy collection again. We used to use it, then
stopped using it because of a bug that could crash systems that
called RAND_poll when they had a lot of fds open. It looks like the
bug got fixed in late 2006. Our new behavior is to call RAND_poll()
at startup, and to call RAND_poll() when we reseed later only if
we have a non-buggy OpenSSL version.
- When the client is choosing entry guards, now it selects at most
one guard from a given relay family. Otherwise we could end up with
all of our entry points into the network run by the same operator.
Suggested by Camilo Viecco. Fix on 0.1.1.11-alpha.
- Do not use or believe expired v3 authority certificates. Patch
from Karsten. Bugfix in 0.2.0.x. Fixes bug 851.
- Drop begin cells to a hidden service if they come from the middle
of a circuit. Patch from lark.
- When we erroneously receive two EXTEND cells for the same circuit
ID on the same connection, drop the second. Patch from lark.
- Authorities now vote for the Stable flag for any router whose
weighted MTBF is at least 5 days, regardless of the mean MTBF.
- Clients now never report any stream end reason except 'MISC'.
Implements proposal 148.
o Major bugfixes (crashes):
- Parse dates and IPv4 addresses in a locale- and libc-independent
manner, to avoid platform-dependent behavior on malformed input.
- Fix a crash that occurs on exit nodes when a nameserver request
timed out. Bugfix on 0.1.2.1-alpha; our CLEAR debugging code had
been suppressing the bug since 0.1.2.10-alpha. Partial fix for
bug 929.
- Do not assume that a stack-allocated character array will be
64-bit aligned on platforms that demand that uint64_t access is
aligned. Possible fix for bug 604.
- Resolve a very rare crash bug that could occur when the user forced
a nameserver reconfiguration during the middle of a nameserver
probe. Fixes bug 526. Bugfix on 0.1.2.1-alpha.
- Avoid a "0 divided by 0" calculation when calculating router uptime
at directory authorities. Bugfix on 0.2.0.8-alpha.
- Fix an assertion bug in parsing policy-related options; possible fix
for bug 811.
- Rate-limit too-many-sockets messages: when they happen, they happen
a lot and end up filling up the disk. Resolves bug 748.
- Fix a race condition that could cause crashes or memory corruption
when running as a server with a controller listening for log
messages.
- Avoid crashing when we have a policy specified in a DirPolicy or
SocksPolicy or ReachableAddresses option with ports set on it,
and we re-load the policy. May fix bug 996.
- Fix an assertion failure on 64-bit platforms when we allocated
memory right up to the end of a memarea, then realigned the memory
one step beyond the end. Fixes a possible cause of bug 930.
- Protect the count of open sockets with a mutex, so we can't
corrupt it when two threads are closing or opening sockets at once.
Fix for bug 939. Bugfix on 0.2.0.1-alpha.
o Major bugfixes (clients):
- Discard router descriptors as we load them if they are more than
five days old. Otherwise if Tor is off for a long time and then
starts with cached descriptors, it will try to use the onion keys
in those obsolete descriptors when building circuits. Fixes bug 887.
- When we choose to abandon a new entry guard because we think our
older ones might be better, close any circuits pending on that
new entry guard connection. This fix should make us recover much
faster when our network is down and then comes back. Bugfix on
0.1.2.8-beta; found by lodger.
- When Tor clients restart after 1-5 days, they discard all their
cached descriptors as too old, but they still use the cached
consensus document. This approach is good for robustness, but
bad for performance: since they don't know any bandwidths, they
end up choosing at random rather than weighting their choice by
speed. Fixed by the above feature of putting bandwidths in the
consensus.
o Major bugfixes (relays):
- Relays were falling out of the networkstatus consensus for
part of a day if they changed their local config but the
authorities discarded their new descriptor as "not sufficiently
different". Now directory authorities accept a descriptor as changed
if BandwidthRate or BandwidthBurst changed. Partial fix for bug 962;
patch by Sebastian.
- Ensure that two circuits can never exist on the same connection
with the same circuit ID, even if one is marked for close. This
is conceivably a bugfix for bug 779; fixes a bug on 0.1.0.4-rc.
- Directory authorities were neglecting to mark relays down in their
internal histories if the relays fall off the routerlist without
ever being found unreachable. So there were relays in the histories
that haven't been seen for eight months, and are listed as being
up for eight months. This wreaked havoc on the "median wfu" and
"median mtbf" calculations, in turn making Guard and Stable flags
wrong, hurting network performance. Fixes bugs 696 and 969. Bugfix
on 0.2.0.6-alpha.
o Major bugfixes (hidden services):
- When establishing a hidden service, introduction points that
originate from cannibalized circuits were completely ignored
and not included in rendezvous service descriptors. This might
have been another reason for delay in making a hidden service
available. Bugfix from long ago (0.0.9.x?)
o Major bugfixes (memory and resource management):
- Fixed some memory leaks -- some quite frequent, some almost
impossible to trigger -- based on results from Coverity.
- Speed up parsing and cut down on memory fragmentation by using
stack-style allocations for parsing directory objects. Previously,
this accounted for over 40% of allocations from within Tor's code
on a typical directory cache.
- Use a Bloom filter rather than a digest-based set to track which
descriptors we need to keep around when we're cleaning out old
router descriptors. This speeds up the computation significantly,
and may reduce fragmentation.
o New/changed config options:
- Now NodeFamily and MyFamily config options allow spaces in
identity fingerprints, so it's easier to paste them in.
Suggested by Lucky Green.
- Allow ports 465 and 587 in the default exit policy again. We had
rejected them in 0.1.0.15, because back in 2005 they were commonly
misconfigured and ended up as spam targets. We hear they are better
locked down these days.
- Make TrackHostExit mappings expire a while after their last use, not
after their creation. Patch from Robert Hogan.
- Add an ExcludeExitNodes option so users can list a set of nodes
that should be be excluded from the exit node position, but
allowed elsewhere. Implements proposal 151.
- New --hush command-line option similar to --quiet. While --quiet
disables all logging to the console on startup, --hush limits the
output to messages of warning and error severity.
- New configure/torrc options (--enable-geoip-stats,
DirRecordUsageByCountry) to record how many IPs we've served
directory info to in each country code, how many status documents
total we've sent to each country code, and what share of the total
directory requests we should expect to see.
- Make outbound DNS packets respect the OutboundBindAddress setting.
Fixes the bug part of bug 798. Bugfix on 0.1.2.2-alpha.
- Allow separate log levels to be configured for different logging
domains. For example, this allows one to log all notices, warnings,
or errors, plus all memory management messages of level debug or
higher, with: Log [MM] debug-err [*] notice-err file /var/log/tor.
- Update to the "June 3 2009" ip-to-country file.
o Minor features (relays):
- Raise the minimum rate limiting to be a relay from 20000 bytes
to 20480 bytes (aka 20KB/s), to match our documentation. Also
update directory authorities so they always assign the Fast flag
to relays with 20KB/s of capacity. Now people running relays won't
suddenly find themselves not seeing any use, if the network gets
faster on average.
- If we're a relay and we change our IP address, be more verbose
about the reason that made us change. Should help track down
further bugs for relays on dynamic IP addresses.
- Exit servers can now answer resolve requests for ip6.arpa addresses.
- Implement most of Proposal 152: allow specialized servers to permit
single-hop circuits, and clients to use those servers to build
single-hop circuits when using a specialized controller. Patch
from Josh Albrecht. Resolves feature request 768.
- When relays do their initial bandwidth measurement, don't limit
to just our entry guards for the test circuits. Otherwise we tend
to have multiple test circuits going through a single entry guard,
which makes our bandwidth test less accurate. Fixes part of bug 654;
patch contributed by Josh Albrecht.
o Minor features (directory authorities):
- Try not to open more than one descriptor-downloading connection
to an authority at once. This should reduce load on directory
authorities. Fixes bug 366.
- Add cross-certification to newly generated certificates, so that
a signing key is enough information to look up a certificate. Start
serving certificates by <identity digest, signing key digest>
pairs. Implements proposal 157.
- When a directory authority downloads a descriptor that it then
immediately rejects, do not retry downloading it right away. Should
save some bandwidth on authorities. Fix for bug 888. Patch by
Sebastian Hahn.
- Directory authorities now serve a /tor/dbg-stability.txt URL to
help debug WFU and MTBF calculations.
- In directory authorities' approved-routers files, allow
fingerprints with or without space.
o Minor features (directory mirrors):
- When a download gets us zero good descriptors, do not notify
Tor that new directory information has arrived.
- Servers support a new URL scheme for consensus downloads that
allows the client to specify which authorities are trusted.
The server then only sends the consensus if the client will trust
it. Otherwise a 404 error is sent back. Clients use this
new scheme when the server supports it (meaning it's running
0.2.1.1-alpha or later). Implements proposal 134.
o Minor features (bridges):
- If the bridge config line doesn't specify a port, assume 443.
This makes bridge lines a bit smaller and easier for users to
understand.
- If we're using bridges and our network goes away, be more willing
to forgive our bridges and try again when we get an application
request.
o Minor features (hidden services):
- When the client launches an introduction circuit, retry with a
new circuit after 30 seconds rather than 60 seconds.
- Launch a second client-side introduction circuit in parallel
after a delay of 15 seconds (based on work by Christian Wilms).
- Hidden services start out building five intro circuits rather
than three, and when the first three finish they publish a service
descriptor using those. Now we publish our service descriptor much
faster after restart.
- Drop the requirement to have an open dir port for storing and
serving v2 hidden service descriptors.
o Minor features (build and packaging):
- On Linux, use the prctl call to re-enable core dumps when the User
option is set.
- Try to make sure that the version of Libevent we're running with
is binary-compatible with the one we built with. May address bug
897 and others.
- Add a new --enable-local-appdata configuration switch to change
the default location of the datadir on win32 from APPDATA to
LOCAL_APPDATA. In the future, we should migrate to LOCAL_APPDATA
entirely. Patch from coderman.
- Build correctly against versions of OpenSSL 0.9.8 or later that
are built without support for deprecated functions.
- On platforms with a maximum syslog string length, truncate syslog
messages to that length ourselves, rather than relying on the
system to do it for us.
- Automatically detect MacOSX versions earlier than 10.4.0, and
disable kqueue from inside Tor when running with these versions.
We previously did this from the startup script, but that was no
help to people who didn't use the startup script. Resolves bug 863.
- Build correctly when configured to build outside the main source
path. Patch from Michael Gold.
- Disable GCC's strict alias optimization by default, to avoid the
likelihood of its introducing subtle bugs whenever our code violates
the letter of C99's alias rules.
- Change the contrib/tor.logrotate script so it makes the new
logs as "_tor:_tor" rather than the default, which is generally
"root:wheel". Fixes bug 676, reported by Serge Koksharov.
- Change our header file guard macros to be less likely to conflict
with system headers. Adam Langley noticed that we were conflicting
with log.h on Android.
- Add a couple of extra warnings to --enable-gcc-warnings for GCC 4.3,
and stop using a warning that had become unfixably verbose under
GCC 4.3.
- Use a lockfile to make sure that two Tor processes are not
simultaneously running with the same datadir.
- Allow OpenSSL to use dynamic locks if it wants.
- Add LIBS=-lrt to Makefile.am so the Tor RPMs use a static libevent.
o Minor features (controllers):
- When generating circuit events with verbose nicknames for
controllers, try harder to look up nicknames for routers on a
circuit. (Previously, we would look in the router descriptors we had
for nicknames, but not in the consensus.) Partial fix for bug 941.
- New controller event NEWCONSENSUS that lists the networkstatus
lines for every recommended relay. Now controllers like Torflow
can keep up-to-date on which relays they should be using.
- New controller event "clients_seen" to report a geoip-based summary
of which countries we've seen clients from recently. Now controllers
like Vidalia can show bridge operators that they're actually making
a difference.
- Add a 'getinfo status/clients-seen' controller command, in case
controllers want to hear clients_seen events but connect late.
- New CONSENSUS_ARRIVED event to note when a new consensus has
been fetched and validated.
- Add an internal-use-only __ReloadTorrcOnSIGHUP option for
controllers to prevent SIGHUP from reloading the configuration.
Fixes bug 856.
- Return circuit purposes in response to GETINFO circuit-status.
Fixes bug 858.
- Serve the latest v3 networkstatus consensus via the control
port. Use "getinfo dir/status-vote/current/consensus" to fetch it.
- Add a "GETINFO /status/bootstrap-phase" controller option, so the
controller can query our current bootstrap state in case it attaches
partway through and wants to catch up.
- Provide circuit purposes along with circuit events to the controller.
o Minor features (tools):
- Do not have tor-resolve automatically refuse all .onion addresses;
if AutomapHostsOnResolve is set in your torrc, this will work fine.
- Add a -p option to tor-resolve for specifying the SOCKS port: some
people find host:port too confusing.
- Print the SOCKS5 error message string as well as the error code
when a tor-resolve request fails. Patch from Jacob.
o Minor bugfixes (memory and resource management):
- Clients no longer cache certificates for authorities they do not
recognize. Bugfix on 0.2.0.9-alpha.
- Do not use C's stdio library for writing to log files. This will
improve logging performance by a minute amount, and will stop
leaking fds when our disk is full. Fixes bug 861.
- Stop erroneous use of O_APPEND in cases where we did not in fact
want to re-seek to the end of a file before every last write().
- Fix a small alignment and memory-wasting bug on buffer chunks.
Spotted by rovv.
- Add a malloc_good_size implementation to OpenBSD_malloc_linux.c,
to avoid unused RAM in buffer chunks and memory pools.
- Reduce the default smartlist size from 32 to 16; it turns out that
most smartlists hold around 8-12 elements tops.
- Make dumpstats() log the fullness and size of openssl-internal
buffers.
- If the user has applied the experimental SSL_MODE_RELEASE_BUFFERS
patch to their OpenSSL, turn it on to save memory on servers. This
patch will (with any luck) get included in a mainline distribution
before too long.
- Fix a memory leak when v3 directory authorities load their keys
and cert from disk. Bugfix on 0.2.0.1-alpha.
- Stop using malloc_usable_size() to use more area than we had
actually allocated: it was safe, but made valgrind really unhappy.
- Make the assert_circuit_ok() function work correctly on circuits that
have already been marked for close.
- Fix uninitialized size field for memory area allocation: may improve
memory performance during directory parsing.
o Minor bugfixes (clients):
- Stop reloading the router list from disk for no reason when we
run out of reachable directory mirrors. Once upon a time reloading
it would set the 'is_running' flag back to 1 for them. It hasn't
done that for a long time.
- When we had picked an exit node for a connection, but marked it as
"optional", and it turned out we had no onion key for the exit,
stop wanting that exit and try again. This situation may not
be possible now, but will probably become feasible with proposal
158. Spotted by rovv. Fixes another case of bug 752.
- Fix a bug in address parsing that was preventing bridges or hidden
service targets from being at IPv6 addresses.
- Do not remove routers as too old if we do not have any consensus
document. Bugfix on 0.2.0.7-alpha.
- When an exit relay resolves a stream address to a local IP address,
do not just keep retrying that same exit relay over and
over. Instead, just close the stream. Addresses bug 872. Bugfix
on 0.2.0.32. Patch from rovv.
- Made Tor a little less aggressive about deleting expired
certificates. Partial fix for bug 854.
- Treat duplicate certificate fetches as failures, so that we do
not try to re-fetch an expired certificate over and over and over.
- Do not say we're fetching a certificate when we'll in fact skip it
because of a pending download.
- If we have correct permissions on $datadir, we complain to stdout
and fail to start. But dangerous permissions on
$datadir/cached-status/ would cause us to open a log and complain
there. Now complain to stdout and fail to start in both cases. Fixes
bug 820, reported by seeess.
o Minor bugfixes (bridges):
- When we made bridge authorities stop serving bridge descriptors over
unencrypted links, we also broke DirPort reachability testing for
bridges. So bridges with a non-zero DirPort were printing spurious
warns to their logs. Bugfix on 0.2.0.16-alpha. Fixes bug 709.
- Don't allow a bridge to publish its router descriptor to a
non-bridge directory authority. Fixes part of bug 932.
- When we change to or from being a bridge, reset our counts of
client usage by country. Fixes bug 932.
o Minor bugfixes (relays):
- Log correct error messages for DNS-related network errors on
Windows.
- Actually return -1 in the error case for read_bandwidth_usage().
Harmless bug, since we currently don't care about the return value
anywhere. Bugfix on 0.2.0.9-alpha.
- Provide a more useful log message if bug 977 (related to buffer
freelists) ever reappears, and do not crash right away.
- We were already rejecting relay begin cells with destination port
of 0. Now also reject extend cells with destination port or address
of 0. Suggested by lark.
- When we can't transmit a DNS request due to a network error, retry
it after a while, and eventually transmit a failing response to
the RESOLVED cell. Bugfix on 0.1.2.5-alpha.
- Solve a bug that kept hardware crypto acceleration from getting
enabled when accounting was turned on. Fixes bug 907. Bugfix on
0.0.9pre6.
- When a canonical connection appears later in our internal list
than a noncanonical one for a given OR ID, always use the
canonical one. Bugfix on 0.2.0.12-alpha. Fixes bug 805.
Spotted by rovv.
- Avoid some nasty corner cases in the logic for marking connections
as too old or obsolete or noncanonical for circuits. Partial
bugfix on bug 891.
- Fix another interesting corner-case of bug 891 spotted by rovv:
Previously, if two hosts had different amounts of clock drift, and
one of them created a new connection with just the wrong timing,
the other might decide to deprecate the new connection erroneously.
Bugfix on 0.1.1.13-alpha.
- If one win32 nameserver fails to get added, continue adding the
rest, and don't automatically fail.
- Fix a bug where an unreachable relay would establish enough
reachability testing circuits to do a bandwidth test -- if
we already have a connection to the middle hop of the testing
circuit, then it could establish the last hop by using the existing
connection. Bugfix on 0.1.2.2-alpha, exposed when we made testing
circuits no longer use entry guards in 0.2.1.3-alpha.
o Minor bugfixes (directory authorities):
- Limit uploaded directory documents to be 16M rather than 500K.
The directory authorities were refusing v3 consensus votes from
other authorities, since the votes are now 504K. Fixes bug 959;
bugfix on 0.0.2pre17 (where we raised it from 50K to 500K ;).
- Directory authorities should never send a 503 "busy" response to
requests for votes or keys. Bugfix on 0.2.0.8-alpha; exposed by
bug 959.
- Fix code so authorities _actually_ send back X-Descriptor-Not-New
headers. Bugfix on 0.2.0.10-alpha.
o Minor bugfixes (hidden services):
- When we can't find an intro key for a v2 hidden service descriptor,
fall back to the v0 hidden service descriptor and log a bug message.
Workaround for bug 1024.
- In very rare situations new hidden service descriptors were
published earlier than 30 seconds after the last change to the
service. (We currently think that a hidden service descriptor
that's been stable for 30 seconds is worth publishing.)
- If a hidden service sends us an END cell, do not consider
retrying the connection; just close it. Patch from rovv.
- If we are not using BEGIN_DIR cells, don't attempt to contact hidden
service directories if they have no advertised dir port. Bugfix
on 0.2.0.10-alpha.
o Minor bugfixes (tools):
- In the torify(1) manpage, mention that tsocks will leak your
DNS requests.
o Minor bugfixes (controllers):
- If the controller claimed responsibility for a stream, but that
stream never finished making its connection, it would live
forever in circuit_wait state. Now we close it after SocksTimeout
seconds. Bugfix on 0.1.2.7-alpha; reported by Mike Perry.
- Make DNS resolved controller events into "CLOSED", not
"FAILED". Bugfix on 0.1.2.5-alpha. Fix by Robert Hogan. Resolves
bug 807.
- The control port would close the connection before flushing long
replies, such as the network consensus, if a QUIT command was issued
before the reply had completed. Now, the control port flushes all
pending replies before closing the connection. Also fix a spurious
warning when a QUIT command is issued after a malformed or rejected
AUTHENTICATE command, but before the connection was closed. Patch
by Marcus Griep. Fixes bugs 1015 and 1016.
- Fix a bug that made stream bandwidth get misreported to the
controller.
o Deprecated and removed features:
- The old "tor --version --version" command, which would print out
the subversion "Id" of most of the source files, is now removed. It
turned out to be less useful than we'd expected, and harder to
maintain.
- RedirectExits has been removed. It was deprecated since
0.2.0.3-alpha.
- Finally remove deprecated "EXTENDED_FORMAT" controller feature. It
has been called EXTENDED_EVENTS since 0.1.2.4-alpha.
- Cell pools are now always enabled; --disable-cell-pools is ignored.
- Directory mirrors no longer fetch the v1 directory or
running-routers files. They are obsolete, and nobody asks for them
anymore. This is the first step to making v1 authorities obsolete.
- Take out the TestVia config option, since it was a workaround for
a bug that was fixed in Tor 0.1.1.21.
- Mark RendNodes, RendExcludeNodes, HiddenServiceNodes, and
HiddenServiceExcludeNodes as obsolete: they never worked properly,
and nobody seems to be using them. Fixes bug 754. Bugfix on
0.1.0.1-rc. Patch from Christian Wilms.
- Remove all backward-compatibility code for relays running
versions of Tor so old that they no longer work at all on the
Tor network.
o Code simplifications and refactoring:
- Tool-assisted documentation cleanup. Nearly every function or
static variable in Tor should have its own documentation now.
- Rename the confusing or_is_obsolete field to the more appropriate
is_bad_for_new_circs, and move it to or_connection_t where it
belongs.
- Move edge-only flags from connection_t to edge_connection_t: not
only is this better coding, but on machines of plausible alignment,
it should save 4-8 bytes per connection_t. "Every little bit helps."
- Rename ServerDNSAllowBrokenResolvConf to ServerDNSAllowBrokenConfig
for consistency; keep old option working for backward compatibility.
- Simplify the code for finding connections to use for a circuit.
- Revise the connection_new functions so that a more typesafe variant
exists. This will work better with Coverity, and let us find any
actual mistakes we're making here.
- Refactor unit testing logic so that dmalloc can be used sensibly
with unit tests to check for memory leaks.
- Move all hidden-service related fields from connection and circuit
structure to substructures: this way they won't eat so much memory.
- Squeeze 2-5% out of client performance (according to oprofile) by
improving the implementation of some policy-manipulation functions.
- Change the implementation of ExcludeNodes and ExcludeExitNodes to
be more efficient. Formerly it was quadratic in the number of
servers; now it should be linear. Fixes bug 509.
- Save 16-22 bytes per open circuit by moving the n_addr, n_port,
and n_conn_id_digest fields into a separate structure that's
only needed when the circuit has not yet attached to an n_conn.
- Optimize out calls to time(NULL) that occur for every IO operation,
or for every cell. On systems like Windows where time() is a
slow syscall, this fix will be slightly helpful.
Changes in version 0.2.0.35 - 2009-06-24
o Security fix:
- Avoid crashing in the presence of certain malformed descriptors.
Found by lark, and by automated fuzzing.
- Fix an edge case where a malicious exit relay could convince a
controller that the client's DNS question resolves to an internal IP
address. Bug found and fixed by "optimist"; bugfix on 0.1.2.8-beta.
o Major bugfixes:
- Finally fix the bug where dynamic-IP relays disappear when their
IP address changes: directory mirrors were mistakenly telling
them their old address if they asked via begin_dir, so they
never got an accurate answer about their new address, so they
just vanished after a day. For belt-and-suspenders, relays that
don't set Address in their config now avoid using begin_dir for
all direct connections. Should fix bugs 827, 883, and 900.
- Fix a timing-dependent, allocator-dependent, DNS-related crash bug
that would occur on some exit nodes when DNS failures and timeouts
occurred in certain patterns. Fix for bug 957.
o Minor bugfixes:
- When starting with a cache over a few days old, do not leak
memory for the obsolete router descriptors in it. Bugfix on
0.2.0.33; fixes bug 672.
- Hidden service clients didn't use a cached service descriptor that
was older than 15 minutes, but wouldn't fetch a new one either,
because there was already one in the cache. Now, fetch a v2
descriptor unless the same descriptor was added to the cache within
the last 15 minutes. Fixes bug 997; reported by Marcus Griep.
Changes in version 0.2.0.34 - 2009-02-08
Tor 0.2.0.34 features several more security-related fixes. You should
upgrade, especially if you run an exit relay (remote crash) or a
directory authority (remote infinite loop), or you're on an older
(pre-XP) or not-recently-patched Windows (remote exploit).
This release marks end-of-life for Tor 0.1.2.x. Those Tor versions
have many known flaws, and nobody should be using them. You should
upgrade. If you're using a Linux or BSD and its packages are obsolete,
stop using those packages and upgrade anyway.
o Security fixes:
- Fix an infinite-loop bug on handling corrupt votes under certain
circumstances. Bugfix on 0.2.0.8-alpha.
- Fix a temporary DoS vulnerability that could be performed by
a directory mirror. Bugfix on 0.2.0.9-alpha; reported by lark.
- Avoid a potential crash on exit nodes when processing malformed
input. Remote DoS opportunity. Bugfix on 0.2.0.33.
- Do not accept incomplete ipv4 addresses (like 192.168.0) as valid.
Spec conformance issue. Bugfix on Tor 0.0.2pre27.
o Minor bugfixes:
- Fix compilation on systems where time_t is a 64-bit integer.
Patch from Matthias Drochner.
- Don't consider expiring already-closed client connections. Fixes
bug 893. Bugfix on 0.0.2pre20.
Changes in version 0.2.0.33 - 2009-01-21
Tor 0.2.0.33 fixes a variety of bugs that were making relays less
useful to users. It also finally fixes a bug where a relay or client
that's been off for many days would take a long time to bootstrap.
This update also fixes an important security-related bug reported by
Ilja van Sprundel. You should upgrade. (We'll send out more details
about the bug once people have had some time to upgrade.)
o Security fixes:
- Fix a heap-corruption bug that may be remotely triggerable on
some platforms. Reported by Ilja van Sprundel.
o Major bugfixes:
- When a stream at an exit relay is in state "resolving" or
"connecting" and it receives an "end" relay cell, the exit relay
would silently ignore the end cell and not close the stream. If
the client never closes the circuit, then the exit relay never
closes the TCP connection. Bug introduced in Tor 0.1.2.1-alpha;
reported by "wood".
- When sending CREATED cells back for a given circuit, use a 64-bit
connection ID to find the right connection, rather than an addr:port
combination. Now that we can have multiple OR connections between
the same ORs, it is no longer possible to use addr:port to uniquely
identify a connection.
- Bridge relays that had DirPort set to 0 would stop fetching
descriptors shortly after startup, and then briefly resume
after a new bandwidth test and/or after publishing a new bridge
descriptor. Bridge users that try to bootstrap from them would
get a recent networkstatus but would get descriptors from up to
18 hours earlier, meaning most of the descriptors were obsolete
already. Reported by Tas; bugfix on 0.2.0.13-alpha.
- Prevent bridge relays from serving their 'extrainfo' document
to anybody who asks, now that extrainfo docs include potentially
sensitive aggregated client geoip summaries. Bugfix on
0.2.0.13-alpha.
- If the cached networkstatus consensus is more than five days old,
discard it rather than trying to use it. In theory it could be
useful because it lists alternate directory mirrors, but in practice
it just means we spend many minutes trying directory mirrors that
are long gone from the network. Also discard router descriptors as
we load them if they are more than five days old, since the onion
key is probably wrong by now. Bugfix on 0.2.0.x. Fixes bug 887.
o Minor bugfixes:
- Do not mark smartlist_bsearch_idx() function as ATTR_PURE. This bug
could make gcc generate non-functional binary search code. Bugfix
on 0.2.0.10-alpha.
- Build correctly on platforms without socklen_t.
- Compile without warnings on solaris.
- Avoid potential crash on internal error during signature collection.
Fixes bug 864. Patch from rovv.
- Correct handling of possible malformed authority signing key
certificates with internal signature types. Fixes bug 880.
Bugfix on 0.2.0.3-alpha.
- Fix a hard-to-trigger resource leak when logging credential status.
CID 349.
- When we can't initialize DNS because the network is down, do not
automatically stop Tor from starting. Instead, we retry failed
dns_init() every 10 minutes, and change the exit policy to reject
*:* until one succeeds. Fixes bug 691.
- Use 64 bits instead of 32 bits for connection identifiers used with
the controller protocol, to greatly reduce risk of identifier reuse.
- When we're choosing an exit node for a circuit, and we have
no pending streams, choose a good general exit rather than one that
supports "all the pending streams". Bugfix on 0.1.1.x. Fix by rovv.
- Fix another case of assuming, when a specific exit is requested,
that we know more than the user about what hosts it allows.
Fixes one case of bug 752. Patch from rovv.
- Clip the MaxCircuitDirtiness config option to a minimum of 10
seconds. Warn the user if lower values are given in the
configuration. Bugfix on 0.1.0.1-rc. Patch by Sebastian.
- Clip the CircuitBuildTimeout to a minimum of 30 seconds. Warn the
user if lower values are given in the configuration. Bugfix on
0.1.1.17-rc. Patch by Sebastian.
- Fix a memory leak when we decline to add a v2 rendezvous descriptor to
the cache because we already had a v0 descriptor with the same ID.
Bugfix on 0.2.0.18-alpha.
- Fix a race condition when freeing keys shared between main thread
and CPU workers that could result in a memory leak. Bugfix on
0.1.0.1-rc. Fixes bug 889.
- Send a valid END cell back when a client tries to connect to a
nonexistent hidden service port. Bugfix on 0.1.2.15. Fixes bug
840. Patch from rovv.
- Check which hops rendezvous stream cells are associated with to
prevent possible guess-the-streamid injection attacks from
intermediate hops. Fixes another case of bug 446. Based on patch
from rovv.
- If a broken client asks a non-exit router to connect somewhere,
do not even do the DNS lookup before rejecting the connection.
Fixes another case of bug 619. Patch from rovv.
- When a relay gets a create cell it can't decrypt (e.g. because it's
using the wrong onion key), we were dropping it and letting the
client time out. Now actually answer with a destroy cell. Fixes
bug 904. Bugfix on 0.0.2pre8.
o Minor bugfixes (hidden services):
- Do not throw away existing introduction points on SIGHUP. Bugfix on
0.0.6pre1. Patch by Karsten. Fixes bug 874.
o Minor features:
- Report the case where all signatures in a detached set are rejected
differently than the case where there is an error handling the
detached set.
- When we realize that another process has modified our cached
descriptors, print out a more useful error message rather than
triggering an assertion. Fixes bug 885. Patch from Karsten.
- Implement the 0x20 hack to better resist DNS poisoning: set the
case on outgoing DNS requests randomly, and reject responses that do
not match the case correctly. This logic can be disabled with the
ServerDNSRamdomizeCase setting, if you are using one of the 0.3%
of servers that do not reliably preserve case in replies. See
"Increased DNS Forgery Resistance through 0x20-Bit Encoding"
for more info.
- Check DNS replies for more matching fields to better resist DNS
poisoning.
- Never use OpenSSL compression: it wastes RAM and CPU trying to
compress cells, which are basically all encrypted, compressed, or
both.
Changes in version 0.2.0.32 - 2008-11-20
Tor 0.2.0.32 fixes a major security problem in Debian and Ubuntu
packages (and maybe other packages) noticed by Theo de Raadt, fixes
a smaller security flaw that might allow an attacker to access local
services, further improves hidden service performance, and fixes a
variety of other issues.
o Security fixes:
- The "User" and "Group" config options did not clear the
supplementary group entries for the Tor process. The "User" option
is now more robust, and we now set the groups to the specified
user's primary group. The "Group" option is now ignored. For more
detailed logging on credential switching, set CREDENTIAL_LOG_LEVEL
in common/compat.c to LOG_NOTICE or higher. Patch by Jacob Appelbaum
and Steven Murdoch. Bugfix on 0.0.2pre14. Fixes bug 848 and 857.
- The "ClientDNSRejectInternalAddresses" config option wasn't being
consistently obeyed: if an exit relay refuses a stream because its
exit policy doesn't allow it, we would remember what IP address
the relay said the destination address resolves to, even if it's
an internal IP address. Bugfix on 0.2.0.7-alpha; patch by rovv.
o Major bugfixes:
- Fix a DOS opportunity during the voting signature collection process
at directory authorities. Spotted by rovv. Bugfix on 0.2.0.x.
o Major bugfixes (hidden services):
- When fetching v0 and v2 rendezvous service descriptors in parallel,
we were failing the whole hidden service request when the v0
descriptor fetch fails, even if the v2 fetch is still pending and
might succeed. Similarly, if the last v2 fetch fails, we were
failing the whole hidden service request even if a v0 fetch is
still pending. Fixes bug 814. Bugfix on 0.2.0.10-alpha.
- When extending a circuit to a hidden service directory to upload a
rendezvous descriptor using a BEGIN_DIR cell, almost 1/6 of all
requests failed, because the router descriptor has not been
downloaded yet. In these cases, do not attempt to upload the
rendezvous descriptor, but wait until the router descriptor is
downloaded and retry. Likewise, do not attempt to fetch a rendezvous
descriptor from a hidden service directory for which the router
descriptor has not yet been downloaded. Fixes bug 767. Bugfix
on 0.2.0.10-alpha.
o Minor bugfixes:
- Fix several infrequent memory leaks spotted by Coverity.
- When testing for libevent functions, set the LDFLAGS variable
correctly. Found by Riastradh.
- Avoid a bug where the FastFirstHopPK 0 option would keep Tor from
bootstrapping with tunneled directory connections. Bugfix on
0.1.2.5-alpha. Fixes bug 797. Found by Erwin Lam.
- When asked to connect to A.B.exit:80, if we don't know the IP for A
and we know that server B rejects most-but-not all connections to
port 80, we would previously reject the connection. Now, we assume
the user knows what they were asking for. Fixes bug 752. Bugfix
on 0.0.9rc5. Diagnosed by BarkerJr.
- If we overrun our per-second write limits a little, count this as
having used up our write allocation for the second, and choke
outgoing directory writes. Previously, we had only counted this when
we had met our limits precisely. Fixes bug 824. Patch from by rovv.
Bugfix on 0.2.0.x (??).
- Remove the old v2 directory authority 'lefkada' from the default
list. It has been gone for many months.
- Stop doing unaligned memory access that generated bus errors on
sparc64. Bugfix on 0.2.0.10-alpha. Fixes bug 862.
- Make USR2 log-level switch take effect immediately. Bugfix on
0.1.2.8-beta.
o Minor bugfixes (controller):
- Make DNS resolved events into "CLOSED", not "FAILED". Bugfix on
0.1.2.5-alpha. Fix by Robert Hogan. Resolves bug 807.
Changes in version 0.2.0.31 - 2008-09-03
Tor 0.2.0.31 addresses two potential anonymity issues, starts to fix
a big bug we're seeing where in rare cases traffic from one Tor stream
gets mixed into another stream, and fixes a variety of smaller issues.
o Major bugfixes:
- Make sure that two circuits can never exist on the same connection
with the same circuit ID, even if one is marked for close. This
is conceivably a bugfix for bug 779. Bugfix on 0.1.0.4-rc.
- Relays now reject risky extend cells: if the extend cell includes
a digest of all zeroes, or asks to extend back to the relay that
sent the extend cell, tear down the circuit. Ideas suggested
by rovv.
- If not enough of our entry guards are available so we add a new
one, we might use the new one even if it overlapped with the
current circuit's exit relay (or its family). Anonymity bugfix
pointed out by rovv.
o Minor bugfixes:
- Recover 3-7 bytes that were wasted per memory chunk. Fixes bug
794; bug spotted by rovv. Bugfix on 0.2.0.1-alpha.
- Correctly detect the presence of the linux/netfilter_ipv4.h header
when building against recent kernels. Bugfix on 0.1.2.1-alpha.
- Pick size of default geoip filename string correctly on windows.
Fixes bug 806. Bugfix on 0.2.0.30.
- Make the autoconf script accept the obsolete --with-ssl-dir
option as an alias for the actually-working --with-openssl-dir
option. Fix the help documentation to recommend --with-openssl-dir.
Based on a patch by "Dave". Bugfix on 0.2.0.1-alpha.
- When using the TransPort option on OpenBSD, and using the User
option to change UID and drop privileges, make sure to open
/dev/pf before dropping privileges. Fixes bug 782. Patch from
Christopher Davis. Bugfix on 0.1.2.1-alpha.
- Try to attach connections immediately upon receiving a RENDEZVOUS2
or RENDEZVOUS_ESTABLISHED cell. This can save a second or two
on the client side when connecting to a hidden service. Bugfix
on 0.0.6pre1. Found and fixed by Christian Wilms; resolves bug 743.
- When closing an application-side connection because its circuit is
getting torn down, generate the stream event correctly. Bugfix on
0.1.2.x. Anonymous patch.
Changes in version 0.2.0.30 - 2008-07-15
This new stable release switches to a more efficient directory
distribution design, adds features to make connections to the Tor
network harder to block, allows Tor to act as a DNS proxy, adds separate
rate limiting for relayed traffic to make it easier for clients to
become relays, fixes a variety of potential anonymity problems, and
includes the usual huge pile of other features and bug fixes.
o New v3 directory design:
- Tor now uses a new way to learn about and distribute information
about the network: the directory authorities vote on a common
network status document rather than each publishing their own
opinion. Now clients and caches download only one networkstatus
document to bootstrap, rather than downloading one for each
authority. Clients only download router descriptors listed in
the consensus. Implements proposal 101; see doc/spec/dir-spec.txt
for details.
- Set up moria1, tor26, and dizum as v3 directory authorities
in addition to being v2 authorities. Also add three new ones:
ides (run by Mike Perry), gabelmoo (run by Karsten Loesing), and
dannenberg (run by CCC).
- Switch to multi-level keys for directory authorities: now their
long-term identity key can be kept offline, and they periodically
generate a new signing key. Clients fetch the "key certificates"
to keep up to date on the right keys. Add a standalone tool
"tor-gencert" to generate key certificates. Implements proposal 103.
- Add a new V3AuthUseLegacyKey config option to make it easier for
v3 authorities to change their identity keys if another bug like
Debian's OpenSSL RNG flaw appears.
- Authorities and caches fetch the v2 networkstatus documents
less often, now that v3 is recommended.
o Make Tor connections stand out less on the wire:
- Use an improved TLS handshake designed by Steven Murdoch in proposal
124, as revised in proposal 130. The new handshake is meant to
be harder for censors to fingerprint, and it adds the ability
to detect certain kinds of man-in-the-middle traffic analysis
attacks. The new handshake format includes version negotiation for
OR connections as described in proposal 105, which will allow us
to improve Tor's link protocol more safely in the future.
- Enable encrypted directory connections by default for non-relays,
so censor tools that block Tor directory connections based on their
plaintext patterns will no longer work. This means Tor works in
certain censored countries by default again.
- Stop including recognizeable strings in the commonname part of
Tor's x509 certificates.
o Implement bridge relays:
- Bridge relays (or "bridges" for short) are Tor relays that aren't
listed in the main Tor directory. Since there is no complete public
list of them, even an ISP that is filtering connections to all the
known Tor relays probably won't be able to block all the bridges.
See doc/design-paper/blocking.pdf and proposal 125 for details.
- New config option BridgeRelay that specifies you want to be a
bridge relay rather than a normal relay. When BridgeRelay is set
to 1, then a) you cache dir info even if your DirPort ins't on,
and b) the default for PublishServerDescriptor is now "bridge"
rather than "v2,v3".
- New config option "UseBridges 1" for clients that want to use bridge
relays instead of ordinary entry guards. Clients then specify
bridge relays by adding "Bridge" lines to their config file. Users
can learn about a bridge relay either manually through word of
mouth, or by one of our rate-limited mechanisms for giving out
bridge addresses without letting an attacker easily enumerate them
all. See https://www.torproject.org/bridges for details.
- Bridge relays behave like clients with respect to time intervals
for downloading new v3 consensus documents -- otherwise they
stand out. Bridge users now wait until the end of the interval,
so their bridge relay will be sure to have a new consensus document.
o Implement bridge directory authorities:
- Bridge authorities are like normal directory authorities, except
they don't serve a list of known bridges. Therefore users that know
a bridge's fingerprint can fetch a relay descriptor for that bridge,
including fetching updates e.g. if the bridge changes IP address,
yet an attacker can't just fetch a list of all the bridges.
- Set up Tonga as the default bridge directory authority.
- Bridge authorities refuse to serve bridge descriptors or other
bridge information over unencrypted connections (that is, when
responding to direct DirPort requests rather than begin_dir cells.)
- Bridge directory authorities do reachability testing on the
bridges they know. They provide router status summaries to the
controller via "getinfo ns/purpose/bridge", and also dump summaries
to a file periodically, so we can keep internal stats about which
bridges are functioning.
- If bridge users set the UpdateBridgesFromAuthority config option,
but the digest they ask for is a 404 on the bridge authority,
they fall back to contacting the bridge directly.
- Bridges always use begin_dir to publish their server descriptor to
the bridge authority using an anonymous encrypted tunnel.
- Early work on a "bridge community" design: if bridge authorities set
the BridgePassword config option, they will serve a snapshot of
known bridge routerstatuses from their DirPort to anybody who
knows that password. Unset by default.
- Tor now includes an IP-to-country GeoIP file, so bridge relays can
report sanitized aggregated summaries in their extra-info documents
privately to the bridge authority, listing which countries are
able to reach them. We hope this mechanism will let us learn when
certain countries start trying to block bridges.
- Bridge authorities write bridge descriptors to disk, so they can
reload them after a reboot. They can also export the descriptors
to other programs, so we can distribute them to blocked users via
the BridgeDB interface, e.g. via https://bridges.torproject.org/