diff options
| author | Yawning Angel <yawning@schwanenlied.me> | 2014-06-07 00:26:36 +0000 | 
|---|---|---|
| committer | Yawning Angel <yawning@schwanenlied.me> | 2014-06-07 00:26:36 +0000 | 
| commit | b19b6de31f160b70f5d38d78d16c539a3b07c6fa (patch) | |
| tree | 60dd174ba48b143fa7f8ff375ed5d3da0eeb7ce2 | |
| parent | d9c6ecbf8f293562093535424fb87189b2812351 (diff) | |
Allow randomly generating node-ids instead of requiring the fingerprint.
To ease delopyment, "-genServerParams has changed".
 * "-genServerParams" is now a bool, and will by default generate a
   random node-id.
 * "-genServerParams -genServerParamsFP=<Base16 blob>" will convert the
   supplied bridge fingerprint to a node-id (the old behavior).
Either way of deriving node-id is belived to be secure.
 * https://lists.torproject.org/pipermail/tor-dev/2014-May/006929.html
 * https://lists.torproject.org/pipermail/tor-dev/2014-June/006936.html
The extra parameter was added because golang's flags library doesn't
support distinguishing between "set but used the default value" and
"not set, so you go the default value".
| -rw-r--r-- | obfs4proxy/obfs4proxy.go | 42 | 
1 files changed, 30 insertions, 12 deletions
| diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go index e19841e..b456c30 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -31,7 +31,7 @@  //  // Client usage (in torrc):  //   UseBridges 1 -//   Bridge obfs4 X.X.X.X:YYYY <fingerprint> public-key=<Base64 Bridge public key> node-id=<Base64 Bridge Node ID> +//   Bridge obfs4 X.X.X.X:YYYY <Fingerprint> public-key=<Base64 Bridge Public Key> node-id=<Base64 Bridge Node ID>  //   ClientTransportPlugin obfs4 exec obfs4proxy  //  // Server usage (in torrc): @@ -39,7 +39,7 @@  //   ORPort 9001  //   ExtORPort 6669  //   ServerTransportPlugin obfs4 exec obfs4proxy -//   ServerTransportOptions obfs4 private-key=<Base64 Bridge private key> node-id=<Base64 Node ID> drbg-seed=<Base64 DRBG seed> +//   ServerTransportOptions obfs4 private-key=<Base64 Bridge Private Key> node-id=<Base64 Node ID> drbg-seed=<Base64 DRBG Seed>  //  // Because the pluggable transport requires arguments, obfs4proxy requires  // tor-0.2.5.x to be useful. @@ -357,12 +357,24 @@ func ptInitializeLogging(enable bool) error {  }  func generateServerParams(id string) { -	rawID, err := hex.DecodeString(id) -	if err != nil { -		fmt.Println("Failed to hex decode id:", err) -		return -	} +	idIsFP := id != "" +	var rawID []byte +	if idIsFP { +		var err error +		rawID, err = hex.DecodeString(id) +		if err != nil { +			fmt.Println("Failed to hex decode id:", err) +			return +		} +	} else { +		rawID = make([]byte, ntor.NodeIDLength) +		err := csrand.Bytes(rawID) +		if err != nil { +			fmt.Println("Failed to generate random node-id:", err) +			return +		} +	}  	parsedID, err := ntor.NewNodeID(rawID)  	if err != nil {  		fmt.Println("Failed to parse id:", err) @@ -390,8 +402,13 @@ func generateServerParams(id string) {  	fmt.Println("Generated drbg-seed:", seedBase64)  	fmt.Println()  	fmt.Println("Client config: ") -	fmt.Printf("  Bridge obfs4 <IP Address:Port> %s node-id=%s public-key=%s\n", -		id, parsedID.Base64(), keypair.Public().Base64()) +	if idIsFP { +		fmt.Printf("  Bridge obfs4 <IP Address:Port> %s node-id=%s public-key=%s\n", +			id, parsedID.Base64(), keypair.Public().Base64()) +	} else { +		fmt.Printf("  Bridge obfs4 <IP Address:Port> <Fingerprint> node-id=%s public-key=%s\n", +			parsedID.Base64(), keypair.Public().Base64()) +	}  	fmt.Println()  	fmt.Println("Server config:")  	fmt.Printf("  ServerTransportOptions obfs4 node-id=%s private-key=%s drbg-seed=%s\n", @@ -400,13 +417,14 @@ func generateServerParams(id string) {  func main() {  	// Some command line args. -	genParams := flag.String("genServerParams", "", "Generate server params given a bridge fingerprint.") +	genParams := flag.Bool("genServerParams", false, "Generate Bridge operator torrc parameters") +	genParamsFP := flag.String("genServerParamsFP", "", "Optional bridge fingerprint for genServerParams")  	flag.BoolVar(&enableLogging, "enableLogging", false, "Log to TOR_PT_STATE_LOCATION/obfs4proxy.log")  	flag.BoolVar(&iatObfuscation, "iatObfuscation", false, "Enable IAT obufscation (EXPENSIVE)")  	flag.BoolVar(&unsafeLogging, "unsafeLogging", false, "Disable the address scrubber")  	flag.Parse() -	if *genParams != "" { -		generateServerParams(*genParams) +	if *genParams { +		generateServerParams(*genParamsFP)  		return  	} | 
