Der heutige Beitrag ist eine Fortsetzung des Beitrags "Grundlagen der Verschlüsselung", es geht etwas mehr in die technischen Details: Der Verschlüsselungsmodus. Der letzte Beitrag dieses Blogs ist etwas länger her, leider habe ich momentan relativ wenig Zeit. Aktuell schreibe ich parallel einen Beitrag über die Absicherung des ngnix Webservers, beim Verfassen des Beitrags habe ich jedoch bemerkt, dass vielen die Relevanz der Auswahl des Verschlüsselungsmodus nicht bewusst ist.
Wird beispielsweise der im folgenden erklärte Electronic Codeblock Mode gemeinsam mit der Verschlüsselung AES in bestimmten Anwendungssituationen genutzt, kann die Verschlüsselung trotz sehr gutem Passwort vollkommen unsicher und leicht zu "knacken" sein.
Die symmetrische Verschlüsselung kann in zwei Grundtypen eingeteilt werden:
- Blockchiffrierungen, hierbei wird der Klar- und der Chiffretext (das verschlüsselte Gegenstück zum Klartext) blockweise verarbeitet. Ein Block hat eine typische Größe von 64, 128, 192 oder auch 256 bit.
- Stromchiffrierungen, hierbei wird der Text bitweise (manchmal auch byteweise) verarbeitet.
Der kryptographische Modus ist eine Art Erweiterung der Grundchiffrierung (AES, Serpent, Blowfish, ...) mit einer Rückkopplung und einigen einfachen mathematischen Operationen.
In vielen Anwendungen kann der Modus konfiguriert werden, im Artikel "TLS (SSL) Verschlüsselung und Schwachstellen im Detail" habe ich beispielsweise gezeigt, dass zu Beginn einer verschlüsselten Sitzung eine Cipher Suite ausgehandelt werden muss. Innerhalb der Suite wird auch die Verschlüsselung, die Blockgröße und der Modus festgelegt, z.B.:
- AES_128_GCM (= Grundverschlüsselung AES, Keysize 128 bit und Modus GCM), oder
- AES_128_CBC.
Auch in vielen Verschlüsselungs-Anwendungen wie OpenVPN oder OpenSSL basierten Programmen kann der Nutzer einen Algorithmus frei wählen. Zur Wahl des am Besten passenden ist jedoch einiges an Hintergrundwissen notwendig, welches ich im Folgenden vermitteln möchte.