Das Mantra eines jeden guten Sicherheitsingenieurs ist : "Sicherheit
ist kein Produkt, sondern ein Prozess !" Es steckt mehr dahinter
als starke Kryptografie in ein System zu integrieren, es bedeutet das gesamte
System so zu entwerfen, dass alle Sicherheitsmassnahmen, inklusive der
Kryptografie, zusammen arbeiten.
-- Bruce Schneier, Autor von "Applied Cryptography".
Kryptografie
Index
Warum liefern wir Kryptografie aus?.
OpenSSH.
Pseudo Zufallszahlen Generatoren (PRNG): ARC4, ...
Kryptografische Hash Funktionen: MD5, SHA1, ...
Symmetrische Verschlüsselungsverfahren: DES, Blowfish, ...
Unterstützung für kryptologische Hardware
Internationale Kryptologen gesucht
Weitere Quellen
Warum liefern wir Kryptografie aus ?
In drei Worten: weil wir können.
Das OpenBSD Projekt ist in Kanada beheimatet.
Die Export Kontrollliste von Kanada
beinhaltet keine signifikaten Beschränkungen bezüglich des
Exports von kryptologischer Software, und ist sogar noch offener,
was den Export frei-erhältlicher kryptologischer Software angeht.
Marc Plumb hat
einige Nachforschungen betrieben, um die Kryptologiegesetze zu prüfen
.
Daher hat das OpenBSD-Projekt Kryptologie in zahlreichen Orten im Betriebsystem
integriert. Wir verlangen, dass die kryptologische Software, die wir benutzen
wollen,
frei erhältlich ist und guten Lizenzen unterliegt.
Wir benutzen Kryptografie mit garstigen Lizenzen nicht direkt.
Wir verlangen ausserdem, dass solche Software aus Ländern mit vernünftigen
Exportbedingungen kommt, da wir nicht die Gesetze irgendeines Landes brechen
wollen.
Die kryptografischen Komponenten, die wir momentan benutzen, wurden in
Argentinien, Australien, Kanada, Deutschland, Griechenland, Norwegen und
Schweden geschrieben.
Wenn wir OpenBSD Versionen oder Snapshots machen, erzeugen wir diese
in freien Ländern, um sicherzustellen, dass sowohl Sourcen, als auch
Binaries frei von Beschränkungen sind.
In der Vergangenheit wurden unsere Versionen in Kanada, Schweden und
Deutschland erzeugt.
OpenBSD wird mit Kerberos IV ausgeliefert. Die Codebase, die wir benutzen
ist die exportierbare KTH-basierte Version aus Schweden.
Unsere X11-Sourcen wurden ebenfalls so erweitert, dass sie Gebrauch von
Kerberos IV machen.
Kerberos V Unterstützung wird irgendwann in 2000 erscheinen, aber
zur Zeit existiert einfach keine frei exportierbare Version von
Kerberos V.
OpenBSD war das erste Betriebssystem, das mit dem IPSEC-Stack ausgeliefert wurde.
IPSEC ist Teil des Systems seit der Veröffentlichung der Version OpenBSD 2.1 im
Jahre 1997. Unser voll konformer kernel-interner IPSEC stack mit möglicher
Hardwarebeschleunigung durch einige Karten, und unser eigener freier ISAKMP daemon
wird als eine der Maschinen im 'IPSEC conformance testbed' von der
VPNC benutzt.
Heutzutage ist Kryptografie eine wichtige Sache, um die
Sicherheit eines Betriebsystems zu
erhöhen. Die in OpenBSD integrierte Kryptografie kann in folgende
Bereiche klassifiziert werden :
OpenSSH
Was ist das erste, was die Leute tun, nachdem sie OpenBSD installiert
haben ? Sie installieren Secure Shell
(ssh)
aus dem Ports-Tree oder den Paketen auf den FTP-Servern. Bis vor
einiger Zeit zumindest.
Seit der Version 2.6 hat OpenBSD
OpenSSH integriert , eine absolut
freie und nicht-patentierte Version von ssh.
OpenSSH interagierte mit ssh Version 1
und hatte viele weitere Features.
-
Alle Teile restriktiver Natur wurden entfernt (also Patente, siehe
ssl)
jegliche lizensierte oder patentierte Komponenten stammten aus externen
Libraries/Bibliotheken.
-
war um das Protokoll Version 1.5 erweitert worden.
-
beinhaltete Unterstützung für
kerberos
Authenfizierung und Ticket-Passing.
-
unterstützte Einmal-Passwörter durch
skey.
Grob gesagt haben wir eine Version von ssh mit freier Lizenz genommen und sie OpenBSD-fiziert.
Wir umgehen das USA-basierte Patent von RSA, indem wir einen einfachen Weg
anbieten, die libcrypto und libssl Libraries mit RSA einfach herunterzuladen
und zu installieren.
Diese Pakete basieren auf OpenSSL. Leute, die ausserhalb der USA leben, können
den von RSA patentierten Code frei benutzen, solange sie ihn nicht für
kommerzielle Zwecke einsetzen.
Es sieht so aus, als ob Firmen innerhalb der USA RSA-patentierten Code
ebenfalls frei benutzen können, solange RSA keine Hauptrolle beim
Geldverdienen spielt.
Aber auf diesem Wege bekommt fast jeder ein eingebautes ssh in seinem Betriebssystem.
NEU! OpenSSH unterstützt Protokoll 2.0!
Vor kurzem haben wir OpenSSH so erweitert, dass es auch das SSH2 Protokoll benutzen
kann. Ein ssh-daemon, der alle 3 wichtigen SSH-Protokole beherrscht, bringt uns
viel mehr Flexibilität. Protokoll 2.0 benutzt kein RSA für seine Public-Key-Kryptografie,
und verlässt sich stattdessen auf DH und DSA Algorithmen. In OpenBSD 2.7 -- das mit dem neuen SSH
ausgeliefert wird -- hast du Protokoll 2.0 Unterstützung gleich mit eingebaut! Wenn du zusätzlich
Protokoll 1.3 und 1.5 unterstützen willst, brauchst du nur das RSA-Paket zu installieren (so wie
auf der ssl
manual Page beschrieben), und den Daemon neu starten.
Pseudo Zufallszahlen Generatoren
Ein Pseudo Zufallszahlengenerator (PRNG = Pseudo Random Number Generator) versorgt Applikationen mit einem Strom
von Zahlen, die einen erheblichen Einfluss auf die Sicherheit des Systems haben:
- Es sollte für einen Aussenstehenden unmöglich sein, weitere Zahlen vorauszusagen,
sogar mit Kenntnis der bisherigen Zahlen.
- 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 dem mit den selben Startwerten
auch die selben Ergebnisse herauskommen.
Bei einem Multi-User-System gibt es viele Möglichkeiten den PRNG mit
Zufallsdaten zu füttern.
Der OpenBSD Kernel benutzt das Maus-Interrupt-Timing, Netzwerk-Daten-Interrupt-
Verzögerungen, die Zeit zwischen Tastendrücken und Festplatten IO-Informationen
um Zufallszahlen zu bekommen.
Zufallszahlen stehen den Kernel-Routinen zur Verfügung und werden an
"Userland"-Programme weitergegeben.
Bisher werden Zufallszahlen hierbei benutzt :
- Dynamische sin_port Zuweisung in bind(2).
- PIDs von Prozessen.
- IP Datagramm IDs.
- RPC Transaktions IDs (XID).
- NFS RPC Transaktions IDs (XID).
- DNS Abfrage-IDs.
- Inode generation numbers, siehe getfh(2) und fsirand(8).
- Timing Störungen in traceroute(8).
- Stärkere vorübergehende Namen für mktemp(3) und mkstemp(3)
- Zufälligkeit zum TCP ISS hinzugefügt, um Spoofing-Angriffe zu
verhindern.
-
random padding in IPSEC esp_old Paketen.
- Um salts für die verschiedenen Passwort-Algorithmen zu generieren..
- Um vorgetäuschte S/Key Herausforderungen zu generieren.
- In photurisd
und isakmpd
um einen guten Beweis für den Schlüssel-Austausch zu haben.
Kryptografische Hash Funktionen
Eine Hash Funktion komprimiert ihre eingegebenen Daten zu einer
Zeichenkette konstanter Länge.
Für eine kryptografische Hash-Funktion ist es undurchführbar folgendes zu finden:
- Zwei Eingaben, die die selbe Ausgabe erzeugen (Resistent gegen Kollisionen),
- Eine andere Eingabe für eine gegeben Eingabe mit der selben Ausgabe
(2nd preimage resistant).
In OpenBSD werden MD5, SHA1, und RIPEMD-160 als kryptografische Hash-Funktionen benutzt,
z.B. hier:
- In S/Key
um Einmal-Passwörter bereitzustellen.
- In IPsec,
photurisd
und
isakmpd(8)
um die Herkunft von Daten zu authentifizieren und Packetintegrität zu gewährleisten.
- Um MD5 Passwörter im FreeBSD-Stil bereitzustellen (kein Standard), siehe
passwd.conf(5)
- Für TCP SYN Cookie Unterstützung (kein Standard), siehe
options(4)
- In libssl zum digitalen Signieren von Nachrichten.
Symmetrische Verschlüsselungsalgorithmen
Symmetrische Verfahren werden benutzt um Daten zu ver- und entschlüsseln.
Normalerweise werden sie mit einem Schlüsel 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 Userland-Programme zur Verfügung, die an vielen Plätzen, wie z.B. an diesen benutzt
werden :
- In der libc zum Erstellen von
Blowfish
Passwörtern. Dazu siehe auch das USENIX paper
.
- In
IPsec
um Vertrauen in die Netzwerkschicht zu bringen.
- In Kerberos und einer handvoll "kerberisierter" Applikationen, wie
telnet,
cvs,
rsh,
rcp,
und
rlogin.
- In
photurisd und
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 Vertrauen in den Zugriff auf entfernte Dateisysteme zu gewährleisten.
- In libssl um Applikationen über das kryptografisch sichere und zudem
de-facto-Standard
ssl-Protokoll laufen zu lassen.
Unterstützung für kryptologische Hardware
OpenBSD unterstützt seit Version 2.7 einige kryptologische Hardware wie etwa
Hardwarebeschleuniger und Zufallszahlengeneratoren.
- IPSEC crypto dequeue
Unser IPSEC Stack wurde so verändert, dass kryptografische Funktionen
auch "ausser-der-Reihe" gemacht werden können. Die meisten Software IPSEC Stacks
müssen die kryptografischen Funktionen mit jedem einzelnen Paket, das sie behandeln,
durchführen. Das resultiert in synchroner Leistungsfähigkeit. Um Hardware sauber und schnell
zu nutzen, muss man diese zwei Komponenten trennen, so wie wir das gemacht haben. Tatsächlich
springt dabei sogar etwas Leistung für die Softwareseite heraus.
- HiFn 7751
Karten, die den HiFn 7751
verwenden können als symmetrischer kryptografischer Hardwarebeschleuniger benutzt werden, z.B.
PowerCrypt).
Die momentan dabei erreichte Leistung beträgt
63Mbit/sec für 3DES/SHA1 ESP, wenn man einen einzelnen Hifn 7751 auf jeder Seite eines
Tunnels hat, das ist fast eine 600%ige Verbessrung gegenüber einer
P3/550 CPU. An weiteren Verbesserungen bezüglich einiger Punkte wird noch gearbeitet,
aber mit Stand 13.April 2000 wird der Code 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, ausserdem
arbeitet unser Treiber sauber mit IPSEC zusammen.
Der 7751 wird in bezug auf Industriestandard als langsam angesehen und viele Anbieter
haben schnellere Chips (auch HiFn hat einen schnelleren, aber auch teuereren Chip).
Die Spitzenperformance mit 3DES SHA1 ESP beträgt etwa 63MBit/sec.
(Nebenbei: HiFn war eine recht schwierige Firma; sie haben uns sogar angedroht uns wegen unseres
nicht in den USA durchgeführten Reverse Engineering ihres Crypto Unlock Algorithmus zu verklagen)
- Hifn 6500
Dieses Gerät ist eine assymmetrische Krypto-Einheit. Sie unterstützt RSA, DSA,
und DH Algorithmen, genauso wie andere grosse Funktionen. Es enthält einen sehr schnellen
Zufallszahlen-Generator. Wir haben ein Gerät, die komplette Dokumentation und Beispiel-Code.
Die Entwicklung hat noch nicht begonnen.
- Broadcom BCM5805 (oder der Beta Chip Bluesteelnet 5501)
Direkt nach der Veröffentlichung von OpenBSD 2.7 konnten wir erstmalige Unterstützung
für diese frühen Versionen erreichen, die uns der Hersteller
zu Verfügung gestellt hat, insbesondere mit dem Testchip
5501.
Diese Geräte bringen die schnellste symmetrische Kryptografie, die wir bisher gesehen haben.
Ihre neue BCM5805 ist ähnlich, ausser dass sie auch eine asymmetrische Maschine
hinzufügt haben, um DSA, RSA und ähnliche Algorithmen zu untersützen. Mit einer
annähernd doppelt so grossen Performance wie die der HiFn wird dieser Chip hoffentlich
bald verbreiteter sein. Unser Treiber hat nach wie vor Bugs, so dass Performancezahlen
noch folgen werden.
Die Leute von Broadcom/Bluesteelnet waren wirklich grossartig. Sie gaben uns die
komplette Dokumentation für ihre Chips, Beispiel-Code und dazu noch eine ausreichende Menge an Karten,
um das ganze zu testen.
- Pijnenburg PCC-ISES
Die PCC-ISES ist ein
neuer Chipsatz aus den Niederlanden. Wir haben Probe-Hardware und
Dokumentation erhalten, und die Arbeit, um zumindest die symmetrische Kryptografie zu unterstützen,
hat begonnen.
- SafeNet 2141
Wir haben Dokumentation und Probe-Hardware für die
SafeNet
Krypto-Karten bekommen. Wir arbeiten daran, wenigstens die symmetrische Kryptografie zu
unterstützen.
-
3com 3c990
3com versteht immer noch nicht vollständig, was ihr Vorteil ist, wenn
uns die Dokumentation für ihre Krypto-Karten geben, du kannst sie gerne
kontaktieren und sie ermutigen, das endlich zu tun. Wir hatten gute Gespräche
mit ihnen, aber leider wurden unsere Ansprechpartner bald versetzt. Jetzt haben
wir die Gespräche aufgegeben, das sie anscheinend eine reine Zeitverschwendung
sind.
- Intel IPSEC card
Genauso wie 3COM verweigert uns Intel ihre Dokumentation. Wir haben mit etwa
5 Leuten aus dem technischen Bereich gesprochen, die mit der Entwicklung dieser Produkte
beschäftigt sind. Sie waren alle dafür, dass wir die Dokumentation bekommen.
Sie haben uns weiterempfohlen, aber ihre Hände sind gebunden, da das Management keinerlei
Vorteil für sich selber sieht, wenn sie uns Dokumentationen überlassen.
- Intel 82802AB/82802AC Firmware Hub RNG
Der 82802 FWH Chip (zu finden auf i810, i820, und i840 Motherboards) enthält
einen Zufallszahlengenerator (random number generator (RNG)). Hochleistungs-IPSEC
benötigt eine größere Zufallszahlenentropie. Nach Stand vom 10. April 2000 unterstützen
wir den RNG. Wir werden Unterstützung für weitere RNG hinzufügen, die wir auf
Crypto-Chips finden.
- OpenSSL
Wir haben grosse Pläne, was die Unterstützung für Karten betrifft, die RSA oder
DSA-Operationen durchführen, und auch was das Auslagern solcher Funktionen in die
OpenSSL betrifft, so dass Userland-Programme
(also hier ssh,
apache https, etc.)
davon profitieren können.
Wenn jemand beim Schreiben der Treiber helfen will, bitte einfach
herkommen und mithelfen.
Internationale Kryptologen gesucht
Natürlich braucht unser Projekt Leute, die an diesen Systemen arbeiten.
Wenn ein Nicht-amerikanischer Kryptologe, den die oben erwähnten Zwänge
nicht betreffen, an Mitarbeit an unserer eingebettenen Kryptologie
interessiert ist, soll er uns kontakten.
Weitere Quellen
Eine Reihe von Leuten aus dem OpenBSD-Team haben Vorträge und Aufsätze über
die Veränderungen geschrieben, die sie in OpenBSD eingeführt haben.
Die Postscript-Versionen sind hier erhältlich:
www@openbsd.org
Originally [OpenBSD: crypto.html,v 1.73 ]
$Translation: crypto.html,v 1.30 2001/01/03 11:44:16 reinhard Exp $
$OpenBSD: crypto.html,v 1.24 2001/01/03 12:42:42 reinhard Exp $