Browse Source

Initial import

master
juga 9 months ago
commit
da04b5e709
18 changed files with 1034 additions and 0 deletions
  1. +9
    -0
      README.md
  2. BIN
      images/6-Figure3-1.png
  3. BIN
      images/Comparative.png
  4. +330
    -0
      images/Onion_diagram.svg
  5. BIN
      images/Red_de_mezcla.png
  6. BIN
      images/batch_reorder.gif
  7. BIN
      images/htw3.png
  8. BIN
      images/mixmaster.png
  9. BIN
      images/mixminion.png
  10. +66
    -0
      images/mixnet_gns_components.svg
  11. BIN
      images/mixnet_panoramix.png
  12. BIN
      images/nym_mixnet.png
  13. BIN
      images/processing_sphinx.png
  14. BIN
      images/stratified_topology.jpeg
  15. +72
    -0
      index.html
  16. +557
    -0
      slides.md
  17. BIN
      videos/cp_broken.mp4
  18. BIN
      videos/padding.mp4

+ 9
- 0
README.md View File

@ -0,0 +1,9 @@
Mixnet slides (2021-01)
=======================
To "see" the slides, install npm (https://www.npmjs.com/), download
https://reveal.js, copy or link the content of this repo into it and run:
```
npm start
```

BIN
images/6-Figure3-1.png View File

Before After
Width: 888  |  Height: 246  |  Size: 31 KiB

BIN
images/Comparative.png View File

Before After
Width: 974  |  Height: 1212  |  Size: 164 KiB

+ 330
- 0
images/Onion_diagram.svg View File

@ -0,0 +1,330 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
width="875"
height="575"
id="svg2">
<defs
id="defs4">
<marker
refX="0"
refY="0"
orient="auto"
style="overflow:visible"
id="Arrow2Lend">
<path
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path11195" />
</marker>
<linearGradient
id="linearGradient8094">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop8096" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop8098" />
</linearGradient>
<linearGradient
id="linearGradient7114">
<stop
style="stop-color:#800000;stop-opacity:1"
offset="0"
id="stop7116" />
<stop
style="stop-color:#ff8181;stop-opacity:1"
offset="1"
id="stop7118" />
</linearGradient>
<linearGradient
id="linearGradient6134">
<stop
style="stop-color:#008000;stop-opacity:1"
offset="0"
id="stop6136" />
<stop
style="stop-color:#81ff81;stop-opacity:1"
offset="1"
id="stop6138" />
</linearGradient>
<linearGradient
id="linearGradient5152">
<stop
style="stop-color:#000080;stop-opacity:1"
offset="0"
id="stop5154" />
<stop
style="stop-color:#8181ff;stop-opacity:1"
offset="1"
id="stop5156" />
</linearGradient>
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient5158"
xlink:href="#linearGradient5152"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,1,-1,0,550,50)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient5163"
xlink:href="#linearGradient6134"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.7142858,-1,0,600,100)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient6143"
xlink:href="#linearGradient7114"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.4285714,-1,0,650,150)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient7123"
xlink:href="#linearGradient8094"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.1428571,-1,0,700,200)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient8104"
xlink:href="#linearGradient8094"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-0.1428571,1,0,200,250)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient8109"
xlink:href="#linearGradient7114"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-0.4285714,1,0,150,300)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient8132"
xlink:href="#linearGradient6134"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-0.7142858,1,0,100,350)" />
<linearGradient
x1="0"
y1="275"
x2="350"
y2="275"
id="linearGradient8137"
xlink:href="#linearGradient5152"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1,1,0,50,400)" />
</defs>
<g
style="opacity:1"
id="layer1">
<path
d="M 500,50 L 100,50 C 72.4,50 50,128.4 50,225 C 50,321.6 72.4,400 100,400 L 500,400 C 472.4,400 450,321.6 450,225 C 450,128.4 472.4,50 500,50 z "
style="opacity:1;fill:url(#linearGradient5158);fill-opacity:1;stroke:none"
id="path3195" />
</g>
<g
style="opacity:1"
id="layer2">
<path
d="M 550,100 L 150,100 C 122.4,100 100,156 100,225 C 100,294 122.4,350 150,350 L 550,350 C 522.4,350 500,294 500,225 C 500,156 522.4,100 550,100 z "
style="opacity:1;fill:url(#linearGradient5163);fill-opacity:1;stroke:none"
id="path5161" />
</g>
<g
style="opacity:1;display:inline"
id="layer3">
<path
d="M 600,150 L 200,150 C 172.4,150 150,183.6 150,225 C 150,266.4 172.4,300 200,300 L 600,300 C 572.4,300 550,266.4 550,225 C 550,183.6 572.4,150 600,150 z "
style="opacity:1;fill:url(#linearGradient6143);fill-opacity:1;stroke:none"
id="path6141" />
</g>
<g
style="opacity:1;display:inline"
id="layer4">
<path
d="M 650,200 L 250,200 C 222.4,200 200,211.2 200,225 C 200,238.8 222.4,250 250,250 L 650,250 C 622.4,250 600,238.8 600,225 C 600,211.2 622.4,200 650,200 z "
style="opacity:1;fill:url(#linearGradient7123);fill-opacity:1;stroke:none"
id="path7121" />
</g>
<g
style="opacity:0.66699997"
id="layer5">
<path
d="M 250,250 L 650,250 C 677.6,250 700,238.8 700,225 C 700,211.2 677.6,200 650,200 L 250,200 C 277.6,200 300,211.2 300,225 C 300,238.8 277.6,250 250,250 z "
style="opacity:1;fill:url(#linearGradient8104);fill-opacity:1;stroke:none"
id="path8102" />
</g>
<g
style="opacity:0.66699997;display:inline"
id="layer6">
<path
d="M 200,300 L 600,300 C 627.6,300 650,266.4 650,225 C 650,183.6 627.6,150 600,150 L 200,150 C 227.6,150 250,183.6 250,225 C 250,266.4 227.6,300 200,300 z "
style="opacity:1;fill:url(#linearGradient8109);fill-opacity:1;stroke:none"
id="path8107" />
</g>
<g
style="opacity:0.66699997;display:inline"
id="layer7">
<path
d="M 150,350 L 550,350 C 577.6,350 600,294 600,225 C 600,156 577.6,100 550,100 L 150,100 C 177.6,100 200,156 200,225 C 200,294 177.6,350 150,350 z "
style="opacity:1;fill:url(#linearGradient8132);fill-opacity:1;stroke:none"
id="path8130" />
</g>
<g
style="opacity:0.66699997;display:inline"
id="layer8">
<path
d="M 100,400 L 500,400 C 527.6,400 550,321.6 550,225 C 550,128.4 527.6,50 500,50 L 100,50 C 127.6,50 150,128.4 150,225 C 150,321.6 127.6,400 100,400 z "
style="opacity:1;fill:url(#linearGradient8137);fill-opacity:1;stroke:none"
id="path8135" />
</g>
<g
id="layer12">
<text
x="699.00153"
y="220.00809"
style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
id="text9130"
xml:space="preserve"><tspan
x="699.00153"
y="220.00809"
style="font-size:24px"
id="tspan9132">Message</tspan></text>
<text
x="633.98853"
y="170.00793"
style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#800000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
id="text9126"
xml:space="preserve"><tspan
x="633.98853"
y="170.00793"
style="font-size:24px;fill:#800000"
id="tspan9128">Router C Key</tspan></text>
<text
x="577.13354"
y="120.00825"
style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text9122"
xml:space="preserve"><tspan
x="577.13354"
y="120.00825"
style="font-size:24px;fill:#008000"
id="tspan9124">Router B Key</tspan></text>
<text
x="522.64453"
y="70.007813"
style="font-size:12px;font-style:normal;font-weight:normal;opacity:1;fill:#000080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text9118"
xml:space="preserve"><tspan
x="522.64453"
y="70.007813"
style="font-size:24px;fill:#000080"
id="tspan9120">Router A Key</tspan></text>
<text
x="49.417969"
y="499.66016"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text9183"
xml:space="preserve"><tspan
x="49.417969"
y="499.66016"
style="font-size:24px"
id="tspan9185">Source</tspan></text>
<text
x="549.18726"
y="424.66016"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text10166"
xml:space="preserve"><tspan
x="549.18726"
y="424.66016"
style="font-size:24px;text-align:end;text-anchor:end;fill:#000080"
id="tspan10168">Router A</tspan></text>
<text
x="600.68713"
y="449.66016"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text10180"
xml:space="preserve"><tspan
x="600.68713"
y="449.66016"
style="font-size:24px;text-align:end;text-anchor:end;fill:#008000"
id="tspan10182">Router B</tspan></text>
<text
x="650.32428"
y="474.66016"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#800000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text10184"
xml:space="preserve"><tspan
x="650.32428"
y="474.66016"
style="font-size:24px;text-align:end;text-anchor:end;fill:#800000"
id="tspan10186">Router C</tspan></text>
<text
x="701.06213"
y="499.66016"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
id="text10192"
xml:space="preserve"><tspan
x="701.06213"
y="499.66016"
style="font-size:24px;text-align:end;text-anchor:end"
id="tspan10194">Destination</tspan></text>
<g
id="g2219">
<path
d="M 51.375,511.5625 L 51.375,514.3125 L 696.375,514.3125 L 696.375,511.5625 L 51.375,511.5625 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.73842454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path10200" />
<path
d="M 667.08836,500.7951 L 700.00002,512.89755 L 667.08836,525 C 672.34626,517.85472 672.31597,508.07874 667.08836,500.7951 z "
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path2225" />
</g>
<path
d="M 48,226 L 48,499 L 50,499 L 50,226 L 48,226 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path11369" />
<path
d="M 700,226 L 700,499 L 702,499 L 702,226 L 700,226 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13310" />
<path
d="M 650,226 L 650,474 L 652,474 L 652,226 L 650,226 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13312" />
<path
d="M 600,226 L 600,449 L 602,449 L 602,226 L 600,226 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13314" />
<path
d="M 550,226 L 550,424 L 552,424 L 552,226 L 550,226 z "
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13316" />
</g>
</svg>

