Merkle-Hellman-Kryptosystem Algorithmus zur...
Transcript of Merkle-Hellman-Kryptosystem Algorithmus zur...
MERKLE-HELLMAN-KRYPTOSYSTEMAlgorithmus zur Entschlüsselung von Kryptotexten
Projektarbeit im Rahmen der Vorlesung Algorithm Engineering
WiSe 2015/16, Friedrich-Schiller-Universität Jena
Sebastian Brühl
2
Kryptosystem nach Merkle-Hellman
• 1978 von Ralph C. Merkle und Martin Hellman vorgestellt
• Hiding Information and Signatures in Trapdoor Knapsacks [1]
• basiert auf Untersummenproblem -> O(2n)
• Entschlüsselung bedeuted Berechnung eines Skalarproduktes
• empfohlene Schlüssellänge um ein Knacken der Verschlüsselung
in angemessener Zeit zu verhindern: n > 100
• 1976 – Cray-1 – 80 MFLOPS
• 2016 – raj – 4 TFLOPS
• Gilt die Aussage n > 100 heute noch?
3
Vektorisierung
Bedingung: ? = {0, 1}
6790
=
●? ? ? ? ? ? ? ? ? ?
2292 1089 211 1625 1283 599 759 315 2597 2463
Public Key
Kryptotext
Klartext
4
Vektorisierung
Bedingung: ? = {0, 1}
6790
=
●0 0 1 1 1 0 1 1 1 0
2292 1089 211 1625 1283 599 759 315 2597 2463
Public Key
Kryptotext
Klartext
5
Vektorisierung
Probleme
• Schlüssellängen n > 100 benötigen sehr große Zahlen (2200)
• Algorithmus in zwei Versionen
• _64: unsigned long long (vektorisierbar)
• _BN: boost::multiprecision::int_512_t (nicht vektorisierbar)
• Initialisierung/Allozierung des Testvektors
• Padding des Testvektors
6
Vektorisierung
• skalare Version: GNU Compiler
• vektorisierte Version: Intel Compiler + OpenMP/SIMD
1,0847
0,23080
0,2
0,4
0,6
0,8
1
1,2
skalar vektorisiert
Laufzeit in
Sekunden
7
Parallelisierung
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1
…
0
1
2
3
1024
for-Schleife
Hauptaufgabe des Algorithmus
• Testvektor ● Public Key = Kryptotext
• 2n voneinander unabhängige Iterationen, im Beispiel 210=1024
?
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1
…0
255
1 0 0 0 0 0 0 0 0 0
1 0 1 1 1 1 1 1 1 1
…
0 1 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1
…
511
1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
…
1024
256
768512
767
parallele for-Schleifen
• Problem: Abbruch bei Treffer -> omp cancel for
8
Parallelisierung
Parallelisierung mittels omp for
0
0,5
1
1,5
2
2,5
3
0
0,5
1
1,5
2
2,5
3
3,5
8 10 12 14 16 18 20
SPEED
UP
LA
UFZEIT
IN
S
SCHLÜSSELLÄNGE
Seriell Parallel Speedup
9
Verteilte Ausführung
• Merkle-Hellman ist eine Blockchiffre• jeder Block muss einzeln entschlüsselt werden• Verteilung der Blöcke auf verschiedene Knoten
173827820633687652372624452047340402030882221937893958511734521023872356418939085597090364389627364262981059221135046440247117475990107748665711044593982336475481416529010910714520788414159083012046649554111174443135439315902065428428215154146405706987961414368228039787904434979082798126805867157970945712079109491368153579913062443570815038298210976213795694513811374897094481784855885396337418574317731032706247758097529972562272159782548137519606286546903470925992160413351629756774223913931282503775067036655917747618068886063711916416668715956791072013372980365000799780756056231912669471404272013833375546208052710389895352526885028546982994426354812054399946016359004753116070612675535546961874807733704054194643823103193483850762825
1738278206336876523726244520473404020308822219378939585117345210238723564189390855970903643896273642629810592211350464402471
1747599010774866571104459398233647548141652901091071452078841415908301204664955411117444313543931590206542842821515414640570
698796141436822803978790443497908279812680586715797094571207910949136815357991306244357081503829821097621379569451381137489
709448178485588539633741857431773103270624775809752997256227215978254813751960628654690347092599216041335162975677422391393
1282503775067036655917747618068886063711916416668715956791072013372980365000799780756056231912669471404272013833375546208052
710389895352526885028546982994426354812054399946016359004753116070612675535546961874807733704054194643823103193483850762825
1 Knoten
6 Knoten
10
Verteilte Ausführung
Start
Daten Einlesen
0 2
0
1 3 4 5
Aufteilung in Blöcke
0 21 3 4 5
MPI Scatter
Berechnung
foreach Block
MPI Gather
Ausgabe
Ende
0 21 3 4 5
0
0 21 3 4 5
21 3 4 50
• Verteilung mittels MPI
• beispielsweise 6 Knoten
• Knoten 0 übernimmt Steuerung
• Alle Knoten sind an der
Berechnung beteiligt
11
Benchmark - Speedup
0
0,5
1
1,5
2
2,5
3
3,5
4
0
20
40
60
80
100
120
140
160
8 13 18 23 28
SPEED
UP
LA
UFZEIT
IN
S
SCHLÜSSELLÄNGE
_64 _BN MPI Speedup _64/MPI
• ca. 22*109 Operationen/s (MPI)• Laufzeit MPI bei einer Schlüssellänge von 100: 80*1012 Jahre• Alter des Universums: 14*109 Jahre
12
Quellcode: https://github.com/sblatgithub/knapsack
13
Quellen
[1] Ralph C. Merkle, Martin E. Hellman. “Hiding Information and Signatures in Trapdoor Knapsacks“In IEEE TRANSACTIONS ON INFORMATION THEORY, VOL: IT-24, NO. 5, SEPTEMBER 1978.