Copertina
Autore Bruce Schneier
CoautoreNiels Ferguson
Titolo Crittografia pratica
SottotitoloGuida completa
EdizioneApogeo, Milano, 2005, , pag. 318, cop.fle., dim. 167x240x17 mm , Isbn 978-88-503-2168-1
TraduttoreAngelo Magliocco
LettoreCorrado Leonardo, 2005
Classe informatica: sistemi , informatica: reti , informatica: applicazioni , scienze tecniche
PrimaPagina


al sito dell'editore


per l'acquisto su IBS.IT

per l'acquisto su BOL.IT

per l'acquisto su AMAZON.IT

 

| << |  <  |  >  | >> |

Indice

Prefazione                                                XV

Capitolo 1  La filosofia di questo volume                  1

1.1 Inconvenienti delle prestazioni                        2
1.2 Inconvenienti della ricchezza di funzionalità          4

Capitolo 2  Ruolo della crittografia                       5

2.1 Compito della crittografia                             6
2.2 La proprietà dell'anello più debole                    6
2.3 L'ambiente antagonistico                               8
2.4 Paranoia pratica                                       9
    2.4.1   L'attacco                                     10
2.5 Il modello delle minacce                              11
2.6 La crittografia non è la soluzione                    12
2.7 La crittografia è molto difficile                     13
2.8 La crittografia è la parte più semplice               14
2.9 Letture consigliate                                   15

Capitolo 3  Introduzione alla crittografia                17

3.1 La codifica                                           17
    3.1.1 Il principio di Kerckhoffs                      18
3.2 L'autenticazione                                      19
3.3 Crittografia a chiave pubblica                        21
3.4 Firme digitali                                        22
3.5 Infrastruttura a chiave pubblica                      23
3.6 Attacchi                                              24
    3.6.1 Attacco con solo testo cifrato                  25
    3.6.2 Attacco con testo in chiaro noto                25
    3.6.3 Attacco con testo in chiaro scelto              25
    3.6.4 Attacco con testo cifrato scelto                26
    3.6.5 Attacco discriminante                           26
    3.6.6 Attacco del compleanno                          27
    3.6.7 Attacco della convergenza                       27
    3.6.8 Altri tipi di attacco                           29
3.7 Il livello di sicurezza                               29
3.8 Efficienza                                            3O
3.9 Complessità                                           31


Parte I   La sicurezza dei messaggi


Capitolo 4  I codici a blocchi                            35

4.1 Che cos'è un codice a blocchi?                        35
4.2 Tipi di attacco                                       36
4.3 Il codice a blocchi ideale                            37
4.4 Definizione della sicurezza di un codice a blocchi    38
    4.4.1 Parità di una permutazione                      40
4.5 Codici a blocchi reali                                41
    4.5.1 DES                                             41
    4.5.2 AES                                             44
    4.5.3 Serpent                                         47
    4.5.4 Twofish                                         47
    4.5.5 Gli altri finalisti di AES                      49
    4.5.6 Attacchi basati sulla soluzione di equazioni    50
    4.5.7 Quale codice a blocchi scegliere?               51
    4.5.8 Quale dovrebbe essere la dimensione
          della chiave?                                   52

Capitolo 5  Modalità operative dei codici a blocchi       55

5.1 Riempimento                                           56
5.2 ECB                                                   57
5.3 CBC                                                   57
    5.3.1 VI fisso                                        57
    5.3.2 VI a contatore                                  58
    5.3.3 VI casuale                                      58
    5.3.4 VI generati con "nonce"                         59
5.4 OFB                                                   60
5.5 CTR                                                   61
5.6 Le modalità più recenti                               62
5.7 Quale modalità utilizzare?                            62
5.8 Fughe di informazioni                                 63
    5.8.1 Probabilità di collisione                       65
    5.8.2 Come contrastare le fughe di informazioni       65
    5.8.3 Una nota sulle formule matematiche              66

Capitolo 6  Funzioni di hashing                           67

6.1 Sicurezza delle funzioni di hashing                   68
6.2 Funzioni di hashing reali                             69
    6.2.1 MD5                                             70
    6.2.2 SHA-1                                           71
    6.2.3 SHA-256, SHA-384 e SHA-512                      71
