"Il mantra di ogni buon esperto di sicurezza e': "La sicurezza non e'
un prodotto, ma un processo."E' piu' che progettare crittografia forte
in un sistema; e' progettare l'intero sistema in modo tale che tutte le
misure adottate per migliorare la sicurezza, inclusa la crittografia,
lavorino insieme."
-- Bruce Schneier, autore di "Applied Cryptography".
Crittografia
Indice
Perche' noi abbiamo la crittografia?
OpenSSH
Generatori di Numeri Pseudo Casuali (PRNG): ARC4, ...
Funzioni di crittografia Hash: MD5, SHA1, ...
Trasformazioni crittografiche: DES, Blowfish, ...
Supporto hardware alla Crittografia
Ricerca internazionale di crittografi
Ulteriori letture
Perche' noi abbiamo la crittografia?
In tre parole: perche' noi possiamo.
Il progetto OpenBSD ha sede in Canada.
L'Export Control List del Canada
non pone alcuna significativa restrizione all'esportazione di
software di crittografia, ed e' persino piu' esplicito per quanto
riguarda la libera esportazione di software di crittografia disponibile
gratuitamente.
Marc Plumb ha effettuato
alcune ricerche per verificare le leggi sulla crittografia.
Quindi il progetto OpenBSD ha inserito la crittografia in numerose
parti del sistema operativo.
Noi richiediamo che il software di crittografia che usiamo sia
liberamente disponibile e con buone licenze.
Noi non usiamo crittografia con licenze non libere.
Inoltre chiediamo che il software provenga da paesi che consentono
l'esportazione delle licenze perche' non intendiamo infrangere la
legge in nessun paese. Le componenti software crittografiche che
attualmente utilizziamo sono state scritte in Argentina, Australia,
Canada, Germania, Grecia, Norvegia, e Svezia.
Quando realizziamo nuove versioni o snapshot di OpenBSD assembliamo
i binari in paesi liberi cosi' da fornire agli utenti sorgenti e
binari privi di restrizioni.
In passato i binari delle nostre versioni sono stati realizzati in
Canada, Svezia e Germania.
OpenBSD e' corredato di Kerberos V. Il codice base che usiamo e' la
versione Heimdal esportabile dalla Svezia. ll nostro sorgente X11 e'
stato esteso per fare uso anche di Kerberos.
OpenBSD e' stato il primo sistema operativo
corredato di stack IPsec.
Abbiamo incluso IPsec sin dalla versione 2.1 di OpenBSD nel 1997.
Il nostro stack in-kernel IPsec, pienamente conforme, con acceleratore
hardware costituito da un certo numero di schede, e il nostro demone
gratuito ISAKMP, e' usato come una delle macchine nel sistema di prove
di conformita' IPsec eseguito da
VPNC.
Oggi la crittografia assume un importante significato per il
miglioramento della sicurezza di un
sistema operativo. La crittografia utilizzata in OpenBSD puo' essere
classificata sotto vari aspetti descritti di seguito.
OpenSSH
A partire dalla versione 2.6 OpenBSD contiene
OpenSSH, una versione
assolutamente gratuita e libera di ssh.
OpenSSH interagiva con la
versione 1 di ssh con numerose funzioni aggiunte,
-
tutte le componenti di natura restrittiva (per esempio, brevetti, vedi
ssl(8))
sono state rimosse direttamente dal codice sorgente; ogni componente
con licenza o brevettata e' usata come libreria esterna.
-
e' stato aggiornato il supporto al protocollo 1.5.
-
e' stato aggiunto il supporto per l'autenticazione Kerberos e il
ticket passing.
-
supportata l'autenticazione a password utilizzabile una sola volta con
skey(1).
Detto in breve, iniziando con una versione con licenza libera di
ssh, noi l'abbiamo OpenBSD-izzata. Circa un anno dopo
estendemmo OpenSSH anche al protocollo SSH2, e il risultato è stato di
offrire il supporto a tutti e tre i maggiori protocolli
SSH 1.3, 1.5, 2.0.
Generatori di Numeri Pseudo Casuali
Un generatore di numeri pseudo casuali (PRNG) fornisce le applicazioni
di una serie di numeri con determinate proprieta' importanti per la
sicurezza del sistema:
- Dovrebbe essere impossibile predire l'output di un generatore di
numeri casuali anche avendo a disposizione i valori predetti
precedentemente.
- Il generatore di numeri non dovrebbe avere sequenze ripetitive cioè
PRNG dovrebbe avere una lunghezza di ciclo estremamente elevata.
Un PRNG solitamente e solo un algoritmo dove gli stessi valori iniziali
danno la medesima sequenza di output.
Su un sistema operativo multiutente ci sono molte sorgenti che
permettono di fornire il PRNG di dati casuali.
Il kernel di OpenBSD usa il tempo di interrupt del mouse, la latenza
degli interrupt dei dati di rete, il tempo tra la pressione dei tasti
e le informazioni di IO per creare un insieme entropico.
I numeri casuali sono disponibili per le routine del kernel e sono
esportate mediante dispositivi ai programmi degli utenti.
Finora i numeri casuali sono usati per le seguenti applicazioni:
- Allocazione sin_port dinamica in bind(2).
- Il PID dei processi.
- L'ID dei datagrammi IP
- Transazione ID di RPC (XID).
- Transazione ID di NFS RPC (XID).
- DNS Query-IDs.
- Generazione di numeri Inode, vedi getfh(2) e fsirand(8).
- Tempo di perturbazione in traceroute(8).
- Nomi temporanei per mktemp(3) e mkstemp(3)
- Casualita' aggiunta al valore ISS TCP per la protezione contro gli
attacchi di tipo spoofing.
- Riempimento casuale nei pacchetti esp_old in IPsec.
- Per migliorare le password ottenute dai vari algoritmi.
- Per la generazione di false sfide S/Key.
- In isakmpd(8)
per fornire uno scambio di chiavi sicuro.
Funzioni di crittografia Hash
Una funzione Hash comprime i dati di ingresso in una stringa di
lunghezza costante. Per una funzione di crittografia Hash non può
capitare che:
- due dati di ingresso che hanno lo stesso output
(collision resistant),
- un differente input per un dato input con lo stesso output
(2nd preimage resistant).
In OpenBSD MD5, SHA1, e RIPEMD-160 sono usati come funzioni di
crittografia Hash per esempio:
- In S/Key(1)
per fornire password utilizzabili una sola volta.
- In IPsec(4)
e isakmpd(8)
per autenticare l'origine dei dati dei
pacchetti e per assicurarne l'integrita'.
- Per le password FreeBSD-style MD5 (non abilitato di default), vedi
login.conf(5)
- In libssl per la firma digitale dei messaggi.
Trasformazioni crittografiche
Le trasformazioni crittografiche sono usate per cifrare e decifrare
dati. Di solito sono usate insieme ad una chiave di cifratura per
cifrare i dati e con una chiave decifratura per decifrarli.
La sicurezza di una trasformazione crittografica dovrebbe dipendere
solo dal tipo di chiave.
OpenBSD fornisce trasformazioni come DES, 3DES, Blowfish e Cast per
kernel e programmi utente e molte applicazioni:
- In libc per creare le password
Blowfish.
Vedi anche il
documento USENIX su questo
argomento.
- In IPsec(4)
fornisce riservatezza per il layer network.
- In isakmpd(8)
per proteggere gli scambi dove viene negoziata la chiave IPsec.
- In AFS per proteggere i messaggi che attraversano la rete,
fornendo riservatezza all'accesso al filesystem remoto.
- In libssl per consentire alle applicazioni di comunicare
utilizzando il protocollo standard de-facto di crittografia secure SSL.
Supporto hardware di crittografia
OpenBSD, a partire con la versione 2.7, ha iniziato a supportare
hardware di crittografia come acceleratori e generatori di numeri
casuali.
-
Crittografia IPsec dequeue
Il nostro stack IPsec e' stato modificato cosi' che le funzioni di
crittografia sono realizzate all'esterno. I piu' semplici software
stack IPsec hanno bisogno di crittografia quando si processa ogni
pacchetto. Questo ha effetto sulle performance sincrone.
Per usare l'hardware in modo opportuno aumentando la velocita' e'
necessario separare queste due componenti, come abbiamo fatto noi.
Attualmente, fare cio' permette di guadagnare in performance persino
rispetto ai software proprietari.
-
Hifn 7751
Schede che usano Hifn 7751 possono essere usate come acceleratore di
crittografia simmetrica, cioe' , il
Soekris VPN1201 o VPN1211
(da comprare)
o PowerCrypt.
Le prestazioni attuali usando un solo Hifn 7751 ad ogni estremo di un
tunnel e' 64Mbit/sec per 3DES/SHA1 ESP, con un miglioramento di quasi
il 600% rispetto a un P3/550 CPU.
Ulteriori miglioramenti sono in corso per risolvere qualche altro
problema, ma a partire dal 13 aprile 2000 il codice e' considerato
stabile. Abbiamo scritto il nostro driver personale per supportare
questo chip, piuttosto che usare il driver
PowerCrypt (scritto in USA),
anche il nostro driver si integra correttamente allo stack IP.
Attualmente gli standard industriali considerano lento il 7751 e molti
fornitori hanno chip piu' veloci (persino Hifn ora ha un chip piu'
veloce ma piu' costoso).
Il picco di prestazioni con 3DES SHA1 ESP e' di circa 64Mbit/sec.
Dopo l'uscita della versione 2.9 e' stato aggiunto il supporto per il
chip Hifn 7951, una versione semplificata del 7751 che aggiunge un
acceleratore a chiave pubblica (non supportato) e un generatoae di
numeri casuali (supportato). Le schede sono state fornite da
Soekris Engineering.
Dopo il rilascio della versione 3.0 e' stato aggiunto il supporto per
il chip Hifn 7811, una versione piu' veloce del 7751 (circa130Mbit/s)
con un generatore di numeri casuali.
Una scheda e' stata fornita da GTGI.
Dopo l'uscita della versione 3.2 e' stato aggiunto il supporto per il
compressore logaritmico LZS usato da
ipcomp(4).
Dopo il rilascio della versione 3.4 e' stato aggiunto il supporto per
i chip 7955 e 7956. Questi aggiungono l'AES a tutte le funzioni del
precedente chip 7951
Inizialmente e' stato difficile avere a che fare con l'azienda Hifn
(ricevendo minaccie di denuncie per il nostro reverse engineering , non
statunitense, del loro algoritmo crittografico aperto), ma piu'
recentemente sono venuti in aiuto nel fornire schede e supporto.
-
Hifn 6500
Questo dispositivo e' una unita' crittografica asimmetrica.
Ha il supporto per RSA, DSA, e l'algoritmo DH ed inoltre ha altre
numerose importanti funzioni.
Contiene inoltre un generatore di numeri casuali ad elevate
prestazioni. Abbiamo un dispositivo, completamente documentato e con
esempio di codice. A partire da OpenBSD 3.1, sia il generatore di
numeri casuali che l'unita' big number sono in funzione.
-
Hifn 7814/7851/7854
Questo dispositivo e' un processore di pacchetto e una unita'
crittografica asimmetrica. Ha il supporto per gli algoritmi RSA, DSA,
e DH, e di altre importanti funzioni con grandi numeri ed inoltre ha
un generatore di numeri casuali. Attualmente, solo la macchina big
number e il generatore di numeri casuali sono supportati
(non le trasformazioni sul pacchetto).
-
Broadcom BCM5801/BCM5802/BCM5805/BCM5820/BCM5821/BCM5822/5823/5825/5860/5861/5862
(oppure il chip beta Bluesteelnet 5501/5601)
Appena dopo l'uscita della versione OpenBSD 2.7, riuscimmo ad
aggiungere un supporto preliminare per queste prime versioni date a noi
dal fornitore, in modo specifico a partire con il chip di test 5501.
Questi dispositivi forniscono le piu' elevate prestazioni di
crittografia simmetrica mai viste da noi.
Bluesteelnet e' stata acquistata dalla Broadcom e ha iniziato a
realizzare le parti. Il loro nuovo BCM5805 e' simile, eccetto che
aggiungono anche una macchina asimmetrica per far funzionare il DSA,
RSA e altri di questi algoritmi. Partendo con prestazioni approssimate
la velocita' e' quattro volte superiore rispetto Hifn, con la speranza
che questo chip diverra' presto molto comune.
I tecnici della Broadcom/Bluesteelnet sono stati disponibilissimi.
Ci hanno fornito tutta la documentazione ed esempi di codice per i
loro chip e un numero sufficiente di schede da testare.
Dopo la versione 2.8, questo driver e' stato anche modificato per
generare numeri casuali sul BCM5805 e versioni simili, e fornire quei
dati al sistema entropico del kernel.
Dopo la 2.9, il supporto e' stato aggiunto per la BCM5870, la quale e'
una versione piu' veloce (64bit, velocita' di clock piu' alta) della
BCM5805. Dopo la 3.0 e' stato anche aggiunto un supporto non testato
per la BCM5821.
A partire dalla 3.1, il dispositivo big number e' supportato e le
operazioni RSA/DH/DSA possono essere accelerate.
Il supporto per la BCM5801, BCM5802, BCM5821 e BCM5822 e' stato
aggiunto prima di OpenBSD 3.2 (il supporto non testato BCM5821 nella
3.1 e' stato rotto a causa di un utilizzo non corretto delle richieste
di interrupt per mancanza di documentazione).
Supporto parziale per il BCM5823 è stato aggiunto per la 3.4.
Supporto per i BCM5825, BCM5860, BCM5861, and BCM5862 incluso il supporto
per AES con il BCM5823 o più nuovi è stato aggiunto dopo la 4.5.
-
Securealink PCC-ISES
Il
PCC-ISES e' un nuovo chipset olandese. Abbiamo ricevuto hardware da
testare e documentazione e stiamo lavorando su un driver. Al momento,
il driver e' in grado di fornire numeri random nel sistema entropico
del kernel.
-
SafeNet SafeXcel 1141/1741
Dopo l'uscita della versione 3.4, è stato aggiunto il supporto per
questi due chip (trovato su varie schede crittografiche
SafeNet
Supporto a Des, Triple-DES, AES, MD5, e operazioni di crittografia
simmetrica SHA-1, RNG, operazioni a chiave pubblica, e completo
utilizzo di IPsec packet.
- SafeNet SafeXcel 1840
Abbiamo ricevuto documentazione e hardware da testare per il chip di
crittografia
SafeNet 1840.
Lavoriamo per supportare almeno l'RNG e la
crittografia simmetrica di questi dispositivi.
- SafeNet SafeXcel 2141
Abbiamo ricevuto documentazione e Hardware per il chip di crittografia
SafeNet 2141.
Il lavoro per supportare almeno la crittografia simmetrica di questi
dispositivi e' iniziata.
-
3com 3cr990
3com ci ha fornito un driver per supportare ethernet di quel chipset
e sulla base di questo abbiamo scritto il nostro driver ethernet.
Quando siamo riusciti ad avere una licenza libera del codice il driver
e' stato integrato. A causa della documentazione limitata e della
mancanza di cooperazione (in parte dovuta all'elevato cambio di
personale della 3Com) le funzioni di IPsec del chip non sono
supportati.... cosi' il risultato e' praticamente inutile.
- Scheda Intel IPsec
Intel si comporta allo stesso modo per tutte le loro divisioni di
networking, e a differenza della maggioranza degli altri fornitori
Intel steadfastly refuses to provide us with documentation.
Intel ferma sulle sue posizioni rifiuta di fornirci documentazione.
Abbiamo parlato con circa cinque tecnici che sono coinvolti nello
sviluppo di questi prodotti.
Volevano tutti fornirci la documentazione. Si sono complimentati per
quello che abbiamo fatto. Ma le loro mani sono legate dal management
che non ricevono un compenso nel fornirci la documentazione.
Scordiamoci di Intel. (Se vuoi comprare un hardware ethernet gigabit,
noi vi raccomandiamo qualsiasi altra marca... per la medesima ragione:
la maggior parte dei driver che abbiamo per l'hardware di networking
Intel sono stati scritti senza documentazione).
-
Intel 82802AB/82802AC Firmware Hub RNG
Il chip 82802 FWH (trovato sulle motherboarb i810, i820, i840, i850,
e i860) contiene un generatore di numeri casuali (RNG). Le elevate
prestazioni di IPsec richiedono numeri random ad entropia piu'
elevata. A partire dal 10 aprile 2000, noi supportiamo l' RNG.
Aggiungeremo supporto per altri RNG su chip di crittografia.
- VIA C3 RNG
La piu' nuova CPU VIA C3 contiene un generatore di numeri casuali
utilizzabile con un'istruzione. A partire dalla
3.3 questo generatore di numeri casuali e' usato all'interno del
kernel per alimentare il sistema entropico.
- Istruzioni VIA C3 AES
VIA C3 CPU con una step 8 o con un piu' recente core Nehemiah
contiene una implementazione AES accessibile con semplici istruzioni.
A partire dalla 3.4 il kernel le supporta
utilizzandole in un contesto IPsec ed esportate da /dev/crypto.
A partire dalla 3.5 le prestazioni sono state
migliorate di molto e ora OpenSSL usa la nuova istruzione direttamente,
quando disponibile, senza la necessità di entrare nel kernel come
risultato di un notevole miglioramento della velocita' (AES-128
misurata a 780MByte/sec) per applicazioni che usano OpenSSL con
prestazioni di crittografia AES.
- OpenSSL
Anni fa, avevamo un grande obiettivo per supportare le schede di
crittografia che possono automaticamente utilizzare RSA/DH/DSA
attraverso chiamate via OpenSSL. Dalla versiome 3.2 di OpenBSD, che il
supporto funziona, e ogni scheda che e' supportata con quelle funzioni
utilizzera' automaticamente l'hardware, includendo OpenSSH e httpd in
modalità SSL. Nessuna cambio nelle applicazioni e' richiesta.
Se qualcuno desiderasse aiutarci a scrivere driver,
venite e aiutateci.
Ricerca internazionale di crittografi
E' chiaro, il nostro progetto ha bisogno di persone che si occupino di
questi sistemi. Ogni crittografo, non americano, con i vincoli elencati
precedentemente, interessato a fornire aiuto nella crittografia in
OpenBSD, per cortesia ci contatti.
Ulteriori letture
Un certo numero di documenti sono stati scritti dai membri del gruppo
di OpenBSD, per descrivere i cambiamenti crittografici in OpenBSD.
La versione postscript di questi documenti sono disponibili di seguito.
- Uno schema di Password adattabile al futuro.
Usenix 1999, di
Niels Provos,
David Mazieres.
documento e
diapositive.
- Crittografia in OpenBSD: una panoramica
Usenix 1999, di
Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
documento e
diapositive.
- Implementando l'Internet Key Exchange (IKE).
Usenix 2000, di
Niklas Hallqvist e
Angelos D. Keromytis.
documento e
diapositive.
- Cifrare la memoria virtuale.
Usenix Security 2000,
Niels Provos.
documento e
diapositive.
- La progettazione del framework crittografico di OpenBSD.
Usenix 2003, di
Angelos D. Keromytis,
Jason L. Wright, e
Theo de Raadt.
documento.
- Crittografia come un servizio di un sistema operativo:
inchiesta.
Transazioni ACM su un computer,
February 2006, di
Angelos D. Keromytis,
Jason L. Wright, e
Theo de Raadt.
documento.
www@openbsd.org
$OpenBSD: crypto.html,v 1.4 2011/05/07 08:22:01 ajacoutot Exp $