BIN
images/Red_de_mezcla.png View File

Before After
Width: 1308  |  Height: 786  |  Size: 106 KiB

BIN
images/batch_reorder.gif View File

Before After
Width: 600  |  Height: 300  |  Size: 1.0 MiB

BIN
images/htw3.png View File

Before After
Width: 510  |  Height: 326  |  Size: 34 KiB

BIN
images/mixmaster.png View File

Before After
Width: 716  |  Height: 302  |  Size: 80 KiB

BIN
images/mixminion.png View File

Before After
Width: 716  |  Height: 305  |  Size: 66 KiB

+ 66
- 0
images/mixnet_gns_components.svg View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="465px" preserveAspectRatio="none" style="width:1304px;height:465px;" version="1.1" viewBox="0 0 1304 465" width="1304px" zoomAndPan="magnify"><defs><filter height="300%" id="fj0jd1y3t2hoy" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[3daa8d6928fc49ee032578c2e238d80e]
entity Authority--><rect fill="#FEFECE" filter="url(#fj0jd1y3t2hoy)" height="192.9688" style="stroke: #A80036; stroke-width: 1.5;" width="560" x="306" y="8"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="846" y="13"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="844" y="15"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="844" y="19"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="61" x="321" y="40.9951">Authority</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="321" y="57.292">Has the records:</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="321" y="73.5889">- PKEY, n1, 1111</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="321" y="89.8857">- PKEY, n2, 2221</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="152" x="321" y="106.1826">- TXT, mixnet, "n1, n2"</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="0" x="325" y="122.4795"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="276" x="321" y="138.7764">Can query the records (in its root zone):</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="520" x="321" y="155.0732">- n1.root -&gt; TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="184" x="321" y="171.3701">- n2.root -&gt; A, n2, 10.0.0.2</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="251" x="321" y="187.667">- mixnet.root -&gt; TXT, mixnet, "n1,n2"</text><!--MD5=[f042970fa631b194e0ab6c1248938917]
entity N1--><rect fill="#FEFECE" filter="url(#fj0jd1y3t2hoy)" height="176.6719" style="stroke: #A80036; stroke-width: 1.5;" width="628" x="6" y="278"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="614" y="283"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="612" y="285"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="612" y="289"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="19" x="21" y="310.9951">N1</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="21" y="327.292">Has the records:</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="157" x="21" y="343.5889">- PKEY, authority, 0000</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="445" x="21" y="359.8857">- TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="0" x="25" y="376.1826"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="276" x="21" y="392.4795">Can query the records (in its root zone):</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="520" x="21" y="408.7764">- n1.root -&gt; TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="315" x="21" y="425.0732">- mixnet.authority.root -&gt; TXT, mixnet, "n1,n2"</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="588" x="21" y="441.3701">- n2.authority.root -&gt; TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB</text><!--MD5=[4b5ab69de11007997fdc27e7483449f4]
entity N2--><rect fill="#FEFECE" filter="url(#fj0jd1y3t2hoy)" height="176.6719" style="stroke: #A80036; stroke-width: 1.5;" width="624" x="669" y="278"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="1273" y="283"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1271" y="285"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1271" y="289"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="19" x="684" y="310.9951">N2</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="115" x="684" y="327.292">Has the records:</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="157" x="684" y="343.5889">- PKEY, authority, 0000</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="449" x="684" y="359.8857">- TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="0" x="688" y="376.1826"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="276" x="684" y="392.4795">Can query the records (in its root zone):</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="524" x="684" y="408.7764">- n2.root -&gt; TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="315" x="684" y="425.0732">- mixnet.authority.root -&gt; TXT, mixnet, "n1,n2"</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="584" x="684" y="441.3701">- n1.authority.root -&gt; TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA</text><!--MD5=[a3bcdd42f3b359be92cba7c757fb6510]
link Authority to N1--><path d="M410.6322,201.0822 C399.6145,210.4355 389.2545,220.4158 380,231 C369.1803,243.3743 360.024,258.0118 352.3748,273.0122 " fill="none" id="Authority-&gt;N1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="350.0491,277.677,357.6444,271.4072,352.28,273.2023,350.4849,267.8378,350.0491,277.677" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="46" x="381" y="244.0669">n1.root</text><!--MD5=[478e86cab0b04192df6bcbe64a4b087d]
link N1 to Authority--><path d="M409.9685,277.8844 C433.801,254.4103 459.6996,228.9011 484.1159,204.852 " fill="none" id="N1-&gt;Authority" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="487.7072,201.3147,478.4883,204.7805,484.145,204.8233,484.1021,210.48,487.7072,201.3147" style="stroke: #A80036; stroke-width: 1.0;"/><ellipse cx="459" cy="240.0664" fill="none" rx="3" ry="3" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="466" y="244.0669">.authority.root</text><!--MD5=[327723372fcc9f4d0a7402045980df41]
link Authority to N2--><path d="M731.6808,201.1288 C768.1271,225.3033 807.1069,251.1582 843.1595,275.0716 " fill="none" id="Authority-&gt;N2" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="847.5413,277.978,842.2523,269.6698,843.3746,275.2142,837.8302,276.3364,847.5413,277.978" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="46" x="796" y="244.0669">n2.root</text><!--MD5=[4ffae381981a331506b36106f3627a07]
link N2 to Authority--><path d="M904.8442,277.7257 C888.1145,261.0162 869.7606,244.5566 851,231 C837.8936,221.5291 823.9668,212.4632 809.6241,203.8473 " fill="none" id="N2-&gt;Authority" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="805.1601,201.1878,810.8446,209.2306,809.4555,203.7469,814.9392,202.3579,805.1601,201.1878" style="stroke: #A80036; stroke-width: 1.0;"/><ellipse cx="877" cy="240.0664" fill="none" rx="3" ry="3" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="884" y="244.0669">.authority.root</text><!--MD5=[fc38f41c19e9cde3d7843d8ea3b407f8]
@startuml
skinparam componentStyle rectangle
component Authority [
Authority
Has the records:
- PKEY, n1, 1111
- PKEY, n2, 2221
- TXT, mixnet, "n1, n2"
Can query the records (in its root zone):
- n1.root -> TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA
- n2.root -> A, n2, 10.0.0.2
- mixnet.root -> TXT, mixnet, "n1,n2"
]
component N1 [
N1
Has the records:
- PKEY, authority, 0000
- TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA
Can query the records (in its root zone):
- n1.root -> TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA
- mixnet.authority.root -> TXT, mixnet, "n1,n2"
- n2.authority.root -> TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB
]
component N2 [
N2
Has the records:
- PKEY, authority, 0000
- TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB
Can query the records (in its root zone):
- n2.root -> TXT, n2, email=root@n2.pep.example;layer=1;openpgp=BBBB
- mixnet.authority.root -> TXT, mixnet, "n1,n2"
- n1.authority.root -> TXT, n1, email=root@n1.pep.example;layer=1;openpgp=AAAA
]
[Authority] - -> [N1] : n1.root
[Authority] - -> [N2] : n2.root
[N1] - -> [Authority] : *.authority.root
[N2] - -> [Authority] : *.authority.root
@enduml
PlantUML version 1.2020.02(Sun Mar 01 10:22:07 GMT 2020)
(GPL source distribution)
Java Runtime: Java(TM) SE Runtime Environment
JVM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 1.8.0_241-b07
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>