6.3 Punti deboli delle funzioni di hashing                72
    6.3.1 Estensione della lunghezza                      72
    6.3.2 Collisione dei messaggi parziali                73
6.4 Correzione dei punti deboli                           74
    6.4.1 Una rettifica radicale                          74
    6.4.2 Una rettifica più efficiente                    75
6.5 Quale funzione di hashing scegliere?                  76
6.6 Il lavoro futuro                                      77

Capitolo 7  I codici MAC                                  79

7.1 Utilità delle funzioni MAC                            79
7.2 La funzione MAC ideale                                80
7.3 Sicurezza di una funzione MAC                         80
7.4 CBC-MAC                                               81
7.5 HMAC                                                  82
    7.5.1 HMAC e SHAd                                     83
7.6 UMAC                                                  84
    7.6.1 Dimensione di un MAC                            84
    7.6.2 Quale UMAC utilizzare?                          85
    7.6.3 Flessibilità delle piattaforme                  86
    7.6.4 La profondità dell'analisi                      86
    7.6.5 Perché abbiamo menzionato UMAC allora?          87
7.7 Quale MAC scegliere?                                  87
7.8 Utilizzo di una funzione MAC                          88

Capitolo 8  Il canale sicuro                              91

8.1 Definizione del problema                              91
    8.1.1 I ruoli                                         91
    8.1.2 La chiave                                       92
    8.1.3 Sequenza o flusso                               92
    8.1.4 Le proprietà di sicurezza                       93
8.2 Ordine di autenticazione e codifica                   94
8.3 Profilo della soluzione                               96
    8.3.1 Numerazione dei messaggi                        96
    8.3.2 Autenticazione                                  97
    8.3.3 Codifica                                        97
    8.3.4 Formato del frame                               98
8.4 I dettagli                                            98
    8.4.1 Inizializzazione                                98
    8.4.2 Invio di un messaggio                           99
    8.4.3 Ricezione di un messaggio                      100
    8.4.4 Ordine dei messaggi                            101
8.5 Le alternative                                       102
8.6 Conclusione                                          103

Capitolo 9  Problematiche di implementazione (I)         105

9.1 Una corretta implementazione dei programmi           106
    9.1.1 Le specifiche                                  107
    9.1.2 Test e correzioni                              107
    9.1.3 L'indolenza dell'industria                     108
    9.1.4 Che fare?                                      109
9.2 La realizzazione di software sicuro                  119
9.3 Mantenere i segreti                                  110
    9.3.1 Azzeramento dello stato                        110
    9.3.2 Il file di paginazione                         112
    9.3.3 La cache                                       113
    9.3.4 La permanenza dei dati in memoria              114
    9.3.5 L'accesso di programmi esterni                 116
    9.3.6 Integrità dei dati                             116
    9.3.7 Che cosa fare                                  117
9.4 La qualità del codice                                117
    9.4.1 Semplicità                                     117
    9.4.2 Suddivisione in moduli                         118
    9.4.3 Istruzioni ASSERT                              119
    9.4.4 Overflow dei buffer                            120
    9.4.5 La fase di test                                120
9.5 Attacchi del canale laterale                         121
9.6 Conclusioni                                          122


Parte II   La negoziazione delle chiavi


Capitolo 10  Generare la casualità                       125

10.1 La reale casualità                                  126
     10.1.1 Impiego di dati realmente casuali: i problemi127
     10.1.2 Dati pseudocasuali                           127
     10.1.3 Dati realmente casuali e PRNG                128
10.2 Modelli di attacco per un PRNG                      129
10.3 Fortuna                                             130
10.4 Il generatore                                       130
     10.4.1 Inizializzazione                             132
     10.4.2 Rinnovo del seme                             132
     10.4.3 Generazione dei blocchi                      133
     10.4.4 Generazione di dati casuali                  133
     10.4.5 Efficienza del generatore                    134
10.5 L'accumulatore                                      134
     10.5.1 Fonti di entropia                            134
     10.5.2 Pool di eventi                               135
     10.5.3 Considerazioni sull'implementazione          137
     10.5.4 Inizializzazione                             139
     10.5.5 Richiesta di dati casuali                    139
     10.5.6 Introduzione di un evento                    140
