Der Leitfaden eines jeden guten Sicherheitsingenieurs ist: »Sicherheit
ist kein Produkt sondern ein Prozess.«
Es steckt mehr dahinter, als starke Kryptographie in ein System zu integrieren.
Es bedeutet, das gesamte System so zu entwerfen, dass alle Sicherheitsmaßnahmen
- inklusive der Kryptographie - zusammenarbeiten.
- Bruce Schneier, Autor von Applied Cryptography.
Kryptographie
Inhaltsverzeichnis
Warum liefern wir Kryptographie aus?
OpenSSH.
Pseudozufallszahlengeneratoren (PRNG): ARC4,
...
Kryptographische Hashfunktionen: MD5, SHA1, ...
Symmetrische Verschlüsselungsverfahren: DES,
Blowfish, ...
Unterstützung für kryptographische Hardware
Internationale Kryptographen gesucht
Weitere Quellen
Warum liefern wir Kryptographie aus?
Kurz gesagt: Weil wir es können.
Das OpenBSD-Projekt ist in Kanada beheimatet.
Die Exportkontrollliste von Kanada
beinhaltet keine signifikanten Beschränkungen bezüglich des
Exports von kryptographischer Software und ist sogar noch offener,
was den Export frei erhältlicher kryptographischer Software angeht.
Marc Plumb hat
einige
Nachforschungen betrieben, um die Kryptographiegesetze zu prüfen.
Daher hat das OpenBSD-Projekt Kryptographie in zahlreichen Stellen im
Betriebssystem integriert.
Wir verlangen, dass die kryptographische Software, die wir benutzen wollen,
frei erhältlich ist und guten Lizenzen unterliegt.
Wir benutzen keine Kryptographie mit unzulänglichen Lizenzen direkt.
Wir verlangen außerdem, dass solche Software aus Ländern mit vernünftigen
Exportbedingungen kommt, da wir keinerlei Landesgesetze brechen wollen.
Die kryptographischen Komponenten, die wir momentan benutzen, wurden in
Argentinien, Australien, Deutschland, Griechenland, Kanada, Norwegen und
Schweden geschrieben.
Wenn wir OpenBSD-Releases oder -Schnappschüsse erzeugen, erzeugen wir diese
in freien Ländern, um sicherzustellen, dass sowohl Quelltexte als auch
Binärdateien frei von Beschränkungen sind.
In der Vergangenheit wurden unsere Releases in Kanada, Schweden und
Deutschland erzeugt.
OpenBSD wird mit Kerberos V ausgeliefert.
Die Quelltext-Basis, die wir benutzen, ist die exportierbare Heimdal-Version
aus Schweden.
Unsere X11-Quellen wurden ebenfalls so erweitert, dass sie Gebrauch von
Kerberos machen.
OpenBSD war das erste Betriebssystem, das mit einem IPsec-Stack
ausgeliefert wurde.
IPsec ist Teil des Systems seit der Veröffentlichung des OpenBSD-Releases 2.1
im Jahre 1997.
Unser voll konformer kernelinterner IPsec-Stack mit möglicher
Hardwareunterstützung durch Zusatzkarten und unser eigener freier
ISAKMP-Daemon wird als eine der Maschinen der IPsec conformance
Testumgebung der VPNC benutzt.
Heutzutage ist Kryptographie eine wichtiges Mittel, um die
Sicherheit eines Betriebssystems zu
erhöhen.
Die in OpenBSD integrierte Kryptographie kann in folgende Bereiche unterteilt
werden:
OpenSSH
Seit dem Release 2.6 hat OpenBSD
OpenSSH integriert; eine absolut
freie und nicht patentierte Version von ssh.
OpenSSH interagiert auch mit ssh
Version 1 und hat viele zusätzliche Funktionalitäten,
-
alle Teile restriktiven Ursprungs wurden entfernt (also Patente, siehe
ssl), jegliche lizenzierten oder patentierten Komponenten nutzten
externe Bibliotheken.
-
wurde um Unterstützung des Protolls Version 1.5 erweitert.
-
beinhaltet Unterstützung für Kerberosauthentifizierung und
Ticketpassing.
-
unterstützt Einmalpasswörter mittels
skey.
Grob gesagt haben wir eine Version von ssh mit freier Lizenz genommen
und sie OpenBSD-fiziert.
Ungefähr ein Jahr später haben wir OpenSSH so erweitert, dass es nun auch das
SSH-2-Protokoll beherrscht.
Das Resultat ist, dass nun alle drei großen SSH-Protokolle unterstützt
werden: 1.3, 1.5, 2.0.
Pseudozufallszahlengeneratoren
Ein Pseudozufallszahlengenerator (PRNG = Pseudo Random Number
Generator) versorgt Anwendungen mit einem Strom aus zufälligen Zahlenfolgen,
welche einen erheblichen Einfluss auf die Sicherheit des Systems haben:
- Es sollte für einen Außenstehenden unmöglich sein, sogar mit
Kenntnis der bisherigen Zahlen weitere Zahlen vorherzusagen.
- Die generierten Zahlen sollten keine sich wiederholenden Muster
aufweisen, d. h. der PRNG sollte einen sehr langen Kreislauf haben.
Ein PRNG ist eigentlich nur ein Algorithmus, bei welchem durch gleiche
Anfangswerte auch die gleichen Ergebnisse produziert werden.
Bei einem Mehrbenutzersystem gibt es viele Möglichkeiten, den PRNG mit
zufälligen Daten zu füttern.
Der OpenBSD-Kernel benutzt das Mausinterrupttiming,
Netzwerkdateninterruptverzögerungen, die Zeit zwischen Tastendrücken
und Festplatten-E/A-Informationen, um Zufallszahlen zu bekommen.
Zufallszahlen stehen dann den Kernelroutinen zur Verfügung und werden an
Userlandprogramme weitergegeben.
Bisher werden Zufallszahlen benutzt von:
- Dynamische Zuweisung des sin_port in bind(2).
- PIDs von Prozessen.
- IP-Datagramm-IDs.
- RPC-Transaktions-IDs (XID).
- NFS-RPC-Transaktions-IDs (XID).
- DNS-Abfrage-IDs.
- Inode-Generierungsnummern, siehe getfh(2) und fsirand(8).
- Timingstörungen in traceroute(8).
- Stärkere temporäre Namen für mktemp(3) und mkstemp(3).
- Zufälligkeit zum TCP-ISS wurde hinzugefügt, um spoofing-Angriffe zu
verhindern.
- Zufälliges Padding in IPsec »esp_old«-Paketen.
- Um Salts für die verschiedenen Passwortalgorithmen zu generieren.
- Um vorgetäuschte S/Key-Herausforderungen zu generieren.
- In
isakmpd, um lebende Beweise für Schlüsselaustausch zu haben.
Kryptographische Hashfunktionen
Eine Hashfunktion komprimiert ihre eingegebenen Daten zu einer
Zeichenkette konstanter Länge.
Mit einer kryptographischen Hashfunktion können folgende Szenarien nicht
eintreten:
- Zwei Eingaben erzeugen die selbe Ausgabe (resistent gegen Kollisionen).
- Eine andere Eingabe für eine gegebene Eingabe erzeugt die selbe
Ausgabe (2nd preimage resistant).
In OpenBSD werden die kryptographischen Hashfunktionen MD5, SHA1, und RIPEMD-16
benutzt, z.B. hier:
- In
S/Key, um Einmalpasswörter bereitzustellen.
- In
IPsec und
isakmpd(8), um die Herkunft von Daten zu authentifizieren und
Paketintegrität zu gewährleisten.
- Um MD5-Passwörter im FreeBSD-Stil bereitzustellen (standardmäßig nicht
ermöglicht), siehe
login.conf(5).
- In libssl für die digitale Signatur von Nachrichten.
Symmetrische
Verschlüsselungsalgorithmen
Symmetrische Verfahren werden benutzt, um Daten zu ver- und
entschlüsseln.
Normalerweise werden sie mit einem Schlüssel zur Ver- und einem Schlüssel zur
Entschlüsselung gebraucht.
Die Sicherheit eines symmetrischen Algorithmus sollte wirklich nur auf den
Schlüsseln beruhen.
OpenBSD stellt symmetrische Verfahren wie DES, 3DES, Blowfish und Cast
für Kernel- und Userlandprogramme zur Verfügung, die an vielen Orten,
wie z. B. an diesen, benutzt werden:
- In der libc für die Erstellung von
Blowfish-Passwörtern.
Siehe dazu auch das USENIX paper.
- In
IPsec, um Vertrauen in die Netzwerkschicht zu bringen.
- In
isakmpd, um den Austausch von IPsec-Schlüsselmaterial zu schützen.
- In AFS, um die Nachrichten zu schützen, die über das Netzwerk gehen,
und um Vertrauen im Zugriff auf entfernte Dateisysteme zu
gewährleisten.
- In libssl, um Applikationen über das kryptographisch sichere und
zudem de facto Standard-SSL-Protokoll laufen zu lassen.
Unterstützung für kryptographische
Hardware
OpenBSD unterstützt seit Release 2.7 einiges an kryptographischer Hardware,
wie etwa Hardwarebeschleuniger und Zufallszahlengeneratoren.
- IPsec crypto dequeue
Unser IPsec-Stack wurde so verändert, dass kryptographische
Funktionen auch außer der Reihe gemacht werden können.
Die meisten Software-IPsec-Stacks müssen die kryptographischen
Funktionen mit jedem einzelnen Paket durchführen, das sie behandeln.
Das resultiert in niedriger Performance.
Um Hardware sauber und schnell zu nutzen, müssen diese zwei Komponenten
getrennt werden - wie von uns durchgeführt.
Dabei springt sogar etwas extra Performance auf der Softwareseite heraus.
- Hifn 7751
Karten, die den Hifn 7751 verwenden, können als symmetrischer
kryptographischer Hardwarebeschleuniger benutzt werden, z. B.
Soekris VPN1201 oder
VPN1211
(hier zu kaufen)
oder PowerCrypt.
Die momentan dabei erreichte Leistung beträgt 64 Mbit/s für
3DES/SHA1 ESP, wenn man einen einzelnen Hifn 7751 auf jeder Seite
eines Tunnels einsetzt: Das ist eine Verbesserung gegenüber
einer P3/550-CPU um beinahe 600 Prozent.
An weiteren Verbesserungen bezüglich einiger Punkte wird noch gearbeitet,
aber mit dem Stand vom 13. April 2000 wird der Quelltext als stabil
angesehen.
Wir haben unseren eigenen Treiber geschrieben, um diesen Chip zu
unterstützen, anstatt den (in den USA geschriebenen)
Powercrypt-Treiber zu
benutzen; außerdem arbeitet unser Treiber sauber mit IPsec zusammen.
Der 7751 wird im Vergleich zum Industriestandard als langsam angesehen
und viele Anbieter haben schnellere Chips (auch Hifn hat einen
zwar schnelleren aber auch teureren Chip im Sortiment).
Die Spitzenleistung mit 3DES SHA1 ESP beträgt etwa 64 Mbit/s.
Nach der Veröffentlichung von 2.9 wurde die Unterstützung für
den Hifn-7951-Chip hinzugefügt; eine abgespeckte Version des 7751,
die einen Beschleuniger für öffentliche Schlüssel (nicht unterstützt)
und einen Zufallszahlengenerator (unterstützt) enthält.
Die Karten wurden von
Soekris Engineering gespendet.
Nach der Veröffentlichung von 3.0 wurde die Unterstützung
für den Hifn-7811-Chip hinzugefügt; einer schnelleren Version
des 7751 (etwa 130 Mbit/s) mit einem Zufallszahlengenerator.
Die Karte wurde von GTGI
gespendet.
Nach der Veröffentlichung von 3.2 wurde eine Unterstützung für
den LZS-Kompressionsalgorithmus hinzugefügt, der von
ipcomp(4) benutzt wird.
Mit der Veröffentlichung von 3.4 wurde Unterstützung für die
7955- und 7956-Chips hinzugefügt. Zusätzlich zu allen Funktionen
des vorherigen 7951-Chips beherrschen diese AES.
Anfänglich war der Umgang mit Hifn schwierig.
Hifn drohte, uns wegen des außerhalb der USA durchgeführten
Reverseengineering ihres crypto-unlock-Algorithmus zu verklagen.
In Letzter Zeit allerdings haben sich die Wogen geglättet und Hifn
unterstützt uns mit Boards und Support.
- Hifn 6500
Dieses Gerät ist eine asymmetrische Kryptoeinheit.
Sie unterstützt RSA-, DSA- und DH-Algorithmen, sowie die meisten häufig
vorkommenden Funktionen.
Es ist ein sehr schneller Zufallszahlengenerator enthalten.
Wir haben ein Gerät, die vollständige Dokumentation und Beispielquelltext.
Mit 3.1 arbeiten sowohl der Zufallsgenerator als auch die Big-Number-Unit.
-
Hifn 7814/7851/7854
Dieses Gerät ist ein Paketprozessor und eine asymmetrische
Kryptoeinheit.
Es unterstützt RSA-, DSA- und DH-Algorithmen sowie andere wichtige
Big-Number-Funktionen und verfügt auch über einen Zufallszahlengenerator.
Momentan werden die Big-Number-Engine und der Zufallszahlengenerator
unterstützt (keine Pakettransformationen).
- Broadcom
BCM5801/BCM5802/BCM5805/BCM5820/BCM5821/BCM5822/5823/5825/5860/5861/5862
(oder der Beta Chip Bluesteelnet 5501/5601)
Direkt nach der Veröffentlichung von OpenBSD 2.7 konnten wir
erstmalig Unterstützung für die frühen Versionen bereitstellen, die
uns der Hersteller zur Verfügung gestellt hat (insbesondere mit dem
Testchip 5501).
Diese Geräte liefern die schnellste symmetrische Kryptographie, die wir
bisher gesehen haben.
Bluesteelnet wurde von Broadcom aufgekauft und hat danach richtige
Komponenten produziert.
Die neue BCM5805 ist ähnlich, nur wurde sie durch eine asymmetrische
Maschine erweitert, um DSA-, RSA- und ähnliche Algorithmen zu unterstützen.
Durch die annähernd doppelt so hohen Geschwindigkeit im Vergleich zur Hifn
wird dieser Chip hoffentlich bald sehr viel verbreiteter sein.
Die Leute von Broadcom/Bluesteelnet waren wirklich großartig.
Sie stellten uns die komplette Dokumentation für ihre Chips bereit,
Beispielquelltext und dazu noch eine ausreichende Menge Karten,
um das Ganze zu testen.
Nach 2.8 wurde dieser Treiber auch dahingehend modifiziert, dass er
Zufallszahlen auf dem BCM5805 und ähnlichen Versionen produziert
und diese dann in den Entropiepool des Kernels übergibt.
Nach 2.9 wurde Unterstützung für den BCM5820 hinzugefügt, was
größtenteils eine schnellere (64 Bit, höhere Taktrate) Version des
BCM5805 ist.
Noch ungetestete Unterstützung für den BCM5821 wurde mit 3.0 hinzugefügt.
Mit 3.1 wurde die Big-Number-Engine unterstützt und
RSA/DH/DSA-Operationen konnten beschleunigt werden.
Unterstützung für den BCM5801, BCM5802, BCM5821 und BCM5822 wurden
vor der Veröffentlichung von OpenBSD 3.2 hinzugefügt (die ungetestete
BCM5821-Unterstützung in 3.1 hat wegen einiger nicht dokumentierter
Interrupthandlingprobleme nicht funktioniert).
Partielle Unterstützung für BCM5823 wurde mit 3.4 hinzugefügt.
Unterstützung für BCM5825, BCM5860, BCM5861 und BCM5862 mit
Unterstützung für AES mit BCM5823 oder neuer wurde nach 4.5
hinzugefügt.
- Securealink PCC-ISES
Der
PCC-ISES ist ein neuer Chipsatz aus den Niederlanden.
Wir haben Probehardware und Dokumentation erhalten - die Arbeit an einem
Treiber ist im Gange.
Im Moment kann der Treiber bereits Zufallszahlen an den Entropiepool des
Kernels liefern.
- SafeNet SafeXcel 1141/1741
Nach der Veröffentlichung von 3.4 wurde die Unterstützung für diese
zwei Chips hinzugefügt - diese wurden in etlichen
SafeNet-Kryptokarten verbaut.
Unterstützt werden symmetrische Operationen mit DES, Triple-DES, AES, MD5
und SHA-1, RNG, Publickey-Operationen und vollständige
IPsec-Paketverarbeitung.
- SafeNet SafeXcel 1840
Wir haben Dokumentation und Probehardware für den
SafeNet 1840-Kryptochip bekommen.
Wir arbeiten daran, wenigstens die RNG- und symmetrische Kryptographie
dieser Geräte zu unterstützen.
- SafeNet SafeXcel 2141
Wir haben Dokumentation und Probehardware für die
SafeNet-Kryptochips bekommen.
Wir arbeiten daran, wenigstens die symmetrische Kryptographie zu
unterstützen.
- 3com 3cr990
3com hat uns einen Treiber gegeben, um die Ethernetseite dieses
Chipsets zu unterstützen.
Wir haben basierend darauf einen eigenen Ethernettreiber geschrieben.
Der Treiber wurde jetzt in OpenBSD eingefügt, da wir eine freie Lizenz für
den Microcode erhalten haben.
Wegen schlechter Dokumentation und einem Mangel an Kooperation (der
teilweise durch die hohen Austauschraten bei 3com begründet ist), werden
die IPsec-Funktionen des Chips nicht unterstützt ...
es hat sich als vollkommen sinnfreie Erfahrung herausgestellt.
- Intel IPsec card
Intel tut viel für ihre Netzwerkprodukte, aber im Gegensatz zu
allen anderen Anbietern weigert sich Intel standhaft, uns
Dokumentation bereitzustellen.
Wir haben mit etwa fünf Technikern gesprochen, welche an der Entwicklung
dieser Produkte beteiligt sind.
Sie alle wollten, dass wir Zugriff auf die Dokumentation bekommen.
Sie loben uns für unsere bisherige Arbeit.
Aber ihre Hände sind vom Management gebunden, welches keinen Vorteil
darin sieht, uns dieser Dokumentation zu versorgen.
Vergiss Intel (wenn du dir Gigabitethernethardware kaufen willst,
empfehlen wir alles andere ... aus eben dem selben
Grund: Die meisten Treiber, die wir bisher geschrieben haben, wurden
ohne Dokumentation geschrieben).
- Intel 82802AB/82802AC Firmware Hub RNG
Der 82802-FWH-Chip (zu finden auf i810-, i820-, i840-, i850- und
i860-Motherboards) enthält einen Zufallszahlengenerator (RNG).
Hochperformantes IPsec benötigt mehr Zufallszahlenentropie. Seit
dem 10. April 2000 unterstützen wir den RNG.
Wir werden Unterstützung für weitere RNGs auf anderen Kryptochips
hinzufügen.
- VIA C3 RNG
Die neuere VIA-C3-CPU enthält einen Zufallszahlengenerator als
Anweisung. Seit 3.3 wird dieser
Zufallszahlengenerator im Kernel dazu genutzt, den Entropiepool zu
füllen.
- VIA-C3-AES-Befehle
VIA-C3-CPUs mit Step 8 oder späterem Nehemiah-Core enthalten eine
AES-Implementierung, auf die mittels einfacher Befehle zugegriffen
werden kann.
Seit 3.4 unterstützt der Kernel die Benutzung im
Kontext von IPsec und exportiert sie mittels /dev/crypto.
Mit 3.5 wurden die Geschwindigkeiten erheblich
verbessert und OpenSSL benutzt die neuen Befehle direkt ohne die
Notwendigkeit eines Zugriffs auf den Kernel, was zu einer erheblichen
Geschwindigkeitssteigerung für Anwendungen führt, die OpenSSL verwenden, um
AES-Verschlüsselung zu bekommen (AES-128 wurde mit 780 MByte/s gemessen).
- OpenSSL
Jahre zuvor hatten wir einen großen Plan, Kryptokarten zu
unterstützen, welche RSA/DH/DSA automatisch über OpenSSL-Aufrufe
beherschen.
Seit OpenBSD 3.2 funktioniert diese Unterstützung; jede Karte mit einer
solchen Funktionalität, sofern unterstützt, wird automatisch diese Hardware
benutzen - einschließlich OpenSSH und dem httpd im SSL-Modus.
An den Applikationen werden keinerlei Änderungen benötigt.
Wenn jemand beim Schreiben der Treiber helfen will, bitte einfach
herkommen und mithelfen.
Internationale Kryptographen gesucht
Natürlich braucht unser Projekt Leute, die an diesen Systemen arbeiten.
Wenn ein nicht amerikanischer Kryptograph, den die oben erwähnten
Zwänge nicht betreffen, an Mitarbeit an unserer eingebetteten
Kryptographie interessiert ist, soll er uns bitte kontaktieren.
Weitere Quellen
Einige Leute aus dem OpenBSD-Team haben Vorträge über
die Veränderungen geschrieben, die in OpenBSD Einzug gehalten haben.
Die Postscript-Versionen dieser Vorträge sind hier erhältlich:
- A Future-Adaptable Password Scheme.
Usenix 1999,
von Niels Provos,
David Mazieres.
Papierform und
Folien.
- Cryptography in OpenBSD: An Overview.
Usenix 1999,
von Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
Papierform und
Folien.
- Implementing Internet Key Exchange (IKE).
Usenix 2000,
von Niklas Hallqvist und
Angelos D. Keromytis.
Papierform und
Folien.
- Encrypting Virtual Memory.
Usenix Security 2000,
Niels Provos.
Papierform und
Folien.
- The Design of the OpenBSD Cryptographic Framework.
Usenix 2003, von
Angelos D. Keromytis,
Jason L. Wright, und
Theo de Raadt.
Papierform.
- Cryptography As an Operating System Service: A Case Study.
ACM Transactions on Computer Systems,
Februar 2006, von
Angelos D. Keromytis,
Jason L. Wright und
Theo de Raadt.
Papierform.
www@openbsd.org
$OpenBSD: crypto.html,v 1.99 2012/04/25 12:13:15 ajacoutot Exp $