Matt Pagan commited on 2013-12-13 21:12:11
Zeige 1 geänderte Dateien mit 204 Einfügungen und 1 Löschungen.
... | ... |
@@ -158,6 +158,20 @@ relay.</a></li> |
158 | 158 |
<li><a href="#ProvideAHiddenService">How do I provide a hidden service</a></li> |
159 | 159 |
</ul> |
160 | 160 |
|
161 |
+ <p>Development</p> |
|
162 |
+ <ul> |
|
163 |
+ <li><a href="#WhoIsResponsible">Who is responsible for Tor?</a></li> |
|
164 |
+ <li><a href="#VersionNumbers">What do these weird version numbers |
|
165 |
+ mean?</a></li> |
|
166 |
+ <li><a href="#PrivateTorNetwork">How do I set up my own private |
|
167 |
+ Tor network?</a></li> |
|
168 |
+ <li><a href="#UseTorWithJava">How can I make my Java program use the |
|
169 |
+ Tor network?</a></li> |
|
170 |
+ <li><a href="#WhatIsLibevent">What is Libevent?</a></li> |
|
171 |
+ <li><a href="#MyNewFeature">What do I need to do to get a new feature |
|
172 |
+ into Tor?</a></li> |
|
173 |
+ </ul> |
|
174 |
+ |
|
161 | 175 |
<p>Anonymity and Security:</p> |
162 | 176 |
<ul> |
163 | 177 |
<li><a href="#WhatProtectionsDoesTorProvide">What protections does Tor |
... | ... |
@@ -544,7 +558,7 @@ or the |
544 | 558 |
<a id="Forum"></a> |
545 | 559 |
<h3><a class="anchor" href="#Forum">Is there a Tor forum?</a></h3> |
546 | 560 |
|
547 |
- <p>We have <a href="https://tor.stackexchange.com/">a StackExchange |
|
561 |
+ <p>We have a <a href="https://tor.stackexchange.com/">StackExchange |
|
548 | 562 |
page</a> that is currently in public beta. |
549 | 563 |
</p> |
550 | 564 |
|
... | ... |
@@ -2742,6 +2756,195 @@ diversity, |
2742 | 2756 |
|
2743 | 2757 |
<hr> |
2744 | 2758 |
|
2759 |
+ <a id="WhoIsResponsible"></a> |
|
2760 |
+ <h3><a class="anchor" href="#WhoIsResponsible">Who is responsible |
|
2761 |
+ for Tor?</a></h3> |
|
2762 |
+ |
|
2763 |
+ <p> |
|
2764 |
+ <a href="http://www.freehaven.net/~arma/cv.html">Roger Dingledine</a> and |
|
2765 |
+ <a href="http://www.wangafu.net/~nickm/">Nick Mathewson</a> are the main |
|
2766 |
+ developers of Tor. You can read more at |
|
2767 |
+ <a href="https://www.torproject.org/about/corepeople">Tor's People |
|
2768 |
+ page</a>. |
|
2769 |
+ </p> |
|
2770 |
+ |
|
2771 |
+ <hr> |
|
2772 |
+ |
|
2773 |
+ <a id="VersionNumbers"></a> |
|
2774 |
+ <h3><a class="anchor" href="#VersionNumbers">What do these weird |
|
2775 |
+ version numbers mean?</a></h3> |
|
2776 |
+ |
|
2777 |
+ <p> |
|
2778 |
+ Versions of Tor before 0.1.0 used a strange and hard-to-explain version scheme. Let's forget about those. |
|
2779 |
+ </p> |
|
2780 |
+ <p> |
|
2781 |
+ Starting with 0.1.0, versions all look like this: |
|
2782 |
+ MAJOR.MINOR.MICRO(.PATCHLEVEL)(-TAG). The stuff in parenthesis is |
|
2783 |
+ optional. MAJOR, MINOR, MICRO, and PATCHLEVEL are all numbers. Only one |
|
2784 |
+ release is ever made with any given set of these version numbers. The |
|
2785 |
+ TAG lets you know how stable we think the release is: "alpha" is pretty |
|
2786 |
+ unstable; "rc" is a release candidate; and no tag at all means that we |
|
2787 |
+ have a final release. If the tag ends with "-cvs", you're looking at |
|
2788 |
+ a development snapshot that came after a given release. |
|
2789 |
+ </p> |
|
2790 |
+ <p> |
|
2791 |
+ So for example, we might start a development branch with (say) |
|
2792 |
+ 0.1.1.1-alpha. The patchlevel increments consistently as the status |
|
2793 |
+ tag changes, for example, as in: 0.1.1.2-alpha, 0.1.1.3-alpha, |
|
2794 |
+ 0.1.1.4-rc, 0.1.1.5-rc, etc. Eventually, we would release 0.1.1.6. |
|
2795 |
+ The next stable release would be 0.1.1.7. |
|
2796 |
+ </p> |
|
2797 |
+ <p> |
|
2798 |
+ Why do we do it like this? Because every release has a unique |
|
2799 |
+ version number, it is easy for tools like package manager to tell |
|
2800 |
+ which release is newer than another. The tag makes it easy for users |
|
2801 |
+ to tell how stable the release is likely to be. |
|
2802 |
+ </p> |
|
2803 |
+ |
|
2804 |
+ <hr> |
|
2805 |
+ |
|
2806 |
+ <a id="PrivateTorNetwork"></a> |
|
2807 |
+ <h3><a class="anchor" href="#PrivateTorNetwork">How do I set up my |
|
2808 |
+ own private Tor network?</a></h3> |
|
2809 |
+ |
|
2810 |
+ <p> |
|
2811 |
+ If you want to experiment locally with your own network, or you're |
|
2812 |
+ cut off from the Internet and want to be able to mess with Tor still, |
|
2813 |
+ then you may want to set up your own separate Tor network. |
|
2814 |
+ </p> |
|
2815 |
+ <p> |
|
2816 |
+ To set up your own Tor network, you need to run your own authoritative |
|
2817 |
+ directory servers, and your clients and relays must be configured so |
|
2818 |
+ they know about your directory servers rather than the default public |
|
2819 |
+ ones. |
|
2820 |
+ </p> |
|
2821 |
+ <p> |
|
2822 |
+ Apart from the somewhat tedious method of manually configuring a couple |
|
2823 |
+ of directory authorities, relays and clients there are two separate |
|
2824 |
+ tools that could help. One is Chutney, the other is Shadow. |
|
2825 |
+ </p> |
|
2826 |
+ <p> |
|
2827 |
+ <a href="https://gitweb.torproject.org/chutney.git">Chutney</a> is a |
|
2828 |
+ tool for configuring, controlling and running tests on a |
|
2829 |
+ testing Tor network. It requires that you have Tor and Python (2.5 or |
|
2830 |
+ later) installed on your system. You can use Chutney to create a testing |
|
2831 |
+ network by generating Tor configuration files (torrc) and necssary keys |
|
2832 |
+ (for the directory authorities). Then you can let Chutney start your Tor |
|
2833 |
+ authorities, relays and clients and wait for the network to bootstrap. |
|
2834 |
+ Finally, you can have Chutney run tests on your network to see which |
|
2835 |
+ things work and which do not. Chutney is typically used for running a |
|
2836 |
+ testing network with about 10 instances of Tor. Every instance of Tor |
|
2837 |
+ binds to one or two ports on localhost (127.0.0.1) and all Tor |
|
2838 |
+ communication is done over the loopback interface. The <a |
|
2839 |
+ href="https://gitweb.torproject.org/chutney.git/blob/HEAD:/README">Chutney |
|
2840 |
+ README</a> is a good starting point for getting it up and running. |
|
2841 |
+ </p> |
|
2842 |
+ <p> |
|
2843 |
+ <a href="https://github.com/shadow/shadow">Shadow</a> is a network |
|
2844 |
+ simulator that can run Tor through its Scallion plug-in. Although |
|
2845 |
+ it's typically used for running load and performance tests on |
|
2846 |
+ substantially larger Tor test networks than what's feasible with |
|
2847 |
+ Chutney, it also makes for an excellent debugging tool since you can |
|
2848 |
+ run completely deterministic experiments. A large Shadow network is on |
|
2849 |
+ the size of thousands of instances of Tor, and you can run experiments |
|
2850 |
+ out of the box using one of Shadow's several included scallion experiment |
|
2851 |
+ configurations. Shadow can be run on any linux machine without root, |
|
2852 |
+ and can also run on EC2 using a pre-configured image. Also, Shadow |
|
2853 |
+ controls the time of the simulation with the effect that |
|
2854 |
+ time-consuming tests can be done more efficiently than in an |
|
2855 |
+ ordinary testing network. The <a |
|
2856 |
+ href="https://github.com/shadow/shadow/wiki">Shadow wiki</a> and |
|
2857 |
+ <a href="http://shadow.github.io/">Shadow website</a> are |
|
2858 |
+ good places to get started. |
|
2859 |
+ </p> |
|
2860 |
+ |
|
2861 |
+ <hr> |
|
2862 |
+ |
|
2863 |
+ <a id="UseTorInJava"></a> |
|
2864 |
+ <h3><a class="anchor" href="UseTorInJava">How can I make my Java |
|
2865 |
+ program use the Tor Network?</a></h3> |
|
2866 |
+ |
|
2867 |
+ <p> |
|
2868 |
+ The newest versions of Java now have SOCKS4/5 support built in. |
|
2869 |
+ Unfortunately, the SOCKS interface is not very well documented and |
|
2870 |
+ may still leak your DNS lookups. The safest way to use Tor is to |
|
2871 |
+ interface the SOCKS protocol directly or go through an application-level |
|
2872 |
+ proxy that speaks SOCKS4a. For an example and libraries that implement |
|
2873 |
+ the SOCKS4a connection, go to Joe Foley's TorLib in the <a |
|
2874 |
+ href="http://web.mit.edu/foley/www/TinFoil/">TinFoil Project</a>. |
|
2875 |
+ </p> |
|
2876 |
+ |
|
2877 |
+ <p> |
|
2878 |
+ A fully Java implementation of the Tor client is now available as <a |
|
2879 |
+ href="http://www.subgraph.com/orchid.html">Orchid</a>. We still consider |
|
2880 |
+ Orchid to be experimental, so use with care. |
|
2881 |
+ </p> |
|
2882 |
+ |
|
2883 |
+ <hr> |
|
2884 |
+ |
|
2885 |
+ |
|
2886 |
+ <a id="WhatIsLibevent"></a> |
|
2887 |
+ <h3><a class="anchor" href="#WhatIsLibevent">What is Libevent?</a></h3> |
|
2888 |
+ |
|
2889 |
+ <p> |
|
2890 |
+ When you want to deal with a bunch of net connections at once, you |
|
2891 |
+ have a few options: |
|
2892 |
+ </p> |
|
2893 |
+ <p> |
|
2894 |
+ One is multithreading: you have a separate micro-program inside the |
|
2895 |
+ main program for each net connection that reads and writes to the |
|
2896 |
+ connection as needed.This, performance-wise, sucks. |
|
2897 |
+ </p> |
|
2898 |
+ <p> |
|
2899 |
+ Another is asynchronous network programming: you have a single main |
|
2900 |
+ program that finds out when various net connections are ready to |
|
2901 |
+ read/write, and acts accordingly. |
|
2902 |
+ </p> |
|
2903 |
+ <p> |
|
2904 |
+ The problem is that the oldest ways to find out when net connections |
|
2905 |
+ are ready to read/write, suck. And the newest ways are finally fast, |
|
2906 |
+ but are not available on all platforms. |
|
2907 |
+ </p> |
|
2908 |
+ <p> |
|
2909 |
+ This is where Libevent comes in and wraps all these ways to find |
|
2910 |
+ out whether net connections are ready to read/write, so that Tor |
|
2911 |
+ (and other programs) can use the fastest one that your platform |
|
2912 |
+ supports, but can still work on older platforms (these methods are |
|
2913 |
+ all different depending on the platorm) So Libevent presents a |
|
2914 |
+ consistent and fast interface to select, poll, kqueue, epoll, |
|
2915 |
+ /dev/poll, and windows select. |
|
2916 |
+ </p> |
|
2917 |
+ <p> |
|
2918 |
+ However, On the the Win32 platform (by Microsoft) the only good |
|
2919 |
+ way to do fast IO on windows with hundreds of sockets is using |
|
2920 |
+ overlapped IO, which is grossly unlike every other BSD sockets |
|
2921 |
+ interface. |
|
2922 |
+ </p> |
|
2923 |
+ <p>Libevent has <a href="http://www.monkey.org/~provos/libevent/">its |
|
2924 |
+ own website</a>. |
|
2925 |
+ </p> |
|
2926 |
+ <hr> |
|
2927 |
+ |
|
2928 |
+ <a id="MyNewFeature"></a> |
|
2929 |
+ <h3><a class="anchor" href="#MyNewFeature">What do I need to do to get |
|
2930 |
+ a new feature into Tor?</a></h3> |
|
2931 |
+ |
|
2932 |
+ <p> |
|
2933 |
+ For a new feature to go into Tor, it needs to be designed (explain what |
|
2934 |
+ you think Tor should do), argued to be secure (explain why it's better |
|
2935 |
+ or at least as good as what Tor does now), specified (explained at the |
|
2936 |
+ byte level at approximately the level of detail in tor-spec.txt), and |
|
2937 |
+ implemented (done in software). |
|
2938 |
+ </p> |
|
2939 |
+ |
|
2940 |
+ <p> |
|
2941 |
+ You probably shouldn't count on other people doing all of these steps |
|
2942 |
+ for you: people who are skilled enough to do this stuff generally |
|
2943 |
+ have their own favorite feature requests. |
|
2944 |
+ </p> |
|
2945 |
+ |
|
2946 |
+ <hr> |
|
2947 |
+ |
|
2745 | 2948 |
<a id="WhatProtectionsDoesTorProvide"></a> |
2746 | 2949 |
<h3><a class="anchor" href="#WhatProtectionsDoesTorProvide">What |
2747 | 2950 |
protections does Tor provide?</a></h3> |
2748 | 2951 |