10.6 Gestione del file del seme                          141
     10.6.1 Scrittura del file del seme                  142
     10.6.2 Aggiornamento del file del seme              142
     10.6.3 Quando leggere e scrivere il file del seme   143
     10.6.4 Back-up                                      143
     10.6.5 Atomicità degli aggiornamenti del file system144
     10.6.6 Primo riavvio                                144
10.7 Quale soluzione adottare?                           145
10.8 Scelta di elementi casuali                          145

Capitolo 11  I numeri primi                              147

11.1 Divisibilità e numeri primi                         147
11.2 Generazione di piccoli numeri primi                 150
11.3 Calcoli con i primi e aritmetica modulare           151
     11.3.1 Addizione e sottrazione                      152
     11.3.2 Moltiplicazione                              152
     11.3.3 Gruppi e campi finiti                        153
     11.3.4 Algoritmo del MCD                            154
     11.3.5 Algoritmo di Euclide esteso                  155
     11.3.6 Effettuare operazioni modulo 2               156
11.4 I grandi numeri primi                               156
     11.4.1 Il test di primalità                         159
     11.4.2 Calcolo delle potenze                        161

Capitolo 12  Diffie-Hellman                              163

12.1 Gruppi                                              164
12.2 Protocollo DH di base                               165
12.3 L'intruso                                           166
12.4 Insidie del protocollo                              167
12.5 Numeri primi sicuri                                 168
12.6 Adozione di un sottogruppo più piccolo              169
12.7 Dimensione di p                                     169
12.8 Regole pratiche                                     171
12.9 Potenziali pericoli                                 172

Capitolo 13  RSA                                         175

13.1 Introduzione                                        175
13.2 Il teorema cinese del resto (TCR)                   176
     13.2.1 Formula di Garner                            176
     13.2.2 Generalizzazioni                             177
     13.2.3 Applicazioni del TRC                         177
     13.2.4 Conclusione                                  178
13.3 Moltiplicazione modulo n                            179
13.4 Definizione del sistema RSA                         179
     13.4.1 Firma digitale con RSA                       180
     13.4.2 Esponenti pubblici                           180
     13.4.3 Chiave privata                               181
     13.4.4 La dimensione di n                           182
     13.4.5 La generazione delle chiavi RSA              182
13.5 Insidie di RSA                                      184
13.6 Codifica                                            185
13.7 Firma digitale                                      187

Capitolo 14  Introduzione ai protocolli crittografici    191

14.1 I ruoli                                             191
14.2 La fiducia                                          192
     14.2.1 Il rischio                                   193
14.3 L'incentivo                                         193
14.4 La fiducia nei protocolli crittografici             195
14.5 Messaggi e operazioni                               196
     14.5.1 Livello di trasporto                         196
     14.5.2 Identità del protocollo e dei messaggi       197
     14.5.3 Codifica e parsing dei messaggi              198
     14.5.4 Stati di esecuzione del protocollo           198
     14.5.5 Errori                                       199
     14.5.6 Repliche e ripetizioni                       200

Capitolo 15  Protocollo di negoziazione della chiave     203

15.1 Scenario                                            203
15.2 Un primo passo                                      204
15.3 Un protocollo è per sempre                          205
15.4 Una convenzione per l'autenticazione                206
15.5 Un secondo passo                                    207
15.6 Un terzo passo                                      208
15.7 Protocollo finale                                   209
15.8 Prospettive del protocollo                          211
     15.8.1 La prospettiva di Alice                      211
     15.8.2 La prospettiva di Bob                        211
     15.8.3 La prospettiva dell'hacker                   212
     15.8.4 Quando la chiave è compromessa               213
15.9 Complessità di calcolo del protocollo               213
     15.9.1 Alcune ottimizzazioni                        214
15.10 Complessità del protocollo                         214
15.11 Un (sommesso) avvertimento                         216
15.12 Negoziazione a partire da una password             216

Capitolo 16  Problematiche di implementazione (II)       217

16.1 L'aritmetica sugli interi di grandi dimensioni      217
     16.1.1 Wooping                                      219
     16.1.2 Verifica dei calcoli DH                      221
     16.1.3 Verifica della codifica RSA                  221
     16.1.4 Verifica delle firme RSA                     222
     16.1.5 Conclusione                                  222
16.2 Velocizzare la moltiplicazione                      222
16.3 Attacchi del canale laterale                        223
     16.3.1 Contromisure                                 224
