summaryrefslogtreecommitdiff
path: root/torhs.html
blob: 8a2fc6078fafefaacc99f45ba430008fd4a457f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="pandoc">
  <title></title>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
  <link rel="stylesheet" href="reveal.js//css/reveal.css">
  <style type="text/css">code{white-space: pre;}</style>
  <link rel="stylesheet" href="reveal.js//css/theme/black.css" id="theme">
  <link rel="stylesheet" href="usrspace.css"/>
  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement( 'link' );
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js//css/print/pdf.css' : 'reveal.js//css/print/paper.css';
    document.getElementsByTagName( 'head' )[0].appendChild( link );
  </script>
  <!--[if lt IE 9]>
  <script src="reveal.js//lib/js/html5shiv.js"></script>
  <![endif]-->
</head>
<body>
  <div class="reveal">
    <div class="slides">


<section><section id="tor-hidden-services-for-fun-and-nat-traversal" class="titleslide slide level1"><h1>Tor Hidden Services for Fun and NAT Traversal</h1></section></section>
<section><section id="was-ist-tor" class="titleslide slide level1"><h1>Was ist Tor</h1></section><section id="was-ist-tor-1" class="slide level2">
<h2>Was ist Tor</h2>
<ul>
<li>Tor (<em>nicht</em> TOR) steht für “The onion router”</li>
<li>Möglichkeit Kommunikationswege zu anonymisieren</li>
<li>Anonymisiert <strong>nicht</strong> den Inhalt</li>
</ul>
<aside class="notes">
Wer sich über Tor bei Facebook anmeldet wird dort genau so getrackt wie sonst. Es sieht nur niemand unterwegs.
</aside>
</section><section id="warum-the-onion-router" class="slide level2">
<h2>Warum The onion router</h2>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/-FtCTW2rVFM?controls=0&amp;start=44" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
</section><section id="tor-verbindung" class="slide level2">
<h2>Tor Verbindung</h2>
<ol type="1">
<li>Client holt sich die Info über <em>alle</em> Relays von einem Directory Server</li>
<li>Client verbindet sich zu erstem Hop</li>
<li>Client holt sich von diesem Infos zu zweitem Hop</li>
<li>Von diesem kommen dann die Infos zum dritten (Exit) Hop</li>
</ol>
</section><section id="tor-verbindung-1" class="slide level2">
<h2>Tor Verbindung</h2>
<ol start="5" type="1">
<li><p>Daten werden 3x verschlüsselt und an den 1. Hop gesendet</p>
<pre><code>ENC(Hop2+ENC(Hop3+ENC(Ziel+Daten)))</code></pre></li>
<li>Jeder Hop entschlüsselt einen Layer &amp; sendet den Inhalt weiter</li>
<li>Exit-Node sendet an das eigentliche Ziel</li>
<li><p>Zurück wird bei jedem Hop ein Layer hinzugefügt</p></li>
</ol>
</section><section id="tldr" class="slide level2">
<h2>TL;DR</h2>
<ul>
<li>Tor verschlüsselt die Daten in Schichten (wie eine Zwiebel)</li>
<li>Jeder Hop kann nur seine eigenen Daten lesen</li>
<li>Jeder Hop kennt nur seine direkten Nachbarn, nicht den gesamten Pfad</li>
<li>Exit-Node kennt das Ziel, und Klardaten (wenn nicht TLS)</li>
<li>Entry-Node kenn den Client</li>
<li>Wer Entry- und Exit-Node kennt kann den Nutzer relativ leicht deanonymisieren</li>
</ul>
</section></section>
<section><section id="hidden-services" class="titleslide slide level1"><h1>Hidden Services</h1></section><section id="was-ist-ein-hidden-service" class="slide level2">
<h2>Was ist ein Hidden Service</h2>
<ul>
<li>Kurz: ein Dienst, der nur innerhalb des Tor-Netzwerkes erreichbar ist und damit ein „Darknet“ bildet</li>
<li>Vorbehaltlich:
<ul>
<li>Es gibt Web2Tor Proxies</li>
<li>„Darknet“ deswegen weil es innerhalb von Tor Suchmaschinen gibt</li>
<li>Inhaltsdaten werden noch immer nicht anonymisiert</li>
</ul></li>
</ul>
</section><section id="wie-funktioniert-ein-hs" class="slide level2">
<h2>Wie funktioniert ein HS</h2>
<ol type="1">
<li>Server erstellt einen Service-Descriptor aus Public Key und 3 Introduction Points (IPs)</li>
<li>Server sendet den Service-Descriptor in das Hidden Service Directory (HSDir)</li>
<li>Client wählt einen IP und einen Rendezvous Point (RP)</li>
<li>Client baut eine Verbindung zum RP auf</li>
</ol>
</section><section id="wie-funktioniert-ein-hs-1" class="slide level2">
<h2>Wie funktioniert ein HS</h2>
<ol start="5" type="1">
<li>Client sendet RP via IP an den Server</li>
<li>Server baut eine Verbindung zum RP auf</li>
<li>Client und Server können nun verschlüsselt kommunizieren</li>
</ol>
</section><section id="hs-vorteile" class="slide level2">
<h2>HS Vorteile</h2>
<ul>
<li>Dienste nicht aus dem Internet erreichbar</li>
<li>Dienste auch ohne Port Forwarding erreichbar</li>
<li>Kommunikation ist verschleiert</li>
<li>Kommunikation ist verschlüsselt</li>
</ul>
</section><section id="hs-nachteile" class="slide level2">
<h2>HS Nachteile</h2>
<ul>
<li>Dienste nicht ohne Tor erreichbar (nicht-trivial auf Smartphones, non-HTTP(s) unmöglich auf iOS)</li>
<li>Verbindung nur so gut wie der schlechteste Knoten</li>
<li>Keine ACLs, wer den Service-Namen kennt kommt hin</li>
<li>TLS fast nur Self-Signed oder teuer möglich</li>
<li>HS Namen unmöglich zu merken (mit HSv3 noch schlimmer)</li>
</ul>
</section></section>
<section><section id="demo-time" class="titleslide slide level1"><h1>Demo Time!</h1></section><section id="demo" class="slide level2">
<h2>Demo</h2>
<ol type="1">
<li>Web-Service aufsetzen</li>
<li>SSH-Service aufsetzen</li>
<li>beides via Hidden Services erreichbar machen</li>
<li>Web-Service via Tor Browser testen</li>
<li>SSH-Service via Linux und Android testen</li>
</ol>
</section></section>
<section><section id="links" class="titleslide slide level1"><h1>Links</h1></section><section id="allgemein" class="slide level2">
<h2>Allgemein</h2>
<ul>
<li>Design documents: https://www.torproject.org/docs/documentation.html.en#DesignDoc</li>
<li>Statistiken zu <code>.onion</code> Services: https://metrics.torproject.org/hidserv-dir-onions-seen.html</li>
<li>Liste von Tor Hidden Services: https://en.wikipedia.org/wiki/List_of_Tor_hidden_services</li>
<li>Tor2web (Onion to Clearnet): https://www.tor2web.org/</li>
<li>Orbot: https://guardianproject.info/apps/orbot/</li>
</ul>
</section><section id="konfiguration" class="slide level2">
<h2>Konfiguration</h2>
<ul>
<li>Tor: https://www.torproject.org/docs/documentation.html.en</li>
<li>Installation unter Debian/Ubuntu: https://www.torproject.org/docs/debian.html.en</li>
<li>Tor Hidden Services: https://www.torproject.org/docs/tor-onion-service.html.en</li>
<li>Bridges: https://www.torproject.org/docs/bridges.html.en</li>
</ul>
</section><section id="hidden-services-1" class="slide level2">
<h2>Hidden Services</h2>
<ul>
<li>Facebook: https://facebookcorewwwi.onion</li>
<li>DuckDuckGo: https://3g2upl4pq6kufc4m.onion</li>
<li>OnionDir: http://dirnxxdraygbifgc.onion</li>
<li>TORCH: http://xmh57jrzrnw6insl.onion/</li>
</ul>
</section></section>
    </div>
  </div>

  <script src="reveal.js//lib/js/head.min.js"></script>
  <script src="reveal.js//js/reveal.js"></script>

  <script>

      // Full list of configuration options available at:
      // https://github.com/hakimel/reveal.js#configuration
      Reveal.initialize({

        // Optional reveal.js plugins
        dependencies: [
          { src: 'reveal.js//lib/js/classList.js', condition: function() { return !document.body.classList; } },
          { src: 'reveal.js//plugin/zoom-js/zoom.js', async: true },
              { src: 'reveal.js//plugin/notes/notes.js', async: true }
        ]
      });
    </script>
    </body>
</html>