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<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>                                                       
  Features2=0x441d<SSE3,DTES64,MON,DS_CPL,CNXT-ID,xTPR>                                            
  AMD Features=0x100000<NX>                                                                        
  TSC: P-state invariant                                                                           
real memory  = 2147483648 (2048 MB)                                                                
avail memory = 2084769792 (1988 MB)                                                                
ACPI APIC Table: <PTLTD          APIC  >                                                           
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<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>                                                       
  Features2=0x4400<CNXT-ID,xTPR>                                                                   
real memory  = 4294967296 (4096 MB)                                                                
avail memory = 3409084416 (3251 MB)                                                                
ACPI APIC Table: <DELL   WS 650 >                                                                  
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