16.4 Protocolli                                          225
     16.4.1 Protocolli che operano su un canale sicuro   226
     16.4.2 Ricezione di un messaggio                    226
     16.4.3 Timeout                                      228


Parte III   La gestione delle chiavi


Capitolo 17  L'orologio                                  231

17.1 Impieghi dell'orologio                              231
     17.1.1 Scadenze                                     231
     17.1.2 Un valore unico                              232
     17.1.3 Monotonicità                                 232
     17.1.4 Transazioni in tempo reale                   232
17.2 Chip dell'orologio di sistema                       233
17.3 Pericoli per la sicurezza                           233
     17.3.1 Spostamento indietro dell'orologio           234
     17.3.2 Arresto dell'orologio                        234
     17.3.3 Spostamento in avanti dell'orologio          235
17.4 Realizzare un orologio affidabile                   235
17.5 Il problema dello stato invariante                  236
17.6 L'ora                                               238
17.7 Conclusione                                         239

Capitolo 18  I server delle chiavi                       241

18.1 Concetti fondamentali                               242
18.2 Kerberos                                            242
18.3 Alcune soluzioni più semplici                       243
     18.3.1 La connessione sicura                        243
     18.3.2 Impostazione di una chiave                   244
     18.3.3 Il rinnovo delle chiavi                      244
     18.3.4 Altre proprietà                              244
18.4 La scelta                                           245

Capitolo 19  Il sogno delle PKI                          247

19.1 Breve panoramica delle PKI                          247
19.2 Esempi di PKI                                       248
     19.2.1 PKI universale                               248
     19.2.2 Accesso tramite VPN (rete privata virtuale)  248
     19.2.3 Transazioni bancarie online                  248
     19.2.4 I sensori delle raffinerie                   249
     19.2.5 Circuiti delle carte di credito              249
19.3 Altri dettagli                                      249
     19.3.1 Certificati multilivello                     249
     19.3.2 La scadenza                                  251
     19.3.3 Un'autorità di registrazione distinta        251
19.4 Conclusione                                         252

Capitolo 20  La realtà delle PKI                         253

20.1 I nomi                                              253
20.2 L'autorità                                          255
20.3 La fiducia                                          255
20.4 L'autorizzazione indiretta                          256
20.5 Autorizzazione diretta                              257
20.6 Sistemi di credenziali                              258
20.7 Il sogno modificato                                 260
20.8 La revoca                                           260
     20.8.1  CRL                                         261
     20.8.2  La scadenza rapida                          262
     20.8.3  La revoca è tassativa                       262
20.9 La reale utilità delle PKI                          262
20.10 La scelta                                          264

Capitolo 21  Aspetti pratici delle PKI                   265

21.1 Formato dei certificati                             265
     21.1.1 Il linguaggio dei permessi                   265
     21.1.2 La chiave radice                             266
21.2 Vita di una chiave                                  267
21.3 Perché le chiavi si logorano                        268
21.4 La decisione                                        269

Capitolo 22  Conservazione dei segreti                   271

22.1 Dischi                                              271
22.2 Memoria umana                                       272
     22.2.1 Il salt e l'allungamento                     273
22.3 Conservazione su carta e supporti portatili         275
22.4 Dispositivi sicuri                                  276
22.5 Interfaccia utente sicura                           277
22.6 Biometria                                           278
22.7 Sistemi di login centralizzato                      279
22.8 Il rischio dello smarrimento delle password         279
22.9 Distribuzione di quote di segreti                   280
22.10 Cancellazione dei segreti                          281
      22.10.1 Carta                                      281
      22.10.2 Supporti magnetici                         281
      22.10.3 Supporti non meccanici                     283


Parte IV   Miscellanea


Capitolo 23  Gli standard                                287

23.1 Definizione degli standard                          287
     23.1.1 Standard                                     289
     23.1.2 Funzionalità                                 289
     23.1.3 Sicurezza                                    289
23.2 SSL                                                 290
23.3 AES: la gara per la definizione degli standard      291

Capitolo 24  I brevetti                                  293

24.1 La prior art, ovvero la questione dell'innovazione  293
24.2 La continuazione                                    294
24.3 Tecnologie vaghe                                    294
24.4 La lettura dei brevetti                             295
24.5 Le licenze                                          295
24.6 I brevetti difensivi                                296
24.7 Correggere il sistema dei brevetti                  297
24.8 Limitazione di responsabilità                       298