BIN
images/mixnet_panoramix.png View File

Before After
Width: 789  |  Height: 428  |  Size: 205 KiB

BIN
images/nym_mixnet.png View File

Before After
Width: 1281  |  Height: 677  |  Size: 186 KiB

BIN
images/processing_sphinx.png View File

Before After
Width: 1165  |  Height: 752  |  Size: 66 KiB

BIN
images/stratified_topology.jpeg View File

Before After
Width: 700  |  Height: 330  |  Size: 24 KiB

+ 72
- 0
index.html View File

@ -0,0 +1,72 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>pEp Mixnet project</title>
<link rel="stylesheet" href="dist/reset.css">
<link rel="stylesheet" href="dist/reveal.css">
<link rel="stylesheet" href="dist/theme/black.css" id="theme">
<!-- Theme used for syntax highlighted code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="slides.md">
</section>
</div>
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<!-- <script src="plugin/tts_min/tts_min_reveal.js"></script> -->
<script>
// More info about initialization & config:
// - https://revealjs.com/initialization/
// - https://revealjs.com/config/
Reveal.initialize({
hash: true,
totalTime: 300,
controls: true,
controlsTutorial: true,
help: true,
// showNotes: "separate-page",
width: 960,
height: 700,
slideNumber: 'c/t',
// overview: true,
// transition: 'slide', // none/fade/slide/convex/concave/zoom
autoPlayMedia: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ],// More info https://github.com/hakimel/reveal.js#dependencies
// dependencies: [
// { src: 'plugin/tts_min/tts_min_reveal.js', async: false} // Add text to speech for Chrome, FF using default voice.
// ]
});
Reveal.addEventListener( 'ready', function( event ) {
// Add this if you want to read the opening slide.
// Other eventlisteners defined in tts_min_reveal.js handle slidechanged and fragmentshown events
var thisSlide = Reveal.getCurrentSlide();
tts.readNotes = true; //set to true to read text content of any <aside class="notes">text content</aside> tag in a slide section
if (tts.On) {
// Read the innerText for the listed elements of current slide after waiting 1 second to allow transitions to conclude.
// setTimeout(function(){tts.ReadVisElmts(thisSlide,"h1","h2","h3","p","li");}, 1000);
// Read the textContent for the listed elements of the current slide, even hidden ones, after 1 second. In this case the notes class.
if (tts.readNotes) setTimeout(function(){tts.ReadAnyElmts(thisSlide,".notes");}, 1000);
}
} );
Reveal.configure({
keyboard: {
81: function() {tts.Synth.cancel()}, // press q to cancel speaking and clear speech queue.
84: function() {tts.ToggleSpeech()} // press t to toggle speech on/off
} });
</script>
</body>
</html>

