Cryptography Engineering, Teil 2: AES auf PCs und Servern

Seite 5: Sicherheitsfragen der realen Welt

Inhaltsverzeichnis

Das Beispiel und die CppUnit-Tests zeigen, dass die AES-Implementierung auf einer Vielzahl unterschiedlicher Systeme spezifikationskonform funktioniert. Allerdings ist das für den Einsatz in der realen Welt vielfach nicht ausreichend. Abseits der Kryptografie lauern noch einige Gefahren, die der "Cryptography Engineer" umschiffen muss.

Erstes markantes Problem des gezeigten Beispielprogramms: Es empfängt den Schlüssel über die Kommandozeile. Leider ist die Kommandozeile eines Prozesses auf vielen Systemen, allen voran Unix und Windows, für alle Benutzer einsehbar. Auch andere Systeme wie z/OS und BS2000/OSD sind durch ihre POSIX/Unix-Subsysteme inzwischen in diesem Punkt "verwässert" worden. Ein interner Angreifer muss also beispielsweise unter Unix nur ein geeignetes ps-Kommando absetzen, um den Schlüssel zu ermitteln. Schlüssel, ebenso wie Passwörter, sind daher aus der Kommandozeile zu verbannen.

Andererseits stellt sich dann die Frage nach der sicheren Ablage von Schlüsseln. Diese Frage des Key-Managements ist ebenso wichtig wie die korrekte Implementierung des kryptografischen Algorithmus selbst. Das Thema würde aber den Rahmen dieses Beitrags bei weitem sprengen. Einen ersten Einblick in die Thematik bietet [10].

Ein anderer Punkt, der auch teilweise die AES-Implementierung als solche betrifft, ist der Umgang mit Schlüsseln und Daten im Speicher. Schlüssel wie Daten sind im Hauptspeicher sofort zu vernichten, nachdem sie nicht mehr benötigt werden. Andernfalls steigt das inhärente Risiko, dass die Daten beispielsweise im Falle eines Programm- oder Systemcrashs (Core-Dump) ausgespäht werden können. Das Überschreiben mit Zufallsdaten ist ein geeigneter Weg.

Dies wirft jedoch viele Fragen zum Umgang mit Daten im Betriebssystem auf. Was ist mit ausgelagerten Daten im Swap? Insbesondere im Falle eines Systemcrashs? Hierzu finden sich erste Antworten, aber auch offene Fragen in [10].

Abseits der reinen Kryptografie und ihrer Implementierung in Software warten also noch viele weitere Themen auf dem Weg zum sicheren Programm. Mit dem vorgestellten Beispiel wurde der weite Weg von der Mathematik zur auf vielen unterschiedlichen Plattformen lauffähigen AES-Implementierung vorgestellt. Auch wenn es im Programm an sich nur noch um das Rechnen und nicht mehr um das mathematische Beweisen geht, bleibt die Umsetzung höchst anspruchsvoll. Selbst auf einer vertrauten Zielumgebung, wie Unix oder Windows, gilt es doch eine Reihe von Details zu beachten. Die effiziente Umsetzung der Multiplikation in GF(2^8) ist ein Beispiel für direkt angewandte Mathematik. Obwohl in einer Hochsprache programmiert wird, müssen dennoch hardwarenahe Details, wie die Endianess des Systems, im Auge behalten werden.

Die Hardware wird im nächsten Teil dieser Artikelreihe eine größere Rolle spielen. Dann soll es weg von den großen Server- und Workstationsystemen und hin zu den Winzlingen der Computersysteme gehen – um AES auf 8-Bit-Mikrocontrollern.

Oliver Müller
ist freiberuflicher IT-Berater und -Trainer mit den Schwerpunkten Software Engineering, Kryptografie, Java EE, Linux, Unix, z/OS und OpenVMS. Er ist unter info at oliver-mueller.com zu erreichen.

Mehr Infos

Referenzen

[1] Buchmann, Johannes:
Einführung in die Kryptographie.
Berlin, Heidelberg: Springer 3. Auflage 2004
[2] Menezes, Alfred J. / Oorschot, Paul van / Vanstone, Scott:
Handbook of Applied Cryptography.
Boca Raton (FL): CRC Press 1997
[3] Hankerson, Darrel / Menezes, Alfred J. / Vanstone, Scott:
Guide to Elliptic Curve Cryptography.
New York: Springer 2004
[4] National Institute of Standards (Hrsg.):
Announcing the ADVANCED ENCRYPTION STANDARD (AES).
Federal Information Processing Standards Publication 197: November 26, 2001
URL: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
[Stand: 18.05.2011]
[5] Schneier, Bruce:
Angewandte Kryptographie - Protokolle, Algorithmen und Sourcecodes in C.
Bonn: Addison-Wesley 1996
[6] Wikipedia (Hrsg.):
Electronic Code Book Mode.
URL: http://de.wikipedia.org/wiki/Electronic_Code_Book_Mode
[Stand: 18.05.2011]
[7] Wikipedia (Hrsg.):
Cipher Block Chaining Mode.
URL: http://de.wikipedia.org/wiki/Cipher_Block_Chaining
[Stand: 18.05.2011]
[8] Wikipedia (Hrsg.):
Cipher Feedback Mode.
URL: http://de.wikipedia.org/wiki/Cipher_Feedback_Mode
[Stand: 18.05.2011]
[9] Wikipedia (Hrsg.):
Output Feedback Mode.
URL: http://de.wikipedia.org/wiki/OFB
[Stand: 18.05.2011]
[10]Ferguson, Neal / Schneier, Bruce / Kohno, Tadayoshi:
Cryptography Engineering - Design Principles and Practical Application.
Indianapolis (IN): Wiley Publishing 2010

(rl)