|
@@ -297,6 +297,29 @@ $Id$
|
|
|
The "Digest" of a document, unless stated otherwise, is its digest *as
|
|
|
signed by this signature scheme*.
|
|
|
|
|
|
+1.4. Voting timeline
|
|
|
+
|
|
|
+ Every consensus document has a "valid-after" (VA) time, a "fresh-until"
|
|
|
+ (FU) time and a "valid-until" (VU) time. VA MUST precede FU, which MUST
|
|
|
+ in turn precede VU. Times are chosen so that every consensus will be
|
|
|
+ "fresh" until the next consensus becomes valid, and "valid" for a while
|
|
|
+ after. At least 2 or 3 consensuses should be valid at any given time.
|
|
|
+
|
|
|
+ The timeline for a given consensus is as follows:
|
|
|
+
|
|
|
+ VA-DistSeconds-VoteSeconds: The authorities exchange votes.
|
|
|
+
|
|
|
+ VA-DistSeconds: The authorities calculate the consensus and exchange
|
|
|
+ signatures.
|
|
|
+
|
|
|
+ VA: All authorities have a multiply signed consensus.
|
|
|
+
|
|
|
+ VA ... FU: Caches download the consensus.
|
|
|
+
|
|
|
+ FU: The consensus is no long the freshest consensus.
|
|
|
+
|
|
|
+ VU: The consensus is no longer valid.
|
|
|
+
|
|
|
2. Router operation and formats
|
|
|
|
|
|
ORs SHOULD generate a new router descriptor and a new extra-info
|
|
@@ -696,6 +719,14 @@ $Id$
|
|
|
The status MUST be "vote" or "consensus", depending on the type of
|
|
|
the document.
|
|
|
|
|
|
+ "consensus-methods" SP IntegerList NL
|
|
|
+
|
|
|
+ [Exactly once for votes; does not occur in consensuses.]
|
|
|
+
|
|
|
+ A space-separated list of supported methods for generating
|
|
|
+ consensuses from votes. See section 3.4.1 for details. Method "1"
|
|
|
+ MUST be included.
|
|
|
+
|
|
|
"published" SP YYYY-MM-DD SP HH:MM:SS NL
|
|
|
|
|
|
[Exactly once for votes; does not occur in consensuses.]
|
|
@@ -706,25 +737,34 @@ $Id$
|
|
|
|
|
|
[Exactly once.]
|
|
|
|
|
|
- The start of the Interval for this vote. XXXX
|
|
|
+ The start of the Interval for this vote. Before this time, the
|
|
|
+ consensus document produced from this vote should not be used.
|
|
|
+ See 1.4 for voting timeline information.
|
|
|
|
|
|
"fresh-until" SP YYYY-MM-DD SP HH:MM:SS NL
|
|
|
|
|
|
[Exactly once.]
|
|
|
|
|
|
- XXXX
|
|
|
+ The time at which the next consensus should be produced; before this
|
|
|
+ time, there is no point in downloading another consensus, since there
|
|
|
+ won't be a new one. See 1.4 for voting timeline information.
|
|
|
|
|
|
"valid-until" SP YYYY-MM-DD SP HH:MM:SS NL
|
|
|
|
|
|
[Exactly once.]
|
|
|
|
|
|
- The end of the Interval for this vote. XXXX
|
|
|
+ The end of the Interval for this vote. After this time, the
|
|
|
+ consensus produced by this vote should not be used. See 1.4 for
|
|
|
+ voting timeline information.
|
|
|
|
|
|
"voting-delay" SP VoteSeconds SP DistSeconds NL
|
|
|
|
|
|
[Exactly once.]
|
|
|
|
|
|
- XXXX
|
|
|
+ VoteSeconds is the number of seconds that we will allow to collect
|
|
|
+ votes from all authorities; DistSeconds is the number of seconds
|
|
|
+ we'll allow to collect signatures from all authorities. See 1.4 for
|
|
|
+ voting timeline information.
|
|
|
|
|
|
"client-versions" SP VersionList NL
|
|
|
|
|
@@ -980,6 +1020,22 @@ $Id$
|
|
|
The signatures at the end of a consensus document are sorted in
|
|
|
ascending order by identity digest.
|
|
|
|
|
|
+3.4.1. Forward compatibility
|
|
|
+
|
|
|
+ Future versions of Tor will need to include new information in the
|
|
|
+ consensus documents, but it is important that all authorities (or at least
|
|
|
+ half) generate and sign the same signed consensus.
|
|
|
+
|
|
|
+ To achieve this, authorities list in their votes their supported methods
|
|
|
+ for generating consensuses from votes. The method described above and
|
|
|
+ implemented in Tor 0.2.0.x is "1". Later methods will be assigned higher
|
|
|
+ numbers.
|
|
|
+
|
|
|
+ Before generating a consensus, an authority must decide which consensus
|
|
|
+ method to use. To do this, it looks for the highest version number
|
|
|
+ supported by more than 2/3 of the authorities. If it supports this
|
|
|
+ method, then it uses it. Otherwise, it falls back to method 1.
|
|
|
+
|
|
|
3.5. Detached signatures
|
|
|
|
|
|
Assuming full connectivity, every authority should compute and sign the
|
|
@@ -1061,17 +1117,15 @@ $Id$
|
|
|
merged with the second-to-last period.
|
|
|
|
|
|
An authority SHOULD publish its vote immediately at the start of each voting
|
|
|
- period. It does this by making it available at
|
|
|
+ period (minus VoteSeconds+DistSeconds). It does this by making it
|
|
|
+ available at
|
|
|
http://<hostname>/tor/status-vote/current/authority.z
|
|
|
and sending it in an HTTP POST request to each other authority at the URL
|
|
|
http://<hostname>/tor/post/vote
|
|
|
|
|
|
- (Note that this requires the authority to settle upon and finalize its
|
|
|
- vote slightly before the start of the voting period.)
|
|
|
-
|
|
|
- If, VOTING_DELAY minutes after the voting period has begun, an authority
|
|
|
+ If, at the start of the voting period, minus DistSeconds, an authority
|
|
|
does not have a current statement from another authority, the first
|
|
|
- authority retrieves the other's statement.
|
|
|
+ authority downloads the other's statement.
|
|
|
|
|
|
Once an authority has a vote from another authority, it makes it available
|
|
|
at
|
|
@@ -1080,9 +1134,15 @@ $Id$
|
|
|
|
|
|
The consensus status, along with as many signatures as the server
|
|
|
currently knows, should be available at
|
|
|
- http://<hostname>/tor/status-vote/current/consensus.z
|
|
|
+ http://<hostname>/tor/status-vote/next/consensus.z
|
|
|
All of the detached signatures it knows for consensus status should be
|
|
|
available at:
|
|
|
+ http://<hostname>/tor/status-vote/next/consensus-signatures.z
|
|
|
+
|
|
|
+ Once there are enough signatures, or once the voting period starts,
|
|
|
+ these documents are available at
|
|
|
+ http://<hostname>/tor/status-vote/current/consensus.z
|
|
|
+ and
|
|
|
http://<hostname>/tor/status-vote/current/consensus-signatures.z
|
|
|
|
|
|
Once an authority has computed and signed a consensus network status, it
|
|
@@ -1095,17 +1155,17 @@ $Id$
|
|
|
[XXX possible future features include support for downloading old
|
|
|
consensuses.]
|
|
|
|
|
|
- [XXX Constants: VOTING_DELAY, CONSENSUS_DELAY]
|
|
|
-
|
|
|
-
|
|
|
4.3. Downloading consensus status documents (caches only)
|
|
|
|
|
|
- All directory servers (authorities and caches) try to keep a fresh
|
|
|
- set of network-status consensus documents to serve to clients. Every
|
|
|
- 15 minutes, or whenever the valid-until field on its most current
|
|
|
- consensus is about to expire
|
|
|
-
|
|
|
-[XXXX finish this section]
|
|
|
+ All directory servers (authorities and caches) try to keep a recent
|
|
|
+ network-status consensus document to serve to clients. A cache ALWAYS
|
|
|
+ downloads a network-status consensus if any of the following are true:
|
|
|
+ - The cache has no consensus document.
|
|
|
+ - The cache's consensus document is no longer valid.
|
|
|
+ Otherwise, the cache downloads a new consensus document at a randomly
|
|
|
+ chosen time after its current consensus stops being fresh. (This time is
|
|
|
+ chosen at random to avoid swarming the authorities at the start of each
|
|
|
+ period.)
|
|
|
|
|
|
4.4. Downloading and storing router descriptors (authorities and caches)
|
|
|
|
|
@@ -1251,14 +1311,12 @@ $Id$
|
|
|
until it has a live network-status consensus document, and it has
|
|
|
descriptors for more than 1/4 of the routers that it believes are running.
|
|
|
|
|
|
- [XXXX handling clock skew at client side?]
|
|
|
- [XXXX fall-back to most recent?]
|
|
|
-
|
|
|
(Note: clients can and should pick caches based on the network-status
|
|
|
information they have: once they have first fetched network-status info
|
|
|
from an authority, they should not need to go to the authority directly
|
|
|
again.)
|
|
|
|
|
|
+
|
|
|
5.2. Downloading and storing router descriptors
|
|
|
|
|
|
Clients try to have the best descriptor for each router. A descriptor is
|