+ 557
- 0
slides.md View File

@ -0,0 +1,557 @@
Mix networks
============
---
Anonymity
---------
~= unlinkability
- sender anonymity
- receiver anonymity
- location anonymity
- third party anonymity
~= unobservability
---
Adversaries
-----------
- Passive adversary
- Oberving both ends
- Active adversary
- Observing both ends
---
Onion routing versus Mix networks
----------------------------------
---
Onion routing
-------------
![image](/images/Onion_diagram.svg)
---
Tor (The Onion Router)
----------------------
![image](images/htw3.png)
---
Mix networks
------------
![image](images/Red_de_mezcla.png)
---
Latency
-------
- Mix networks are not suitable for:
- Web browsing
- Real time messaging
- Suitable for:
- Email
- Cryptocurrency transactions
- Voting
---
History
-------
---
Anonymous remailers
---------------------
---
Cypherpunks remailer
--------------------
(Type I)
---------
- 1990s
- David Chaum
- OpenPGP
- SMTP / POP3 / MIME format
- Initially no mixing
---
Cypherpunks remailer
--------------------
Weaknesses
-----------
- Flooding attacks
- Time and size analysis
- Replay attacks
---
Type II or Mixmaster
--------------------
- 1995
- Lance Cottrell
- List of servers, pingers
- Mixmaster packet format
- Message pool
- Cover traffic, dummy packets
- No OpenPGP for nodes
---
Type II or Mixmaster (2)
-------------------------
![image](images/mixmaster.png)
---
Mixmaster weaknesses
--------------------
- Partition attacks
- Replay attacks
---
Anonymity for 2015: Len Sassaman in 24C3, 2007
----------------------------------------------
<video data-autoplay src="videos/cp_broken.mp4"></video>
---
Type III or Mixminion
---------------------
- Single-Use Replay Blocks (SURBs)
- Directory servers
- TLS
- Key rotation
---
Type III or Mixminion (2)
-------------------------
![image](images/mixminion.png)
---
Batch and reorder
-----------------
![image](images/batch_reorder.gif)
---
Limitations of remailers
------------------------
- Scale poorly
- Time-consuming public key operations
- Size of anonymity is the size of the batch
- Traffic confirmation attacks
- Active attacks
- Spam
---
Spam
----
- SPF
- DKIM
- DMARC
---
"Open" vs "Close" system
------------------------
![image](images/openvsclosesystem1.svg)
---
Modern mix networks
-------------------
- Loopix system
- Sphinx packet format
---
Loopix
------
---
Stratified topology
-------------------
- Low-latency
- Optimal for anonymity and scalability
- Mix nodes arranged in layers
- Path is compossed by nodes of each layer
![image](images/stratified_topology.jpeg)
---
Stop-and-Go-MIXes
-----------------
- Each packet is delayed before being sent
- End-to-end latency of the packet
![image](images/6-Figure3-1.png)
---
Loopix (2)
----------
- Unobservability
---
Sphinx
------
- No time-consuming public-key operations
![image](images/processing_sphinx.png)
---
Sphinx: A Compact and Provably Secure Mix Format, Ian Goldberg, 2009
------------------------------------------------------------------------
<video>
<source data-src="videos/padding.mp4" type="video/mp4" />
</video>
---
Katzenpost
----------
- Sphinx
- Loopix
- 2017
- AGPL
- Mail proxy
---
Katzenpost (2)
--------------
- Providers
---
Katzenpost (3)
--------------
Pros:
- third party untraceability
- better scalability
- predictable delays
- Email proxy
---
Katzenpost (4)
--------------
Cons:
- License
- Devs do not like the Email proxy
- No production network
---
Nymtech
----------
- 2019
- Apache2
- Not for Email
- Testing network
---
Nym mixnet
----------
![image](images/nym_mixnet.png)
---
pEp Mixnet
----------
- Cypherpunk mix network
- OpenPGP using pEp Engine
- Nodes/mixes are SMTP servers
---
Goals
------------
- Hide metadata (Email headers)
- Unlinkability to a third party observer
- No receiver nor sender anonymity
- Maybe compatibility in the future with Mixmaster network
---
Who are the users
-----------------
- only pEp clients
- nodes/mixes run by volunteers
---
Prototype
---------
https://gitea.pep.foundation/pEp.foundation/pEpPythonMixnet/
---
Encryption layers
-----------------
```text
$ docker exec alice.whatever.example cat /root/log/mixnet.log
Created identity Alice Lovelace <alice@openpgp.example>
Setting my own identity to: Alice Lovelace <alice@openpgp.example>, EB85BB5FA33A75E15E944E63F231550C4F47E38E.
Set my own identity to: Alice Lovelace <alice@openpgp.example>, EB85BB5FA33A75E15E944E63F231550C4F47E38E
Created identity Bob Babagge <bob@openpgp.example>
Message encrypted for Bob Babagge <bob@openpgp.example>.
Created identity n1 <root@n1.pep.example>
Created identity n2 <root@n2.pep.example>
Created identity n3 <root@n3.pep.example>
Message from Alice Lovelace <alice@openpgp.example> encrypted to n3 <root@n3.pep.example>.
Message from Alice Lovelace <alice@openpgp.example> encrypted to n2 <root@n2.pep.example>.
Message from Alice Lovelace <alice@openpgp.example> encrypted to n1 <root@n1.pep.example>.
Sending email from: Alice Lovelace <alice@openpgp.example>, to: n1 <root@n1.pep.example>, via localhost:25
$ docker exec alice.whatever.example cat /var/log/mail.log
Dec 4 14:19:44 whatever postfix/qmgr[113]: CF94D2813CE: from=<alice@openpgp.example>, size=21035, nrcpt=1 (queue active)
Dec 4 14:19:44 whatever postfix/smtpd[119]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:44 whatever postfix/smtp[124]: CF94D2813CE: to=<root@n1.pep.example>, relay=n1.pep.example[172.19.0.3]:25, delay=0.12, delays=0.01/0.02/0.06/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as E9F4E2813D7)
Dec 4 14:19:44 whatever postfix/qmgr[113]: CF94D2813CE: removed
$ docker exec n1.pep.example cat /var/log/mail.log
Dec 4 14:19:44 n1 postfix/qmgr[116]: E9F4E2813D7: from=<alice@openpgp.example>, size=21253, nrcpt=1 (queue active)
Dec 4 14:19:44 n1 postfix/smtpd[117]: disconnect from alice.whatever.example.peppythonmixnet_default[172.19.0.9] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:45 n1 postfix/smtpd[117]: connect from localhost[127.0.0.1]
Dec 4 14:19:45 n1 postfix/smtpd[117]: D42C02813E5: client=localhost[127.0.0.1]
Dec 4 14:19:45 n1 postfix/cleanup[121]: D42C02813E5: message-id=<20201204141945.D42C02813E5@n1.pep.example>
Dec 4 14:19:45 n1 postfix/qmgr[116]: D42C02813E5: from=<alice@openpgp.example>, size=13205, nrcpt=1 (queue active)
Dec 4 14:19:45 n1 postfix/smtpd[117]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:45 n1 postfix/pipe[122]: E9F4E2813D7: to=<root@n1.pep.example>, relay=remailer, delay=1, delays=0.01/0.01/0/0.97, dsn=2.0.0, status=sent (delivered via remailer service (User home /home/remailer/remailer _[32mINFO:mixnet.common:Imported key <_io.TextIOWrapper name='/pep))
Dec 4 14:19:45 n1 postfix/qmgr[116]: E9F4E2813D7: removed
Dec 4 14:19:45 n1 postfix/smtp[124]: D42C02813E5: to=<root@n2.pep.example>, relay=n2.pep.example[172.19.0.4]:25, delay=0.11, delays=0.01/0.02/0.06/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as ED7EF2813EC)
Dec 4 14:19:45 n1 postfix/qmgr[116]: D42C02813E5: removed
$ docker exec n2.pep.example cat /var/log/mail.log
Dec 4 14:19:45 n2 postfix/qmgr[116]: ED7EF2813EC: from=<alice@openpgp.example>, size=13413, nrcpt=1 (queue active)
Dec 4 14:19:45 n2 postfix/smtpd[117]: disconnect from n1.pep.example.peppythonmixnet_default[172.19.0.3] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:48 n2 postfix/smtpd[117]: connect from localhost[127.0.0.1]
Dec 4 14:19:48 n2 postfix/smtpd[117]: B46E92813FA: client=localhost[127.0.0.1]
Dec 4 14:19:48 n2 postfix/cleanup[121]: B46E92813FA: message-id=<20201204141948.B46E92813FA@n2.pep.example>
Dec 4 14:19:48 n2 postfix/qmgr[116]: B46E92813FA: from=<alice@openpgp.example>, size=7519, nrcpt=1 (queue active)
Dec 4 14:19:48 n2 postfix/smtpd[117]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:48 n2 postfix/pipe[122]: ED7EF2813EC: to=<root@n2.pep.example>, relay=remailer, delay=2.8, delays=0.02/0.01/0/2.8, dsn=2.0.0, status=sent (delivered via remailer service (User home /home/remailer/remailer _[32mINFO:mixnet.common:Imported key <_io.TextIOWrapper name='/pep))
Dec 4 14:19:48 n2 postfix/qmgr[116]: ED7EF2813EC: removed
Dec 4 14:19:48 n2 postfix/smtp[124]: B46E92813FA: to=<root@n3.pep.example>, relay=n3.pep.example[172.19.0.2]:25, delay=0.19, delays=0.01/0.12/0.04/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as E0FF2281401)
Dec 4 14:19:48 n2 postfix/qmgr[116]: B46E92813FA: removed
$ docker exec n3.pep.example cat /var/log/mail.log
Dec 4 14:19:48 n3 postfix/qmgr[116]: E0FF2281401: from=<alice@openpgp.example>, size=7727, nrcpt=1 (queue active)
Dec 4 14:19:48 n3 postfix/smtpd[117]: disconnect from n2.pep.example.peppythonmixnet_default[172.19.0.4] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:51 n3 postfix/smtpd[117]: connect from localhost[127.0.0.1]
Dec 4 14:19:51 n3 postfix/smtpd[117]: 0457B28140F: client=localhost[127.0.0.1]
Dec 4 14:19:51 n3 postfix/cleanup[121]: 0457B28140F: message-id=<20201204141951.0457B28140F@n3.pep.example>
Dec 4 14:19:51 n3 postfix/qmgr[116]: 0457B28140F: from=<alice@openpgp.example>, size=3378, nrcpt=1 (queue active)
Dec 4 14:19:51 n3 postfix/smtpd[117]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Dec 4 14:19:51 n3 postfix/pipe[122]: E0FF2281401: to=<root@n3.pep.example>, relay=remailer, delay=2.2, delays=0.01/0.01/0/2.2, dsn=2.0.0, status=sent (delivered via remailer service (User home /home/remailer/remailer _[32mINFO:mixnet.common:Imported key <_io.TextIOWrapper name='/pep))
Dec 4 14:19:51 n3 postfix/qmgr[116]: E0FF2281401: removed
Dec 4 14:19:51 n3 postfix/smtp[124]: 0457B28140F: to=<bob@openpgp.example>, relay=openpgp.example[172.19.0.8]:25, delay=0.12, delays=0.01/0.02/0.07/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 202D5281416)
Dec 4 14:19:51 n3 postfix/qmgr[116]: 0457B28140F: removed
$ docker exec bob.openpgp.example cat /var/mail/root
From alice@openpgp.example Fri Dec 4 14:19:51 2020
Return-Path: <alice@openpgp.example>
X-Original-To: bob@openpgp.example
Delivered-To: root@openpgp.example
Received: from n3.pep.example (n3.pep.example.peppythonmixnet_default [172.19.0.2])
by openpgp.example (Postfix) with ESMTP id 202D5281416
for <bob@openpgp.example>; Fri, 4 Dec 2020 14:19:51 +0000 (UTC)
Received: from n3.pep.example (localhost [127.0.0.1])
by n3.pep.example (Postfix) with ESMTP id 0457B28140F
for <bob@openpgp.example>; Fri, 4 Dec 2020 14:19:51 +0000 (UTC)
From: Alice Lovelace <alice@openpgp.example>
To: Bob Babagge <bob@openpgp.example>
Subject: =?utf-8?Q?p=E2=89=A1p?=
X-pEp-Version: 2.1
MIME-Version: 1.0
Content-Type: multipart/encrypted;
boundary="2979318c3fd4cca9350961f6385bf0af";
protocol="application/pgp-encrypted"
Message-Id: <20201204141951.0457B28140F@n3.pep.example>
Date: Fri, 4 Dec 2020 14:19:51 +0000 (UTC)
--2979318c3fd4cca9350961f6385bf0af
Content-Type: application/pgp-encrypted
Version: 1
--2979318c3fd4cca9350961f6385bf0af
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="msg.asc"
-----BEGIN PGP MESSAGE-----
wV4DR2b2udXyHrYSAQdAAM3o2Ec30JjaBiqY3OuPutPz1CGAPoTYH3e6RAK+h2gw
...
fwnunDc3lNgbDY7F
=ftrS
-----END PGP MESSAGE-----
--2979318c3fd4cca9350961f6385bf0af--
```
---
Mixing
------
- Random delays
---
Padding
-------
- Impossibility to predict final message size
---
Topology
--------
- Stratified
---
TLS
---
Metadata (headers) visible to:
- last node
- between last node and receiver
- receiver
---
Nodes/keys registration/discovery
---------------------------------
GNUnet Name System (GNS) triples:
```text
email=root@n1.pep.example;layer=1;opengpg=AAAA
```
---
GNS limitations
---------------
- REST API, no TLS
- REST API, no authentication
- Not a global system
---
GNS delegation
---------------
- Need of authorities
- Authority delegates node record resolution to nodes
- Node delegates other nodes record resolution to authority
---
GNS delegation (2)
------------------
![image](images/mixnet_gns_components.svg)
---
GNS registration
----------------
- How the new nodes joining the netwwork can tell the authority their keys?
---
GNS discovery
-------------
- asking the authority(s) the TXT "mixnet" record
```text
n1,n2
```
- asking the authority(s) the TXT records of the nodes
---
Comparative
-----------
![image](images/Comparative.png)
---
Questions for you
-----------------
- Which existing mixnet software would you choose?
- Which packet format would you choose?
- Why do you think that to the date, there is not any mix network other than
mixmaster and it has less than a dozen nodes?
---
Thanks!
-------
Slides made 100% with FLOSS and 💜
juga at pep dot foundation
2DA8 1D01 455C 3A00 3219 8850 F305 447A F806 D46B

BIN
videos/cp_broken.mp4 View File


BIN
videos/padding.mp4 View File


Loading…
Cancel
Save