Commit 7ec9a684 authored by George Kadianakis's avatar George Kadianakis
Browse files

Service intro circuits are now 4-hop to avoid linkability by intro

Now the circuits look like this:

	 client rend:   C -> G -> L2 -> Rend
	 client intro:  C -> G -> L2 -> M -> Intro
	 client hsdir:  C -> G -> L2 -> M -> HSDir
	 service rend:  C -> G -> L2 -> M -> Rend
	 service intro: C -> G -> L2 -> M -> Intro
	 service hsdir: C -> G -> L2 -> M -> HSDir
parent 9b464cdc
Loading
Loading
Loading
Loading
+6 −5
Original line number Original line Diff line number Diff line
@@ -1394,16 +1394,14 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei)
    return routelen;
    return routelen;


  switch (purpose) {
  switch (purpose) {
    /* These two purposes connect to a router that we chose, so
    /* These purposes connect to a router that we chose, so DEFAULT_ROUTE_LEN
     * DEFAULT_ROUTE_LEN is safe. */
     * is safe: */
  case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
    /* hidden service connecting to introduction point */
  case CIRCUIT_PURPOSE_TESTING:
  case CIRCUIT_PURPOSE_TESTING:
    /* router reachability testing */
    /* router reachability testing */
    known_purpose = 1;
    known_purpose = 1;
    break;
    break;


    /* These three purposes connect to a router that someone else
    /* These purposes connect to a router that someone else
     * might have chosen, so add an extra hop to protect anonymity. */
     * might have chosen, so add an extra hop to protect anonymity. */
  case CIRCUIT_PURPOSE_C_GENERAL:
  case CIRCUIT_PURPOSE_C_GENERAL:
  case CIRCUIT_PURPOSE_C_HSDIR_GET:
  case CIRCUIT_PURPOSE_C_HSDIR_GET:
@@ -1413,6 +1411,9 @@ route_len_for_purpose(uint8_t purpose, extend_info_t *exit_ei)
    /* client connecting to introduction point */
    /* client connecting to introduction point */
  case CIRCUIT_PURPOSE_S_CONNECT_REND:
  case CIRCUIT_PURPOSE_S_CONNECT_REND:
    /* hidden service connecting to rendezvous point */
    /* hidden service connecting to rendezvous point */
  case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
    /* hidden service connecting to intro point. In this case we want an extra
       hop to avoid linkability attacks by the introduction point. */
    known_purpose = 1;
    known_purpose = 1;
    routelen++;
    routelen++;
    break;
    break;
+1 −1
Original line number Original line Diff line number Diff line
@@ -113,7 +113,7 @@ test_new_route_len_safe_exit(void *arg)
  /* hidden service connecting to introduction point */
  /* hidden service connecting to introduction point */
  r = new_route_len(CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, &dummy_ei,
  r = new_route_len(CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, &dummy_ei,
                    &dummy_nodes);
                    &dummy_nodes);
  tt_int_op(DEFAULT_ROUTE_LEN, OP_EQ, r);
  tt_int_op(DEFAULT_ROUTE_LEN+1, OP_EQ, r);


  /* router testing its own reachability */
  /* router testing its own reachability */
  r = new_route_len(CIRCUIT_PURPOSE_TESTING, &dummy_ei, &dummy_nodes);
  r = new_route_len(CIRCUIT_PURPOSE_TESTING, &dummy_ei, &dummy_nodes);