"De mantra van elke goede security engineer is: "Veiligheid is geen product, het
is een proces." Het is meer dan sterke cryptografie in een systeem integreren;
het is het gehele systeem zo ontwerpen dat alle veiligheidsmaatregelen,
inclusief cryptografie, met elkaar samenwerken."
-- Bruce Schneier, auteur van "Applied Cryptography".
Cryptografie
Index
Waarom integreren we cryptografie?
OpenSSH.
Pseudorandom Getal-Generatoren (PRNG): ARC4, ...
Cryptografische Hash-Functies: MD5, SHA1, ...
Symmetrische Vercijferingsalgoritmen: DES, Blowfish, ...
Ondersteuning voor Cryptografische Hardware
Internationale Cryptografen gevraagd
Aanbevolen Literatuur
Waarom integreren we cryptografie?
In vier woorden: omdat we het kunnen.
Het OpenBSD project is gesitueerd in Canada.
De Export Controle Lijst van Canada
plaatst geen significante beperkingen op de export van cryptografische software
en is nog explicieter in de vrije export van vrijelijk toegankelijke
cryptografische software. Marc Plumb heeft
wat onderzoek gedaan om de wetten betreffende cryptografie te testen.
Dus heeft het OpenBSD project cryptografie op talrijke plekken in het
besturingssysteem geïntegreerd. We verlangen dat de cryptografische
software die we gebruiken vrij toegankelijk is en goede licenties bezit.
We gebruiken niet direct cryptografie met ontoereikende patenten.
We verlangen ook dat zulke software zijn oorsprong vindt in landen met nuttige
exportlicenties omdat we de wetten van geen enkel land willen overtreden.
De cryptografische softwarecomponenten die we op dit moment gebruiken zijn
geschreven in Argentinië, Australië, Cadana, Duitsland, Griekenland,
Noorwegen en Zweden.
Wanneer we OpenBSD versies of snapshots maken, bouwen we onze binaries in vrije
landen om zeker te stellen dat de broncodes en binaries die we aan gebruikers
aanbieden vrij van beperkingen zijn. In het verleden zijn onze binaries gebouwd
in Canada, Zweden en Duitsland.
OpenBSD wordt geleverd inclusief Kerberos V. De codebase die we
gebruiken is de exporteerbare Heimdal-uitgave van Zweden.
Ook is onze X11 broncode uitgebreid om gebruik te maken van Kerberos.
OpenBSD was het eerste besturingssysteem dat een IPsec stack meeleverde. IPsec
maakt deel uit van het systeem sinds OpenBSD versie 2.1 uit 1997.
Onze IPsec stack met hardware acceleratie gebaseerd op enkele kaarten en onze
eigen vrije ISAKMP daemon wordt gebruikt als één van de machines in het IPsec
conformance testbed van
VPNC.
Vandaag de dag is cryptografie een belangrijk middel om de veiligheid van een besturingssysteem uit te breiden.
De cryptografie die gebruikt wordt in OpenBSD kan worden geclassificeerd in
verschillend aspecten, als volgt omschreven.
OpenSSH
Sinds versie 2.6 bevat OpenBSD
OpenSSH, een geheel vrije versie van
ssh, onbelemmerd door patenten.
OpenSSH werkte met ssh versie 1 en had
veel toegevoegde functionaliteiten,
-
alle componenten die restrictief van aard waren (b.v. patenten, zie
ssl(8))
zijn direct verwijderd uit de broncode; alle gelicentieerde of gepatenteerde
componenten gebruikte externe bibliotheken.
-
is geüpdatet om ssh protocol 1.5 te ondersteunen.
-
heeft toegevoegde ondersteuning voor kerberos-authenticatie en
ticketuitwisselingen.
-
ondersteuning voor one-time wachtwoordauthenticatie met
skey(1).
Grof gezegd hebben we een versie van ssh genomen met een vrije licentie en deze
geOpenBSDificeerd. Ongeveer een jaar later hebben we OpenSSH uitgebreid om
ook het SSH 2 protocol te ondersteunen, met als resultaat ondersteuning voor
alle 3 grote SSH protocollen: 1.3, 1.5, 2.0.
Pseudorandom Getal-Generatoren
Een Pseudorandom Getal-Generator (PRNG) voorziet applicaties van een stroom van
getallen welke bepaalde eigenschappen bezitten die van belang zijn voor de
veiligheid van het systeem:
- Het zou voor een buitenstaander onmogelijk moeten zijn om de uitvoer van de
random getal-generator te voorspellen, zelfs met kennis van de vorige
uitvoer.
- De gegenereerde getallen moet geen herhalend patroon bevatten, wat betekent
dat de PRNG een zeer lange cyclische periode moet hebben.
Een PRNG is normaliter gewoon een algoritme waar dezelfde invoerwaardes
dezelfde volgorde van uitvoerwaardes genereert. Op een multiuser
besturinssysteem zijn er veel bronnen die het mogelijk maken de PRNG te voeden
met een random kiemwaarde. De OpenBSD kernel gebruikt muis interrupt timing,
netwerkdata interrupt latentie, toetsaanslagintervallen en schijf IO informatie
om een entropie pool te vullen. Random getallen zijn beschikbaar voor kernel
routines en worden geëxporteerd via randapparatuur naar userland
programma's.
Tot nu toe worden random getallen gebruikt op de volgende plaatsen:
- Dynamische sin_port allocatie in bind(2)
- PID's van processen
- IP datagram ID's
- RPC transactie ID's (XID).
- NFS RPC transactie ID's (XID).
- DNS Query-ID's.
- Inode generatienummers, zie getfh(2) en fsirand(8).
- Timing verstoringen in traceroute(8).
- Sterkere tijdelijke namen voor mktemp(3) en mkstemp(3)
- Willekeurigheid toegevoegd aan de TCP ISS waarde voor bescherming tegen
spoofing aanvallen.
- Willekeurige uitlijning in IPsec esp_old pakketten.
- Het genereren van 'zout'-waarden voor de verschillende wachtwoordalgoritmen.
- Voor het genereren van valse S/Key uitdagingen
- In isakmpd(8)
om een goed bewijs van sleuteluitwisselingen te krijgen.
Cryptografische Hash-Functies
Een Hash-Functie comprimeert zijn invoer tot een hash-code van vaste lengte.
Voor een Cryptografische Hash-Functie is het onmogelijk om:
- twee invoerwaardes te vinden die dezelfde uitvoer hebben
(sterke botsingsbestendigheid),
- voor een gegeven invoerwaarde een andere invoerwaarde te vinden met
dezelfde uitvoer (zwakke botsingsbestendigheid).
In OpenBSD worden MD5, SHA1 en RIPEMD-160 gebruikt als Cryptografische
Hash-Functies, b.v.:
- In S/Key(1)
voor het genereren van one-time wachtwoorden.
- In IPsec(4)
en
isakmpd(8)
voor de authenticatie van de herkomst van de data en om pakketintegriteit te
garanderen.
- Voor FreeBSD-stijl MD5 wachtwoorden (niet standaard aan), zie
login.conf(5)
- In libssl voor het digitaal ondertekenen van berichten.
Symmetrische Vercijferingsalgoritmen
Symmetrische Vercijferingsalgoritmen worden gebruikt voor de vercijfering en
ontcijfering van data. Ze worden gewoonlijk gebruikt met een
vercijferingssleutel voor vercijfering van data en een ontcijferingssleutel
voor ontcijfering van data. De veiligheid van een Symmetrisch
Vercijferingsalgoritme zou alleen afhankelijk moeten zijn van de sleutels.
OpenBSD gebruikt symmetrische vercijferingsalgoritmen zoals DES, 3DES, Blowfish
en CAST voor kernel- en userlandprogramma's, welke gebruikt worden op veel
plaatsen zoals:
- In libc voor het genereren van
Blowfish
wachtwoorden. Zie ook het USENIX document
over dit onderwerp.
- Voor verkeersvertrouwelijkheid in
IPsec(4).
- In isakmpd(8)
om de IPsec sleuteluitwisselingen te beschermen.
- In libssl om applicaties te laten communiceren via het de-facto standaard
cryptografisch veilige SSL-protocol.
Ondersteuning voor Cryptografische Hardware
OpenBSD ondersteunt sinds 2.7 wat cryptografische hardware zoals accelerators en
random getal-generatoren.
-
IPsec crypto dequeue
Onze IPsec stack is aangepast om de cryptografische functies out-of-line
uit te voeren. De meeste eenvoudige software IPsec stacks moeten
cryptografie
toepassen tijdens de verwerking van elk pakket. Dit leidt tot synchrone
draagkracht. Voor een correct en snel gebruik van hardware moeten deze
twee componenten gescheiden worden, zoals wij hebben gedaan. Zelfs voor de
software-implementatie levert dit betere resultaten op.
-
Hifn 7751
Kaarten die de Hifn 7751 gebruiken kunnen worden gebruikt als een
symmetrische cryptografische accelerator, zoals b.v. de
Soekris VPN1201 of VPN1211
(hier te koop)
of
PowerCrypt.
De huidige prestaties van een Hifn 7751 aan elk einde van een tunnel is voor
3DES/SHA ESP 64Mbit/sec, een verbetering van bijna 600% ten opzichte van een
P3/550 CPU. Er zijn verdere verbeteringen onderweg om nog enkele punten af
te handelen, maar vanaf 13 April 2000 wordt de code als stabiel beschouwd.
We hebben ons eigen stuurprogramma geschreven voor deze chip in plaats van
gebruik te maken van het (in de USA geschreven)
PowerCrypt stuurprogramma. Ons
stuurprogramma werkt goed samen met de IPsec stack.
De 7751 wordt volgens huidige industriestandaarden als langzaam beschouwd en
veel leveranciers hebben snellere chips (zelfs Hifn heeft nu een snellere,
echter duurdere chip). De maximaal haalbare snelheid met 3DES SHA1 ESP is
ongeveer 64Mbit/sec.
Nadat 2.9 uitgebracht was, is ondersteuning toegevoegd voor de Hifn 7951
chip, een eenvoudigere versie van de 7751 met een public key accelerator
(niet
ondersteund) en een random getal-generator (wel ondersteund). De kaarten
werden geschonken door Soekris Engineering.
Nadat 3.0 uitgebracht was, is ondersteuning toegevoegd voor de Hifn 7811
chip, een snellere versie van de 7751 (ongeveer 130Mbit/sec) met een
random getal-generator. Een kaart werd geschonken door GTGI.
Nadat 3.2 uitgebracht was, is ondersteuning voor het LZS
compressie-algoritme toegevoegd, welke gebruikt wordt door ipcomp(4).
Nadat 3.4 uitgebracht was, is ondersteuning toegevoegd voor de 7955 en 7956
chips.
Naast alle mogelijkheden van de vorige 7951 chip heeft deze ook AES.
Hifn was aanvankelijk moeilijk in de omgang (dreigementen om ons aan te
klagen vanwege onze reverse engineering buiten Amerika van hun crypto unlock
algoritme), maar recentelijk zijn ze erg behulpzaam geweest in het leveren
van borden en ondersteuning.
-
Hifn 6500
Dit apparaat is een asymmetrische crypto eenheid. Het ondersteunt de RSA,
DSA en DH algoritmen en belangrijke functies voor grote getallen. Het bevat
ook een zeer snelle random getal-generator. We hebben een apparaat compleet
met documentatie en voorbeeldcode. Sinds OpenBSD 3.1 werken zowel de random getalgenerator als de grote nummereenheid.
-
Hifn 7814/7851/7854
Dit apparaat is een pakketverwerker en een asymmetrische crypto eenheid.
Het ondersteunt de RSA, DSA en DH algoritmen en belangrijke functies voor
grote getallen alsmede een random getal-generator. Op dit moment worden
alleen het grote getallenmechanisme en de random getal-generator ondersteund
(geen pakket-transformaties).
-
Broadcom BCM5801/BCM5802/BCM5805/BCM5820/BCM5821/BCM5822/5823/5825/5860/5861/5862
(of beta chip Bluesteelnet 5501/5601)
Even nadat OpenBSD 2.7 uitgebracht was, zijn we erin geslaagd initiële
ondersteuning toe te voegen voor deze vroege versie die de leverancier aan
ons beschikbaar had gesteld, in het bijzonder voor de testchip 5501.
Deze apparaten leveren de snelste symmetrische cryptografie op die we ooit
hebben gezien.
Bluesteelnet is opgekocht door Broadcom en is begonnen met het fabriceren
van echte onderdelen. Hun nieuwe BCM5806 is vergelijkbaar, maar ze hebben
ook een asymmetrische machine toegevoegd voor ondersteuning van DSA, RSA en
soortgelijke algoritmen. De snelheid wordt geschat op minimaal viermaal de
snelheid van de Hifn; hopelijk wordt deze chip binnenkort een meer algemeen
verschijnsel.
De mensen van Broadcom/Bluesteelnet waren geweldig in de omgang. Ze gaven
ons complete documentatie en voorbeeldcode voor hun chips plus genoeg
kaarten om mee te testen.
Na 2.8 werd dit stuurprogramma aangepast om ook random getallen te genereren
op de BCM5805 en vergelijkbare versies en deze data te voeden aan de kernel
entropie pool.
Na 2.9 was ondersteuning toegevoegd voor de BCM5820, wat een snellere
(64bit, hogere kloksnelheid) versie van de BCM5805 is. Niet geteste
ondersteuning voor de BCM5821 was toegevoegd na 3.0.
Sinds 3.1 wordt de grote nummer motor ondersteund en RSA/DH/DSA-uitvoeringen
kunnen versneld worden.
Ondersteuning voor de BCM5801, BCM5802, BCM5821 en de BCM5822 was toegevoegd
voordat OpenBSD 3.2 uitkwam (de niet-geteste ondersteuning voor de BCM5821
in 3.1 was kapot vanwege enkele ongedocumenteerde vereisten aan de interrupt
handling).
Voor 3.4 was er gedeeltelijke ondersteuning voor de BCM5823 toegevoegd.
Ondersteuning voor de BCM5825, BCM5860, BCM5861 en BCM5862 inclusief
ondersteuning voor AES met de BCM5823 of nieuwer was toegevoegd na 4.5.
-
Securealink PCC-ISES
De
PCC-ISES is een nieuwe chipset uit Nederland. We hebben proefhardware
en documentatie gekregen en er wordt aan een stuurprogramma gewerkt.
Op dit ogenblik is het stuurprogramma in staat random getallen te voeden aan
de kernel entropie pool.
-
SafeNet SafeXcel 1141/1741
Nadat 3.4 uit was, werd ondersteuning toegevoegd voor deze twee chips
(terug te vinden op verscheidene
SafeNet
cryptokaarten. Ondersteunt DES, Triple-DES, AES, MD5, en SHA-1 symmetrische
crypto-operaties, RNG, publieke sleuteloperaties en volledige IPsec
pakketverwerking.
- SafeNet SafeXcel 1840
We hebben documentatie en proefhardware ontvangen voor de
SafeNet 1840
crypto chip. Werk om tenminste de RNG en en symmetrische cryptografie van
deze apparaten te ondersteunen, is begonnen.
- SafeNet SafeXcel 2141
We hebben documentatie en proefhardware gekregen voor de
SafeNet 2141
crypto chip. Er wordt werk verricht om op zijn minst de symmetrische
cryptografie van deze apparaten te ondersteunen.
-
3com 3cr990
3com gaf ons een stuurprogramma om de ethernetcomponent van deze chipset te
ondersteunen en op basis daarvan hebben we ons eigen ethernet stuurprogramma
geschreven. Dit stuurprogramma is nu geïntegreerd aangezien we een vrije
licentie hebben kunnen krijgen voor de microcode. Vanwege slechte
documentatie en gebrek aan medewerking (gedeeltelijk door de hoge turnover
rates bij 3Com) is er geen ondersteuning van de IPsec functies van de
chip.... dus de onderneming is achteraf niet geheel geslaagd te noemen.
- Intel IPsec kaart
Intel weigert pertinent documentatie te leveren voor deze kaart, zoals ze
dat voor al hun netwerkcomponenten doen, compleet in tegenstelling tot
andere leveranciers. We hebben ongeveer vijf mensen gesproken die zich
bezighouden met de ontwikkeling van deze producten. Ze willen allemaal dat
we documentatie krijgen. Ze loven onze prestaties. Maar hun handen zijn
gebonden door het management die geen voordeel ziet in het verstrekken van
documentatie. Vergeet Intel. (Als u gigabit ethernet hardware wilt kopen
raden we alle andere aan... om dezelfde reden:
de meeste stuurprogramma's voor Intel netwerkhardware is geschreven zonder
documentatie).
-
Intel 82802AB/82802AC Firmware Hub RNG
De 82802 FWH chip (te vinden op i810, i820, i840, i850 en i860 moederborden)
bevat een random getal-generator (RNG). Veeleisende IPsec omgevingen
vereisen meer random getalentropie. Sinds 10 April 2000 ondersteunen we de
RNG. We zullen ondersteuning toevoegen voor andere RNG's op crypto chips.
- VIA C3 RNG
De nieuwere VIA C3 CPU bevat een random getalgenerator in de vorm van een
instructie. Vanaf 3.3 wordt deze random
getalgenerator in de kernel gebruikt om de entropie pool te voeden.
- VIA C3 AES-instructies
VIA C3 CPU's met een step 8 of latere Nehemiah kern bevatten een
AES-implementatie die via eenvoudige instructies te gebruiken is. Sinds 3.4 ondersteunt de kernel het gebruik ervan in een IPsec
context en wordt geëxporteerd door /dev/crypto. Vanaf 3.5 zijn de prestaties enorm verbeterd en OpenSSL
gebruikt nu rechtstreeks de instructies indien beschikbaar zonder dat de
kernel ingegaan hoeft te worden, met als resultaat een enorme toename van de
snelheid (AES-128 gemeten op 780MByte/sec) voor toepassingen die OpenSSL
gebruiken om AES-encryptie uit te voeren.
- OpenSSL
Jaren geleden hadden we een groots plan om cryptokaarten die automatisch
via OpenSSL-aanroepen RSA/DH/DSA kunnen uitvoeren, te ondersteunen. Sinds
OpenBSD 3.2 werkt deze ondersteuning en elke ondersteunde kaart met een
dergelijke functionaliteit zal automatisch de hardware gebruiken, inclusief
OpenSSH en httpd in SSL-modus. Er zijn geen wijzigingen aan de
toepassingen vereist.
Als mensen willen helpen met het schrijven van stuurprogramma's,
kom ons helpen.
Internationale Cryptografen gevraagd
Uiteraard heeft ons project mensen nodig om aan deze systemen te werken. Als een
niet-Amerikaanse cryptograaf die aan de eerdergenoemde eisen voldoet,
geïnteresseerd is in het meehelpen aan ingebedde cryptografie in OpenBSD,
neem a.u.b. contact op.
Aanbevolen Literatuur
Er zijn verschillende documenten geschreven door leden van het OpenBSD team
over de cryptografische aanpassingen die ze hebben gemaakt aan OpenBSD. De
postscript versies van deze documenten zijn hier verkrijgbaar.
- A Future-Adaptable Password Scheme.
Usenix 1999,
door Niels Provos,
David Mazieres.
paper en
slides.
- Cryptography in OpenBSD: An Overview.
Usenix 1999,
door Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
paper en
slides.
- Implementing Internet Key Exchange (IKE).
Usenix 2000,
door Niklas Hallqvist en
Angelos D. Keromytis.
paper en
slides.
- Encrypting Virtual Memory
Usenix Security 2000,
Niels Provos.
paper en
slides.
- The Design of the OpenBSD Cryptographic Framework.
Usenix 2003, door
Angelos D. Keromytis,
Jason L. Wright, en
Theo de Raadt.
paper.
- Cryptography As an Operating System Service: A Case Study.
ACM Transactions on Computer Systems,
februari 2006, door
Angelos D. Keromytis,
Jason L. Wright en
Theo de Raadt.
paper.
www@openbsd.org
$OpenBSD: crypto.html,v 1.32 2013/03/27 18:37:03 ajacoutot Exp $