Capitolo 25  Il consulto di esperti                      299

Bibliografia                                             303
Indice analitico                                         311

 

 

| << |  <  |  >  | >> |

Pagina XV

Prefazione


Nell'ultimo decennio l'impatto della crittografia sulla sicurezza dei sistemi digitali ha avuto effetti più negativi che positivi. Questa scienza cominciò ad essere propagandata agli inizi degli anni '90 come lo strumento in grado di rendere Internet sicura. Alcuni la consideravano una "livella" tecnologica, cioè uno strumento matematico in grado di porre sullo stesso piano gli individui comuni, interessati alla garanzia delle propria privacy, e le grandi agenzie di intelligence; altri la consideravano un'arma potenzialmente capace di rovesciare i governi, se questi ultimi avessero perduto la capacità di controllare i movimenti delle persone nel cyberspazio; altri ancora la consideravano uno strumento perfetto e terribile per la comunicazione confidenziale tra mercanti di stupefacenti, terroristi e pedopornofili. Persino coloro che avevano i piedi per terra più di tutti gli altri ritenevano che la tecnologia crittografica avrebbe permesso l'espandersi del commercio globale nel mondo online.

Dieci anni dopo, nessuna di queste profezie si è rivelata fondata. Nonostante l'imporsi della crittografia, i confini nazionali di Internet sono oggi più apparenti di quanto non lo siano mai stati. La possibilità di rilevare e spiare comunicazioni criminali è correlata maggiormente alla politica e alle risorse umane che alla matematica. Gli individui non possono ancora nulla contro le agenzie governative, troppo potenti e ben finanziate. Infine, l'aumento del commercio globale non è in alcuna relazione con l'imporsi della crittografia.

Fondamentalmente, la crittografia si è limitata a dare agli utenti di Internet un falso senso di sicurezza, promettendola ma non assicurandola. Ciò non è positivo, eccetto che per gli hacker.

I motivi di ciò non sono tanto in relazione con la crittografia come branca della matematica, quanto con la crittografia come disciplina dell'ingegneria del software. Noi abbiamo sviluppato, implementato e installato sul campo diversi sistemi crittografici nell'ultimo decennio, ma non siamo riusciti a convertire con altrettanta efficacia le promesse teoriche e matematiche della crittografia in sicurezza reale. Difatti, è proprio questo l'obiettivo più difficile.

Fin troppi progettisti considerano la crittografia come una sorta di polvere magica in grado di rendere sicuri l'hardware o il software che ne sono toccati, imbevendoli della mitica proprietà della "sicurezza"; fin troppi consumatori, d'altra parte, sono abbagliati da etichette come "cifratura" e finiscono per credere nella stessa polvere magica. Non sono da meno i recensori, che si limitano a confrontare la lunghezza delle chiavi e, sulla base di essa, a proclamare un prodotto più sicuro di un altro.

La sicurezza di un sistema ha la robustezza del suo anello più debole e la matematica della crittografia non costituisce praticamente mai tale anello. I concetti fondamentali della crittografia sono importanti, ma sono ancora più importanti la loro implementazione e il loro impiego. Discutere se una chiave debba essere lunga 112 i 128 bit equivale a piantare una grossa palizzata nel terreno sperando che l'hacker non sappia far altro che scavalcarla per entrarvi. Si può discutere variamente e a lungo sull'altezza della palizzata, ma l'hacker sicuramente tenterà di aggirarla e non di valicarla. La sicurezza è una grossa palizzata: è tutto ciò che circonda la crittografia a renderla efficace.

I testi crittografici degli ultimi dieci anni hanno dato il propri ontributo a quest'aura di magia. Uno dopo l'altro hanno esaltato le doti del 3DES a 112 bit, per esempio, senza soffermarsi gran che sul modo in cui tali chiavi dovrebbero essere generate o utilizzate. Essi hanno presentato protocolli complicati per questo o quello scopo, senza menzionare i vincoli commerciali e sociali in cui essi devono inserirsi nella realtà. Ancora, tali testi hanno illustrato la crittografia come un'ideale puramente matematico, non contaminato dalle condizioni del mondo reale. Tuttavia, sono proprio tali vincoli e tali condizioni a fare la differenza tra una polvere magica inconsistente e un vero sistema di sicurezza digitale.

