[or-cvs] r12717: add draft sketch of bridge disbursement designs. (in tor/trunk: . doc/spec/proposals/ideas)

nickm at seul.org nickm at seul.org
Sat Dec 8 00:53:43 UTC 2007


Author: nickm
Date: 2007-12-07 19:53:43 -0500 (Fri, 07 Dec 2007)
New Revision: 12717

Added:
   tor/trunk/doc/spec/proposals/ideas/xxx-bridge-disbursement.txt
Modified:
   tor/trunk/
Log:
 r15220 at tombo:  nickm | 2007-12-07 19:53:27 -0500
 add draft sketch of bridge disbursement designs.



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r15220] on d9e39d38-0f13-419c-a857-e10a0ce2aa0c

Added: tor/trunk/doc/spec/proposals/ideas/xxx-bridge-disbursement.txt
===================================================================
--- tor/trunk/doc/spec/proposals/ideas/xxx-bridge-disbursement.txt	                        (rev 0)
+++ tor/trunk/doc/spec/proposals/ideas/xxx-bridge-disbursement.txt	2007-12-08 00:53:43 UTC (rev 12717)
@@ -0,0 +1,115 @@
+
+How to hand out bridges.
+
+Divide bridges into 'strategies' as they come in.  Do this uniformly
+at random for now.
+
+For each strategy, we'll hand out bridges in a different way to
+clients.  This document describes two strategies: email-based and
+IP-based.
+
+0. Notation:
+
+   HMAC(k,v) : an HMAC of v using the key k.
+
+   A|B: The string A concatenated with the string B.
+
+
+1. Email-based.
+
+  Goal: bootstrap based on one or more popular email service's sybil
+     prevention algorithms.
+
+
+  Parameters:
+     HMAC -- an HMAC function
+     P -- a time period
+     K -- the number of bridges to send in a period.
+
+  Setup: Generate two nonces, N and M.
+
+  As bridges arrive, put them into a ring according to HMAC(N,ID)
+  where ID is the bridges's identity digest.
+
+  Divide time into divisions of length P.
+
+  When we get an email:
+
+     If it's not from a supported email service, reject it.
+
+     If we already sent a response to that email address (normalized)
+     in this period, send _exactly_ the same response.
+
+     If it is from a supported service, generate X = HMAC(M,PS|E) where E
+     is the lowercased normalized email address for the user, and
+     where PS is the start of the currrent period.  Send
+     the first K bridges in the ring after point X.
+
+  To normalize an email address:
+     Start with the RFC822 address.  Consider only the mailbox {???}
+     portion of the address (username at host).  Put this into lowercase
+     ascii.
+
+  Questions:
+     What to do with weird character encodings?  Look up the RFC.
+
+  Notes:
+     Make sure that you can't force a single email address to appear
+     in lots of different ways.  IOW, if nickm at freehaven.net and
+     NICKM at freehaven.net aren't treated the same, then I can get lots
+     more bridges than I should.
+
+     Make sure you can't construct a distinct address to match an
+     existing one.  IOW, if we treat nickm at X and nickm at Y as the same
+     user, then anybody can register nickm at Z and use it to tell which
+     bridges nickm at X got (or would get).
+
+     Make sure that we actually check headers so we can't be trivially
+     used to sapam people.
+
+
+
+2. IP-based.
+
+  Goal: avoid handing out all the bridges to users in a similar IP
+  space and time.
+
+  Parameters:
+
+     T_Flush -- how long it should take a user on a single network to
+        see a whole cluster of bridges.
+
+     N_C
+
+     K -- the number of bridges we hand out in response to a single
+     request.
+
+  Setup: using an AS map or a geoip map or some other flawed input
+  source, divide IP space into "areas" such that surveying a large
+  collection of "areas" is hard.  For v0, use /24 adress blocks.
+
+  Group areas into N_C clusters.
+
+  Generate nonces L, M, N.
+
+  Set the period P such that P*(bridges-per-cluster/K) = T_flush.
+  Don't set P to greater than a week, or less than three hours.
+
+  When we get a bridge:
+
+     Based on HMAC(L,ID), assign the bridge to a cluster.  Within each
+     cluster, keep the bridges in a ring based on HMAC(M,ID).
+
+  When we get a connection:
+
+     If it's http, redirect it to https.
+
+     Let net be the incoming IP network.  Let PS be the current
+     period.  Compute X = HMAC(N, PS|net).  Return the next K bridges
+     in the ring after X.
+
+3. Open issues
+
+   Denial of service attacks
+   A good view of network topology
+



More information about the tor-commits mailing list