====== Welcher Verschlüsselungsalgorithmus ist der Beste? ====== Kurz gesagt, diese Frage ist sinnlos und nicht zu beantworten. Trotzdem stellt sich regelmäßig die Frage, insbesondere wenn es um Festplattenverschlüsselung geht. Man möchte einerseits so wenig wie möglich Geschwindigkeit der Festplatte einbüßen, andererseits so sicher wie möglich dabei sein. Dazu kommt, dass nicht jeder Rechner gleich ist in der Berechnung der einzelnen Verschlüsselungsverfahren. Gerade bei etwas älteren Rechner kann das deutlich spürbare Auswirkungen auf die Gesamtperformance eines PC haben, Grund genug sich vor der Auswahl des Cryptoalgorithmus Gedanken zu machen. Viele Menschen gehen an das Problem mit "viel hilft viel". Das ist nicht grundsätzlich falsch, aber kann wie oben schon geschrieben zu eher schlechten Ergebnissen führen. Ausserdem muss ein längerer Key nicht unbedingt bedeuten, dass die Verschlüsselung hinterher besser ist. Es gibt derzeit Hinweise in der Forschung, dass AES mit 256bit nicht so hart ist wie AES mit 128bit. Zwar gelten beide als ungebrochen, aber AES mit 128bit ist meist deutlich schneller und der Sicherheitszugewinn - scheint - derzeit bei 256bit nicht gegeben, wenn nicht sogar eine negative Auswirkung hat. Zitat Wikipedia: "Die Forscher Alex Biryukov, Dmitry Khovratovich und Ivica Nikolic veröffentlichten Mitte des Jahres 2009 einen Angriff mit verwandtem Schlüssel auf die AES-Varianten mit 192 und 256 Bit Schlüssellänge. Dabei nutzten sie Schwächen in der Schlüsselexpansion aus und konnten eine Komplexität von 2^119 erreichen. Damit ist die AES-Variante mit 256 Bit Schlüssellänge formal schwächer als die Variante mit 128 Bit Schlüssellänge. Für die Praxis hat dieser Angriff jedoch wenig Relevanz, denn AES bleibt weiterhin berechnungssicher." Neben AES gibt es noch zahlreiche andere Verschlüsselungsverfahren, die auch von Linux, BSD und anderen Betriebssystemen und Verschlüsselungstool (zum Beispiel Truecrypt) unterstützt werden. Von altertümlichen Verfahren wie DES oder 3DES rate ich grundsätzlich ab, diese gelten inzwischen als zu schwach und sie sind auch ganz schön langsam. Es ist auch nicht ratsam "exotische" Verfahren wie Cast oder RC6 zu verwenden, auch wenn diese Algorithmen als sicher gelten. Neben dem eigentlichen Algorithmus ist nämlich die Implementation, also wie das Verfahren in der Software umgesetzt wurde, extrem wichtig. Bei oft eingesetzten Verfahren wie Blowfish oder AES würden Fehler schneller auffallen und oft ist der Programmcode besser optimiert. Deswegen würde ich eine Auswahl zwischen den Verfahren Blowfish, AES und Twofish (Nachfolger von Blowfish) treffen. Leider ist Twofish oft nicht implementiert, so dass die Auswahl auf Blowfish und AES beschränkt ist. AES ist zwar härter als Blowfish, trotzdem gilt Blowfish auch auf absehbare Zeit als ungebrochen. Kommen wir zum eigentlichen Problem, der Auswahl des Verschlüsselungsverfahrens. Für eine wirklich aussagekräftige Analyse des eigenen Systems zur Feststellung der optimalen Performance spielen natürlich neben dem Verschlüsselungsverfahren noch weitere Aspekte eine Rolle, zum Beispiel Konfiguration der Festplatten, des Dateisystems und diverser Kernelparameter. Dort gibt es mit Sicherheit eine Menge Optimierungsmöglichkeiten, in der Praxis spielen diese Faktoren aber im Vergleich zur Auswahl des Verschlüsselungsverfahrens eine untergeordnete Rolle. Wer mag kann sich mit den Parametern beschäftigen, die hier gezeigte Methode ist ein schneller Weg, der in den allermeisten Fällen das richtige Ergebnis liefert. Für alles andere sind umfangreiche Messreihen mit verschiedenen Einstellungen nötig, die letztlich aber kaum bessere Ergebnisse liefern. Als Messinstrument dient uns OpenSSL, eine freie Verschlüsselungssoftware, die nicht nur viele Verschlüsselungs- und Hashalgorithmen kennt, sondern auch auf so gut wie allen Linux- und BSD-Systemen installiert ist. Damit lassen sich halbwegs übertragbare Ergebnisse erzielen. Dazu ruft man in einer Kommandozeile den folgenden Befehl auf. Um keine verfälschten Ergebnisse zu bekommen sollten gleichzeitig keine anderen Programme laufen. openssl speed OpenSSL testet jetzt die verschiedenen Algorithmen durch und zeigt sie in einer Tabelle an. Das kann einige Zeit dauern. ===== Hier einige Beispiele von verschiedenen Systemen ===== **Intel Pentium4 3GHz, FreeBSD 8.0** Ausgabe dmesg CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (2992.53-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0xf41 Stepping = 1 Features=0xbfebfbff Features2=0x441d AMD Features=0x100000 TSC: P-state invariant real memory = 2147483648 (2048 MB) avail memory = 2084769792 (1988 MB) ACPI APIC Table: FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs FreeBSD/SMP: 1 package(s) x 1 core(s) x 2 HTT threads cpu0 (BSP): APIC ID: 0 cpu1 (AP/HT): APIC ID: 1 The 'numbers' are in 1000s of bytes per second processed. type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 1955.68k 4083.96k 5766.54k 6346.14k 6326.80k mdc2 4178.32k 4731.00k 4657.65k 4589.07k 4336.85k md4 16404.32k 59289.61k 174717.11k 389323.97k 611710.56k md5 12417.01k 46684.50k 124867.03k 266369.34k 369262.31k hmac(md5) 12592.27k 44297.41k 130241.61k 260820.22k 364879.60k sha1 9353.89k 26448.15k 51389.63k 76535.07k 87090.81k rmd160 9008.00k 24529.34k 48742.85k 64461.71k 80266.14k rc4 89280.61k 103822.53k 108016.61k 109727.74k 111988.82k des cbc 48058.24k 43487.72k 55948.43k 48683.07k 59904.98k des ede3 17669.48k 20582.02k 21475.38k 18882.03k 12205.35k idea cbc 0.00 0.00 0.00 0.00 0.00 seed cbc 0.00 0.00 0.00 0.00 0.00 rc2 cbc 21338.07k 22768.75k 22032.71k 20954.35k 21695.22k rc5-32/12 cbc 131485.96k 152622.44k 163537.34k 168211.77k 156249.90k blowfish cbc 81805.83k 97161.03k 94527.46k 94002.09k 98645.32k cast cbc 81193.53k 83857.79k 87063.00k 85129.55k 82321.71k aes-128 cbc 31511.00k 32004.58k 32108.83k 34290.43k 33932.93k aes-192 cbc 27306.92k 27284.14k 32082.20k 29062.13k 30062.36k aes-256 cbc 23608.96k 24813.39k 24964.17k 26354.31k 27652.60k camellia-128 cbc 40286.00k 45087.30k 44451.81k 48125.53k 48405.46k camellia-192 cbc 34808.01k 36225.96k 36288.13k 36982.02k 36514.27k camellia-256 cbc 32053.90k 31700.82k 33720.50k 35449.27k 35743.26k sha256 7894.37k 18586.80k 32422.44k 39425.03k 42805.04k sha512 1761.12k 7133.89k 9902.12k 13671.61k 15510.61k aes-128 ige 31651.41k 35239.54k 48241.03k 51161.93k 50174.24k aes-192 ige 40056.61k 36220.91k 40987.14k 40561.29k 41305.05k aes-256 ige 34691.85k 37150.49k 38286.10k 36571.85k 35857.51k sign verify sign/s verify/s rsa 512 bits 0.001097s 0.000084s 911.5 11875.8 rsa 1024 bits 0.005097s 0.000251s 196.2 3984.1 rsa 2048 bits 0.032466s 0.000852s 30.8 1174.2 rsa 4096 bits 0.207341s 0.002987s 4.8 334.8 sign verify sign/s verify/s dsa 512 bits 0.000935s 0.001001s 1069.3 999.2 dsa 1024 bits 0.002435s 0.002984s 410.7 335.1 dsa 2048 bits 0.008046s 0.009869s 124.3 101.3 **Intel Dual-Xeon 3GHz, FreeBSD 8.0** Ausgabe dmesg CPU: Intel(R) Xeon(TM) CPU 3.06GHz (3056.82-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0xf27 Stepping = 7 Features=0xbfebfbff Features2=0x4400 real memory = 4294967296 (4096 MB) avail memory = 3409084416 (3251 MB) ACPI APIC Table: FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs FreeBSD/SMP: 2 package(s) x 1 core(s) x 2 HTT threads cpu0 (BSP): APIC ID: 0 cpu1 (AP/HT): APIC ID: 1 cpu2 (AP): APIC ID: 2 cpu3 (AP/HT): APIC ID: 3 The 'numbers' are in 1000s of bytes per second processed. type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 3000.48k 6447.17k 9101.38k 10150.77k 10503.78k mdc2 4384.20k 4969.67k 5153.06k 5198.67k 5184.73k md4 16512.82k 54680.56k 142102.17k 248378.97k 318272.23k md5 13407.64k 44381.67k 109867.88k 175823.31k 207314.44k hmac(md5) 11653.69k 38955.81k 100710.18k 170614.48k 211608.57k sha1 10104.76k 27014.46k 52660.03k 70178.75k 78105.75k rmd160 7341.95k 17798.00k 32888.54k 41748.16k 45308.61k rc4 100289.48k 111976.57k 115237.54k 116049.70k 115989.08k des cbc 51493.53k 51420.98k 51804.72k 51950.26k 51878.72k des ede3 20314.80k 20350.33k 20354.27k 20368.87k 20366.29k idea cbc 0.00 0.00 0.00 0.00 0.00 seed cbc 0.00 0.00 0.00 0.00 0.00 rc2 cbc 21678.66k 23165.08k 23036.31k 22947.06k 23075.06k rc5-32/12 cbc 107989.81k 105733.60k 107011.11k 106999.08k 107518.82k blowfish cbc 68401.14k 72132.58k 72689.89k 73066.40k 72987.95k cast cbc 70576.14k 75744.42k 76850.40k 77315.15k 74198.55k aes-128 cbc 61090.99k 62996.86k 65669.24k 66104.61k 66257.30k aes-192 cbc 53520.74k 55558.67k 57168.89k 57576.13k 57689.37k aes-256 cbc 47168.38k 49199.83k 49863.15k 50770.83k 50806.58k camellia-128 cbc 40716.95k 44749.10k 45644.49k 45294.92k 45463.63k camellia-192 cbc 34245.05k 34443.10k 34691.26k 34727.22k 34612.22k camellia-256 cbc 35647.66k 34689.23k 34700.87k 34424.34k 34623.42k sha256 7937.92k 16286.63k 26869.14k 31743.83k 33119.90k sha512 2719.55k 10882.20k 16355.09k 23204.16k 26802.23k aes-128 ige 59689.42k 63339.95k 64106.49k 64496.34k 64617.67k aes-192 ige 52310.53k 54987.04k 54847.95k 55959.83k 55976.62k aes-256 ige 46472.24k 48318.60k 49168.87k 49302.42k 49426.31k sign verify sign/s verify/s rsa 512 bits 0.000886s 0.000069s 1128.9 14502.8 rsa 1024 bits 0.004252s 0.000292s 235.2 3429.2 rsa 2048 bits 0.024968s 0.000683s 40.1 1463.1 rsa 4096 bits 0.164735s 0.002408s 6.1 415.4 sign verify sign/s verify/s dsa 512 bits 0.000704s 0.000801s 1419.6 1249.1 dsa 1024 bits 0.002022s 0.002395s 494.7 417.5 dsa 2048 bits 0.006731s 0.008179s 148.6 122.3 **Intel Atom N270, 1.6GHz, Ubuntu Netbook Edition 9.10** Ausgabe dmesg [ 0.073005] CPU0: Intel(R) Atom(TM) CPU N270 @ 1.60GHz stepping 02 [ 0.076001] Booting processor 1 APIC 0x1 ip 0x6000 [ 0.004000] Initializing CPU#1 [ 0.004000] Calibrating delay using timer specific routine.. 3191.93 BogoMIPS (lpj=6383863) [ 0.004000] CPU: L1 I cache: 32K, L1 D cache: 24K [ 0.004000] CPU: L2 cache: 512K [ 0.004000] CPU: Physical Processor ID: 0 [ 0.004000] CPU: Processor Core ID: 0 [ 0.004000] mce: CPU supports 5 MCE banks [ 0.004000] CPU1: Thermal monitoring enabled (TM1) [ 0.004000] x86 PAT enabled: cpu 1, old 0x7040600070406, new 0x7010600070106 [ 0.161003] CPU1: Intel(R) Atom(TM) CPU N270 @ 1.60GHz stepping 02 [ 0.161037] checking TSC synchronization [CPU#0 -> CPU#1]: passed. [ 0.164050] Brought up 2 CPUs [ 0.164057] Total of 2 processors activated (6383.67 BogoMIPS). [ 0.164128] CPU0 attaching sched-domain: [ 0.164134] domain 0: span 0-1 level SIBLING [ 0.164140] groups: 0 1 [ 0.164151] CPU1 attaching sched-domain: [ 0.164156] domain 0: span 0-1 level SIBLING [ 0.164161] groups: 1 0 The 'numbers' are in 1000s of bytes per second processed. type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 1064.59k 2310.36k 3254.44k 3631.92k 3736.75k mdc2 0.00 0.00 0.00 0.00 0.00 md4 8362.16k 29640.98k 89817.00k 175873.88k 263981.74k md5 7061.70k 25633.13k 79333.21k 167453.65k 247144.45k hmac(md5) 9702.08k 33971.16k 97535.74k 185090.73k 252152.49k sha1 6874.25k 22204.82k 55290.28k 87806.63k 106635.26k rmd160 6137.57k 18881.45k 43363.22k 64336.90k 75388.25k rc4 76188.40k 88091.57k 90980.44k 92361.70k 92386.65k des cbc 25281.30k 26663.42k 27110.83k 26365.95k 27205.63k des ede3 8964.57k 9163.11k 9220.86k 9222.53k 9237.85k idea cbc 0.00 0.00 0.00 0.00 0.00 seed cbc 0.00 0.00 0.00 0.00 0.00 rc2 cbc 10687.17k 11221.70k 11330.05k 11067.39k 11389.61k rc5-32/12 cbc 0.00 0.00 0.00 0.00 0.00 blowfish cbc 46805.42k 51586.58k 52805.63k 53086.89k 53313.54k cast cbc 21095.81k 22675.29k 23289.69k 23439.70k 23470.08k aes-128 cbc 17174.50k 23255.19k 25595.70k 26252.29k 26438.31k aes-192 cbc 15263.94k 19941.53k 21662.04k 22122.18k 22276.78k aes-256 cbc 13796.51k 17356.35k 18573.23k 18647.04k 18986.33k camellia-128 cbc 0.00 0.00 0.00 0.00 0.00 camellia-192 cbc 0.00 0.00 0.00 0.00 0.00 camellia-256 cbc 0.00 0.00 0.00 0.00 0.00 sha256 4555.98k 10515.31k 18588.84k 22491.14k 24917.33k sha512 2319.48k 9289.09k 15347.75k 22337.54k 25821.18k aes-128 ige 21801.03k 23792.51k 24320.85k 24439.13k 24453.12k aes-192 ige 19138.79k 20354.56k 20723.37k 20826.45k 20802.22k aes-256 ige 16812.74k 17657.05k 17918.29k 17969.49k 17975.98k sign verify sign/s verify/s rsa 512 bits 0.001739s 0.000143s 575.2 6999.1 rsa 1024 bits 0.008652s 0.000407s 115.6 2456.4 rsa 2048 bits 0.049024s 0.001339s 20.4 746.7 rsa 4096 bits 0.321875s 0.004739s 3.1 211.0 sign verify sign/s verify/s dsa 512 bits 0.001445s 0.001642s 692.0 608.9 dsa 1024 bits 0.003984s 0.004803s 251.0 208.2 dsa 2048 bits 0.013089s 0.015528s 76.4 64.4