Il nostro libro è anche un libro sulla crittografia teorica, ma diremmo piuttosto che è un libro sulla realtà della crittografia. Nostro obiettivo è descrivere esplicitamente i vincoli e le condizioni che il mondo reale impone alla crittografia, illustrando quindi come progettare un sistema crittografico sicuro. In qualche modo, questi libro è il seguito del precedente di Bruce Schneier Crittografia applicata, pubblicato ormai dieci anni or sono. Mentre quel testo illustrava una panoramica più ampia della crittografia e delle miriadi di possibilità offerte da questa scienza, l'argomento di questo libro è molto circoscritto. Non vi diamo decine di opzioni: ve ne diamo una e vi diciamo come implementarla correttamente. Il testo precedente mostra le meravigliose possibilità della crittografia, intesa come scienza matematica, illustrando che cosa è concepibile e che cosa è possibile ottenere; questo testo, invece, è gravido di consigli concreti, a uso di coloro che progettano e implementano sistemi crittografici.

Questo libro rappresenta il nostro tentativo di riempire il vuoto tra la promessa teorica della crittografia e la sua realtà: cerchiamo di insegnare ai progettisti come avvalersi della crittografia per elevare la sicurezza dei sistemi.

Noi siamo qualificati a scrivere un libro di questo genere, perché siamo da molti anni crittanalisti: Bruce è ben noto per i suoi libri precedenti e per la sua newsletter "Crypto-Gram"; Niels Ferguson ha affinato le proprie arti di crittanalista realizzando sistemi di pagamento presso il CWI (Istituto nazionale delle ricerche olandese nella matematica e nell'informatica) di Amsterdam e in seguito presso una Society olandese denominata DigiCash; Bruce ha progettato l'algoritmo di codifica Blowfish ed entrambi abbiamo fatto parte del team di progetto di Twofish. Le ricerche di Niels hanno portato al primo esempio efficiente di protocollo di pagamento in anonimato della generazione corrente; abbiamo scritto non decine, bensì centinaia di documenti di livello accademico sull'argomento.

Cosa più importante, abbiamo entrambi un'esperienza di lunga data nella progettazione e nell'implementazione di sistemi crittografici. Dal 1991 al 1999, la Società di consulenza di Bruce (Counterpane Systems) ha progettato e analizzato servizi per alcune delle aziende informatiche e finanziarie più grandi del mondo. Più recentemente, Counterpane Internet Security Inc. ha fornito sistemi di gestione e monitoraggio della sicurezza a grandi gruppi commerciali e ad agenzie governative di tutto il mondo. Anche Niels ha lavorato a Counterpane prima di fondare la propria Società di consulenza, la MacFergus. Abbiamo visto l'applicazione della crittografia in svariate realtà operative, constatandone a volte lo stridente contrasto con la realtà dell'ingegneria del software o peggio delle necessità commerciali. Siamo qualificati a scrivere questo libro perché abbiamo dovuto "scriverlo" di continuo e svariate volte per i clienti delle nostre Società di consulenza.


Come leggere questo volume

Questo volume è piuttosto una narrazione anziché una guida di riferimento canonica. Esso esamina la progettazione dei sistemi crittografici considerando innanzitutto gli algoritmi vagliati per ogni caso specifico, giungendo man mano, come in una serie di cerchi concentrici via via più grandi, a illustrare l'infrastruttura necessaria per il loro funzionamento.

Il problema crittografico che abbiamo affrontato è unico. Esso è alla base di quasi ogni applicazione della crittografia: consentire a due persone di comunicare in modo sicuro. Concentrandoci su un solo problema e una sola filosofia di progettazione, abbiamo ritenuto che il risultato avrebbe illustrato in maniera più adeguata la realtà dell'ingegneria del software crittografico.

| << |  <  |  >  | >> |

Pagina 13

2.7 La crittografia è molto difficile

La crittografia è maledettamente difficile. Persino i progettisti più esperti elaborano sistemi che vengono violati nell'arco di qualche anno. È una situazione talmente comune che ormai non ci sorprende più. La proprietà dell'anello più debole e l'ambiente antagonistico cospirano per rendere la vita del crittografo molto dura.

Un altro problema degno di nota è l'impossibilità di condurre test. Non possiamo in alcun modo, da noi conosciuto, testare se un sistema è sicuro. Al massimo possiamo renderlo pubblico e farlo esaminare da altri esperti, ma la seconda parte non è automatica: ci sono molti sistemi pubblici che nessuno ha avuto interesse a esaminare sin dalla loro pubblicazione. Persino gli atti delle conferenze e le riviste specializzate ricevono soltanto recensioni elementari e limitate e l'esame di tali documenti è teso a setacciare più che altro il lavoro degli altri, piuttosto che a controllare l'affidabilità o la correttezza dei risultati; su tale documentazione si conduce un controllo limitato, ma tipicamente da parte di persone che non hanno il tempo di condurre un'analisi troppo approfondita e, tra l'altro, raramente remunerata: una recensione di 20 o 30 atti condotta nel proprio tempo libero difficilmente produrrà risultati rigorosamente scrupolosi.

Esistono piccole aree della crittografia che comprendiamo piuttosto bene. Ciò non significa che siano semplici, ma soltanto che ci lavoriamo da qualche decennio, per cui presumiamo di conoscerne le problematiche. Questo volume illustra prevalentemente queste aree. Il nostro impegno nella sua stesura è stato quello di raccogliere le informazioni disponibili sulla progettazione e la realizzazione di sistemi crittografici pratici, presentandole tutte in forma organica.

Per qualche motivo, le persone che non sono addentro al campo sembrano pensare che la crittografia sia semplice. Svariate volte abbiamo incontrato ingegneri elettrici o programmatori che hanno leggiucchiato un libro (in genere, Applied cryptography) e hanno deciso di progettare un proprio sistema. Finora non abbiamo mai visto un risultato decente da questo tipo di approccio, e di risultati ne abbiamo visti un bel po' nello scorso decennio. Sarebbe come se uno studente con due semestri di ingegneria civile volesse progettare un nuovo ponte rivoluzionario sullo Stretto di Bering: chi lo costruirebbe realmente o lo utilizzerebbe, senza un ulteriore esame? Per qualche motivo, invece, nel caso della crittografia le persone pagano e utilizzano sistemi realizzati da principianti. Una cattiva crittografia non è molto diversa, all'apparenza, da una realmente efficace, per cui, finché i sistemi non vengono seriamente attaccati, alcuni clienti ne sono abbagliati e acquistano il prodotto.

Non cadete nella tentazione di pensare che la crittografia sia semplice, perché non lo è.


2.8 La crittografia è la parte più semplice

Sebbene la crittografia in sé sia difficile, resta una delle parti più semplici di un sistema di sicurezza. Come una serratura, un componente crittografico ha dei limiti e dei requisiti abbastanza ben definiti. L'intero sistema di sicurezza è molto più difficile da definire con chiarezza, dato che coinvolge molti più aspetti. Per esempio, le politiche aziendali deputate a fornire l'accesso e quelle deputate a controllare che siano seguite le altre procedure rappresentano aspetti molto più complicati da gestire perché la situazione si evolve continuamente. Un altro notevole problema nel campo della sicurezza informatica è la qualità atroce di quasi tutto il software: un sistema software di sicurezza non può essere efficace se i programmi sottostanti della macchina contengono migliaia di bug che aprono ampi varchi ai malintenzionati.

La crittografia è la parte più semplice perché ci sono persone che sanno come realizzare un lavoro ragionevolmente buono. Ci sono esperti che realizzano un sistema crittografico a pagamento. Essi non sono a buon mercato e spesso è antipatico lavorarci insieme, perché insistono sulla necessità di cambiare altre parti del sistema per ottenere gli standard di sicurezza desiderati. Nondimeno, per tutti gli scopi pratici, la crittografia pone dei problemi che sappiamo come risolvere.

È il resto del sistema di sicurezza a contenere problemi che non sappiamo come risolvere. La gestione e la conservazione delle chiavi sono cruciali per ogni sistema crittografico, ma gran parte dei computer non prevede alcun luogo sicuro in cui conservare una chiave. La scarsa qualità del software, poi, è un problema che non sappiamo affatto come gestire, per non parlare della sicurezza delle reti. Aggiungendo infine al tutto gli utenti, il problema diventa quasi irrisolvibile.

| << |  <  |