Increased Resiliency for Tor


In current Tor implementation, it require each directory server as well as each client to know each of the relay nodes in the Tor network. Each relay node needs to periodically sign and send its public key, bandwidth, port, and other informations to the Tor directory server. Meanwhile, the Tor directory servers need to periodically generate a consensus view of the current relay nodes, by sign and send individual view of the Tor network to others. After all the directory servers reach consensus, they will make the view of current Tor network available to each Tor relay, and Tor client. This approach makes Tor vulnerable to be censored. If the ISP block the access the Tor directory servers, then tor client cannot get a view of the current Tor network and will not be able to work properly.

In order to make Tor more resilient to censorship, Domain Name System Security Extensions (DNSSEC) can be used to replace the Tor directory server. Instead of asking the directory server for the information of each relay nodes in current Tor network, Tor client can query the DNSSEC for those information. As mentioned previously, in current Tor implementation, each client need to download a consus view of the current Tor nodes, which include: node name, node fingerprint, IP address, port, time of appearing, bandwidth, version of Tor running. Those information can be put on one or several DNSSEC servers. Meanwhile, Tor will have hundreds of regular changed domain names that is based on a hash function, and each domain name only responsible for a subset of the Tor nodes. The query result of each domain name is encrypted with correspondent domain name key which is also changed regularly. This will make sure as long as one domain name is not blocked, then Tor is still available.


My shell script to set up private tor

Other useful links

Python script that sets up a private Tor network
Tor documentation