Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Kryptografia
w praktyce
Autorzy: Niels Ferguson, Bruce Schneier
Tumaczenie: Romasz mijewski
ISBN: 83-7361-211-4
Tytu oryginau: Practical Cryptography
Format: B5, stron: 290
Obecnie najwaniejszym zagadnieniem w wiecie biznesu jest bezpieczestwo.
Nie majc bezpiecznego systemu komputerowego nie mona zarabia pienidzy,
nie mona rozwija dziaalnoci, wic tak naprawd nie sposb przetrwa na rynku.
Kryptografia jawi si jako metoda zapewnienia bezpieczestwa w cyberprzestrzeni.
Co ciekawe, nie pojawiy si jeszcze ksiki powicone implementowaniu kryptografii
i wczaniu jej w uywane na co dzie systemy.
W wikszoci przypadkw kryptografia daa internetowej spoecznoci niewiele
ponad zudne poczucie bezpieczestwa, gdy tak naprawd bezpieczestwa
tego dotd nie ma. Sytuacja taka nie sprzyja nikomu poza wamywaczami.
Niniejsza ksika, autorstwa spki niekwestionowanych autorytetw wiatowych,
wypenia t luk pokazujc, jak implementowa metody kryptografii w praktyce;
ksika ta stanowi zatem poczenie teorii z praktyk informatyczn.
W ksice opisano midzy innymi:
Praktyczne zasady doboru i uycia kryptograficznych funkcji elementarnych,
od szyfrw blokowych po podpisy cyfrowe.
Implementacj algorytmw kryptograficznych i budow bezpiecznych systemw.
Spjn filozofi projektowania dajca gwarancj, e ostatecznie cay system
uzyska dany poziom bezpieczestwa.
Dlaczego bezpieczestwo wpywa na wszystkie skadniki systemu i dlaczego
ma ono by podstawowym celem projektu?
Jak proste interfejsy funkcji kryptograficznych pozwalaj ograniczy zoono
systemu i zwikszy jego bezpieczestwo?
O autorach:
Niels Ferguson jest inynierem i konsultantem kryptografii. Ma on ogromne
dowiadczenie w projektowaniu i implementacji algorytmw i protokow
kryptograficznych oraz duych systemw zabezpiecze. Wczeniej pracowa na rzecz
DigiCash i CWI; w Counterpane Internet Security cile wsppracowa z Brucem
Schneierem. Opublikowa wiele prac naukowych z dziedziny kryptografii.
Bruce Schneier jest zaoycielem i dyrektorem technicznym Counterpane Internet
Security, firmy zajmujcej si monitorowaniem bezpieczestwa. Ten wiatowej sawy
naukowiec, ekspert w dziedzinie bezpieczestwa, jest autorem ksiek Secrets and
Lies: Digital Security in a Networked World oraz Applied Cryptography wydanych
przez Wiley Technology Publishing.
Spis treci
Wstp .....................................................................................................................13
Jak czyta t ksik .................................................................................................................................... 14
1.
Nasza filozofia projektowa ....................................................................................17
1.1. Zgubne skutki wydajnoci .................................................................................................................... 17
1.2. Przeklestwa rozbudowanych moliwoci........................................................................................... 19
2.
Otoczka kryptografii ..............................................................................................21
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
Rola kryptografii................................................................................................................................... 21
Regua najsabszego ogniwa................................................................................................................. 22
Wizerunek przeciwnika ........................................................................................................................ 24
Mylenie paranoiczne ........................................................................................................................... 24
2.4.1. Atak ............................................................................................................................................ 25
Model zagroe .................................................................................................................................... 26
Kryptografia nie rozwizuje problemu................................................................................................. 27
Kryptografia jest bardzo trudna ............................................................................................................ 28
Kryptografia jest atwym elementem systemu ..................................................................................... 28
Podstawowa literatura........................................................................................................................... 29
3.
Wprowadzenie do kryptografii ..............................................................................31
3.1. Szyfrowanie .......................................................................................................................................... 31
3.1.1. Zasada Kerckhoffsa .................................................................................................................... 32
3.2. Potwierdzanie tosamoci..................................................................................................................... 33
3.3. Szyfrowanie z kluczem publicznym..................................................................................................... 34
3.4. Podpis cyfrowy ..................................................................................................................................... 35
3.5. PKI........................................................................................................................................................ 36
SPIS TRECI
Cz I Bezpieczestwo komunikacji
45
4.
Szyfry blokowe ......................................................................................................47
4.1.
4.2.
4.3.
4.4.
5.
Tryby szyfrw blokowych .....................................................................................63
5.1. Dopenianie........................................................................................................................................... 63
5.2. ECB ...................................................................................................................................................... 64
5.3. CBC ...................................................................................................................................................... 65
5.3.1. Stay IV....................................................................................................................................... 65
5.3.2. IV jako licznik ............................................................................................................................ 65
5.3.3. Losowy IV .................................................................................................................................. 66
5.3.4. Jednorazowy IV.......................................................................................................................... 66
5.4. OFB ...................................................................................................................................................... 67
5.5. CTR ...................................................................................................................................................... 68
5.6. Nowe tryby ........................................................................................................................................... 69
5.7. Ktrego trybu naley uy? .................................................................................................................. 70
5.8. Wycieki informacji ............................................................................................................................... 71
5.8.1. Prawdopodobiestwo kolizji ...................................................................................................... 72
5.8.2. Jak radzi sobie z wyciekami ..................................................................................................... 73
5.8.3. O naszym podejciu do matematyki........................................................................................... 74
SPIS TRECI
6.
Funkcje mieszajce ................................................................................................75
6.1. Bezpieczestwo funkcji mieszajcych ................................................................................................. 76
6.2. Prawdziwe funkcje mieszajce ............................................................................................................. 77
6.2.1. MD5............................................................................................................................................ 78
6.2.2. SHA-1......................................................................................................................................... 78
6.2.3. SHA-256, SHA-384 i SHA-512 ................................................................................................. 79
6.3. Sabe punkty funkcji mieszajcych ...................................................................................................... 79
6.3.1. Wyduanie ................................................................................................................................. 80
6.3.2. Kolizja czci wiadomoci ......................................................................................................... 80
6.4. Usuwanie sabych punktw .................................................................................................................. 81
6.4.1. Rozwizanie kompletne.............................................................................................................. 81
6.4.2. Rozwizanie wydajne ................................................................................................................. 82
6.5. Wybr funkcji mieszajcej ................................................................................................................... 83
6.6. Ku przyszoci ...................................................................................................................................... 84
7.
Kody uwierzytelniania wiadomoci.......................................................................85
7.1.
7.2.
7.3.
7.4.
7.5.
8.
Bezpieczny kana ...................................................................................................95
8.1. Opis zagadnienia................................................................................................................................... 95
8.1.1. Role............................................................................................................................................. 95
8.1.2. Klucz........................................................................................................................................... 96
8.1.3. Wiadomoci czy strumie danych.............................................................................................. 96
8.1.4. Waciwoci bezpieczestwa...................................................................................................... 97
8.2. Kolejno potwierdzania wiarygodnoci i szyfrowania ....................................................................... 98
8.3. Szkic rozwizania ................................................................................................................................. 99
8.3.1. Numerowanie wiadomoci ......................................................................................................... 99
8.3.2. Potwierdzanie autentycznoci................................................................................................... 100
8.3.3. Szyfrowanie .............................................................................................................................. 101
8.3.4. Format ramki ............................................................................................................................ 101
8.4. Szczegy implementacji.................................................................................................................... 101
8.4.1. Inicjalizacja............................................................................................................................... 102
8.4.2. Wysyanie wiadomoci............................................................................................................. 103
SPIS TRECI
9.
O implementacji (I)..............................................................................................107
9.1. Tworzenie poprawnych programw ................................................................................................... 108
9.1.1. Specyfikacje.............................................................................................................................. 108
9.1.2. Testowanie i poprawki.............................................................................................................. 109
9.1.3. Lekcewace podejcie............................................................................................................. 110
9.1.4. Co zatem robi? ........................................................................................................................ 110
9.2. Tworzenie bezpiecznego oprogramowania ........................................................................................ 111
9.3. Zachowywanie tajemnic ..................................................................................................................... 111
9.3.1. Kasowanie pamici stanu ......................................................................................................... 112
9.3.2. Plik wymiany............................................................................................................................ 113
9.3.3. Pami podrczna ..................................................................................................................... 114
9.3.4. Zatrzymanie danych w pamici ................................................................................................ 115
9.3.5. Dostp osb postronnych.......................................................................................................... 117
9.3.6. Integralno danych .................................................................................................................. 117
9.3.7. Co robi .................................................................................................................................... 118
9.4. Jako kodu rdowego..................................................................................................................... 118
9.4.1. Prostota ..................................................................................................................................... 118
9.4.2. Modularyzacja .......................................................................................................................... 119
9.4.3. Asercje ...................................................................................................................................... 120
9.4.4. Przepenienie bufora ................................................................................................................. 121
9.4.5. Testowanie................................................................................................................................ 121
9.5. Ataki bocznym kanaem ..................................................................................................................... 122
9.6. Wnioski............................................................................................................................................... 123
Cz II Negocjowanie kluczy
125
10.
Generowanie wartoci losowych .........................................................................127
10.1. Wartoci prawdziwie losowe.............................................................................................................. 128
10.1.1. Problemy zwizane z uyciem prawdziwych danych losowych ............................................ 128
10.1.2. Dane pseudolosowe ................................................................................................................ 129
10.1.3. Prawdziwe dane losowe i PRNG............................................................................................ 129
10.2. Modele ataku na PRNG...................................................................................................................... 130
10.3. Fortuna................................................................................................................................................ 131
10.4. Generator ............................................................................................................................................ 131
10.4.1. Inicjalizacja............................................................................................................................. 133
10.4.2. Ponowne przekazanie ziarna .................................................................................................. 133
10.4.3. Generowanie blokw.............................................................................................................. 133
10.4.4. Generowanie danych losowych .............................................................................................. 134
10.4.5. Szybko dziaania generatora................................................................................................ 135
10.5. Akumulator......................................................................................................................................... 135
10.5.1. rda entropii ........................................................................................................................ 135
10.5.2. Pule ......................................................................................................................................... 136
10.5.3. O implementacji ..................................................................................................................... 137
SPIS TRECI
11.
Liczby pierwsze ...................................................................................................147
11.1. Podzielno i liczby pierwsze............................................................................................................. 147
11.2. Generowanie maych liczb pierwszych .............................................................................................. 149
11.3. Operacje arytmetyczne modulo liczba pierwsza ................................................................................ 150
11.3.1. Dodawanie i odejmowanie ..................................................................................................... 151
11.3.2. Mnoenie ................................................................................................................................ 151
11.3.3. Ciaa skoczone i grupy ......................................................................................................... 151
11.3.4. Algorytm NWD ...................................................................................................................... 152
11.3.5. Rozszerzony algorytm Euklidesa ........................................................................................... 153
11.3.6. Dziaania modulo 2................................................................................................................. 154
11.4. Due liczby pierwsze.......................................................................................................................... 155
11.4.1. Testowanie pierwszoci.......................................................................................................... 157
11.4.2. Potgowanie............................................................................................................................ 159
12.
Diffie-Hellman.....................................................................................................161
12.1.
12.2.
12.3.
12.4.
12.5.
12.6.
12.7.
12.8.
12.9.
13.
RSA......................................................................................................................171
13.1. Wprowadzenie .................................................................................................................................... 171
13.2. Chiskie twierdzenie o resztach ......................................................................................................... 171
13.2.1. Wzr Garnera ......................................................................................................................... 172
13.2.2. Uoglnienia ............................................................................................................................ 173
13.2.3. Zastosowania .......................................................................................................................... 173
13.2.4. Wnioski................................................................................................................................... 174
SPIS TRECI
14.
Wprowadzenie do protokow kryptograficznych...............................................185
14.1. Role..................................................................................................................................................... 185
14.2. Zaufanie .............................................................................................................................................. 185
14.2.1. Ryzyko.................................................................................................................................... 187
14.3. Motywacje .......................................................................................................................................... 187
14.4. Zaufanie w protokoach kryptograficznych........................................................................................ 189
14.5. Wiadomoci i etapy ............................................................................................................................ 189
14.5.1. Warstwa nona (transportowa) ............................................................................................... 189
14.5.2. Tosamo protokou i wiadomoci ....................................................................................... 190
14.5.3. Kodowanie i analiza wiadomoci ........................................................................................... 191
14.5.4. Stany wykonania protokou .................................................................................................... 191
14.5.5. Bdy....................................................................................................................................... 192
14.5.6. Powtrki i ponowne prby ..................................................................................................... 193
15.
Protok negocjacji klucza...................................................................................195
15.1.
15.2.
15.3.
15.4.
15.5.
15.6.
15.7.
15.8.
15.9.
15.10.
15.11.
15.12.
SPIS TRECI
16.
O implementacji (II) ............................................................................................209
16.1. Arytmetyka duych liczb cakowitych ............................................................................................... 209
16.1.1. Wooping ................................................................................................................................. 210
16.1.2. Sprawdzanie oblicze DH ...................................................................................................... 212
16.1.3. Sprawdzanie szyfrowania RSA .............................................................................................. 213
16.1.4. Sprawdzanie podpisw RSA .................................................................................................. 213
16.1.5. Wnioski................................................................................................................................... 213
16.2. Przyspieszenie mnoenia .................................................................................................................... 214
16.3. Ataki bocznym kanaem ..................................................................................................................... 215
16.3.1. rodki zaradcze....................................................................................................................... 215
16.4. Protokoy ............................................................................................................................................ 216
16.4.1. Protokoy w bezpiecznym kanale ........................................................................................... 217
16.4.2. Odbieranie komunikatw ....................................................................................................... 217
16.4.3. Brak odpowiedzi w zadanym czasie....................................................................................... 218
219
17.
Zegar ....................................................................................................................221
17.1. Zastosowania zegara........................................................................................................................... 221
17.1.1. Utrata wanoci ...................................................................................................................... 221
17.1.2. Niepowtarzalne wartoci ........................................................................................................ 221
17.1.3. Monotoniczno...................................................................................................................... 222
17.1.4. Transakcje w czasie rzeczywistym......................................................................................... 222
17.2. Uycie sprztowego zegara ................................................................................................................ 223
17.3. Zagroenia dla bezpieczestwa .......................................................................................................... 223
17.3.1. Cofnicie zegara ..................................................................................................................... 223
17.3.2. Zatrzymanie zegara................................................................................................................. 224
17.3.3. Przestawianie zegara w przd................................................................................................. 224
17.4. Budowa niezawodnego zegara ........................................................................................................... 225
17.5. Problem takiego samego stanu ........................................................................................................... 226
17.6. Czas .................................................................................................................................................... 227
17.7. Wnioski............................................................................................................................................... 228
18.
Serwery kluczy ....................................................................................................229
18.1. Podstawy............................................................................................................................................. 229
18.2. Kerberos.............................................................................................................................................. 230
18.3. Prostsze rozwizania........................................................................................................................... 230
18.3.1. Bezpieczne poczenie............................................................................................................ 231
18.3.2. Przygotowanie klucza............................................................................................................. 231
18.3.3. Zmiana klucza......................................................................................................................... 232
18.3.4. Inne waciwoci..................................................................................................................... 232
18.4. Jak dokona wyboru ........................................................................................................................... 232
10
SPIS TRECI
19.
Marzenia o PKI ....................................................................................................233
19.1. Krtkie wprowadzenie do PKI ........................................................................................................... 233
19.2. Przykadowy PKI................................................................................................................................ 234
19.2.1. Uniwersalne PKI..................................................................................................................... 234
19.2.2. Dostp VPN............................................................................................................................ 234
19.2.3. Bankowo elektroniczna ....................................................................................................... 234
19.2.4. Czujniki w rafinerii................................................................................................................. 234
19.2.5. Centrum kart kredytowych ..................................................................................................... 235
19.3. Dodatkowe szczegy ......................................................................................................................... 235
19.3.1. Certyfikaty wielopoziomowe ................................................................................................. 235
19.3.2. Wygasanie certyfikatw ......................................................................................................... 236
19.3.3. Osobny podmiot rejestrujcy.................................................................................................. 236
19.4. Wnioski............................................................................................................................................... 237
20.
Rzeczywisto PKI ..............................................................................................239
20.1.
20.2.
20.3.
20.4.
20.5.
20.6.
20.7.
20.8.
Nazwy................................................................................................................................................. 239
Podmiot decydujcy ........................................................................................................................... 241
Zaufanie .............................................................................................................................................. 241
Autoryzacja porednia ........................................................................................................................ 242
Autoryzacja bezporednia................................................................................................................... 242
Systemy delegacji uprawnie ............................................................................................................. 243
Marzenie po modyfikacjach ............................................................................................................... 244
Odbieranie uprawnie......................................................................................................................... 245
20.8.1. Lista odwoa ......................................................................................................................... 245
20.8.2. Krtki okres wanoci ............................................................................................................ 246
20.8.3. Odwoywanie jest potrzebne .................................................................................................. 246
20.9. Do czego naprawd suy PKI?.......................................................................................................... 247
20.10. Co wybra........................................................................................................................................... 248
21.
PKI w praktyce ....................................................................................................249
21.1. Format certyfikatu .............................................................................................................................. 249
21.1.1. Jzyk uprawnie ..................................................................................................................... 249
21.1.2. Klucz gwny.......................................................................................................................... 250
21.2. Cykl ycia klucza................................................................................................................................ 250
21.3. Czemu klucze si zuywaj ................................................................................................................ 252
21.4. Co zatem zrobi? ................................................................................................................................ 253
22.
Przechowywanie tajemnic ...................................................................................255
22.1. Dysk.................................................................................................................................................... 255
22.2. Pami ludzka..................................................................................................................................... 256
22.2.1. Solenie i rozciganie............................................................................................................... 257
22.3. Pami przenona ............................................................................................................................... 258
22.4. Token bezpieczestwa ........................................................................................................................ 259
SPIS TRECI
22.5.
22.6.
22.7.
22.8.
22.9.
22.10.
11
Cz IV Rnoci
265
23.
Standardy .............................................................................................................267
23.1. Proces tworzenia standardw ............................................................................................................. 267
23.1.1. Standard .................................................................................................................................. 268
23.1.2. Funkcjonalno....................................................................................................................... 268
23.1.3. Bezpieczestwo ...................................................................................................................... 269
23.2. SSL ..................................................................................................................................................... 269
23.3. AES: standaryzacja w wyniku konkursu ............................................................................................ 270
24.
Patenty .................................................................................................................271
24.1.
24.2.
24.3.
24.4.
24.5.
24.6.
24.7.
24.8.
25.
Pomoc ekspertw .................................................................................................277
Dodatki
281
Bibliografia ..........................................................................................................283
Skorowidz ............................................................................................................289
9
O implementacji (I)
108
9. O IMPLEMENTACJI (I)
ktremu uda si zama zabezpieczenia kryptograficzne, prawdopodobnie pozostanie nie zauwaony. Mona go porwna do wamywacza posiadajcego zestaw kluczy do mieszkania: o ile zachowa naleyt ostrono, nikt w ogle nie zauway wamania.
Naszym dugofalowym celem jest budowa bezpiecznych systemw komputerowych. Aby ten
cel osign, kady musi zajmowa si czci, za ktr jest odpowiedzialny. Nasza praca, o czym
traktuje niniejsza ksika, polega na opracowaniu skutecznych zabezpiecze kryptograficznych.
Jest oczywiste, e zabezpieczy bdzie trzeba take inne czci systemu. Nie wiemy, jak to zrobi,
ale by moe inni to wiedz, a by moe kto tego dopiero si nauczy. Do tego czasu cakowite bezpieczestwo systemu bdzie ograniczone przez jego najsabsze ogniwo, za my dooymy wszelkich stara, by tym ogniwem nie okazaa si kryptografia.
O poprawno elementw kryptograficznych warto zadba take dlatego, e po zaimplementowaniu systemu wszelkie zmiany s bardzo kopotliwe. System operacyjny dziaa na pojedynczym
komputerze. Systemy kryptograficzne czsto s uywane w ramach protokow komunikacyjnych
czcych szereg komputerw. Aktualizacje systemu operacyjnego pojedynczego komputera s do
proste i w praktyce czsto maj miejsce. Modyfikacja sieciowego protokou komunikacyjnego jest
koszmarem. Dlatego wanie wiele sieci dziaa do dzi zgodnie z projektami z lat 70. i 80. Musimy
pamita, e kady nowo tworzony dzi system kryptograficzny, o ile zostanie przyjty do powszechnego uytku, prawdopodobnie bdzie dziaa jeszcze przez 30 czy 50 lat. Mamy nadziej, e przez ten
czas pozostae czci systemu stan si znacznie bardziej bezpieczne.
9.1.1. Specyfikacje
Pierwszy problem bierze si std, e mao ktry program ma jasno okrelone wymagania. Bez specyfikacji nie sposb nawet sprawdzi, czy program jest poprawny. W przypadku takich programw
kwestia poprawnoci jest w ogle nierozstrzygalna.
Wiele projektw informatycznych ma dokument nazywany specyfikacj funkcjonaln. Teoretycznie powinna by to specyfikacja programu, ale w praktyce dokument ten czsto nie istnieje,
jest niekompletny lub opisuje elementy nie odnoszce si do oczekiwanego zachowania programu.
Jak dugo brak porzdnej specyfikacji, nie moe by owy o poprawnym programie.
Istota specyfikacji obejmuje trzy etapy:
Wymagania. Wymagania obejmuj nieformalny opis efektw dziaania programu. Jest to dokument typu co mona za pomoc tego programu zrobi a nie jak mona co zrobi.
Wymagania czsto bywaj niedookrelone i koncentruj si na caociowym obrazie, z pominiciem szczegw.
Specyfikacja funkcjonalna. Opis wymaga funkcjonalnych mwi, jak program ma dziaa.
Specyfikacja funkcjonalna obejmuje tylko te elementy, ktre da si sprawdzi nie zagldajc
do wntrza programu. W przypadku kadej pozycji specyfikacji funkcjonalnej naley zada sobie pytanie, czy moliwe jest przeprowadzenie testu gotowego programu, ktry byby w stanie
109
rozstrzygn o spenieniu danego wymogu. Taki test moe bada jedynie zewntrzne zachowanie
si programu, nie moe natomiast analizowa adnych stanw wewntrznych. aden wymg,
dla ktrego nie da si stworzy odpowiedniego testu, nie moe nalee do specyfikacji funkcjonalnej.
Opis wymaga funkcjonalnych powinien by zupeny. Oznacza to, e powinien on obejmowa wszystkie elementy funkcjonalne. aden element nie ujty w specyfikacji nie musi
by implementowany.
Inny sposb patrzenia na specyfikacj funkcjonaln polega na testowaniu gotowego programu. Kady wymg moe by i powinien by przetestowany.
Projekt implementacji. Dokument ten miewa rozmaite nazwy, ale opisuje on sposb dziaania programu od wewntrz. Projekt zawiera wszystko, czego nie mona przetestowa z zewntrz. Dobry projekt zwykle opisuje podzia programu na moduy oraz funkcjonalno tych
moduw. Z kolei na opisy moduw mona patrze jak na wymagania wobec moduu. W tej
sytuacji mona z kolei powtrzy cay cykl na poziomie moduw.
Spord wskazanych trzech dokumentw najwaniejsza jest niewtpliwie specyfikacja funkcjonalna. To wedug tego dokumentu bdzie przebiega testowanie gotowego programu. Czasami
mona obej si bez nieformalnego opisu wymaga, a za projekt starczy kilka szkicw na tablicy.
Jednak bez specyfikacji funkcjonalnej nie sposb nawet opisa zakresu prac ani zdecydowa, czy
ich cel zosta zrealizowany.
110
9. O IMPLEMENTACJI (I)
Po znalezieniu bdu zawsze naley zastanowi si nad przyczyn jego wystpienia. Czy w innych czciach programu moe si zdarzy podobny bd? Naley sprawdzi wszystkie podejrzane miejsca.
Naley rejestrowa wszystkie znalezione bdy. Prosta analiza statystyczna znalezionych bdw moe wskaza, ktre czci programu maj szczeglnie duo niedorbek, jakiego typu
bdy pojawiaj si najczciej i tak dalej. Tego typu informacje zwrotne s niezbdne dla
kontroli jakoci.
Zasady te nie stanowi nawet niezbdnego minimum, ale z drugiej strony niewiele jest gotowych opracowa, z ktrych mona byoby korzysta. Jakoci oprogramowania powiconych jest
niewiele ksiek. Na dodatek pogldy ich autorw nie s ze sob zgodne. Wielu autorw opisuje
konkretn metodologi tworzenia oprogramowania jako jedyne suszne rozwizanie, a wszelkie
panacea s dla nas podejrzane. Prawda zawsze ley porodku.
111
produkcyjnej. Jednak z drugiej strony to denie do jakoci daje niesamowite efekty. Latanie jest
dzisiaj czynnoci rutynow, mimo e kada usterka w samolocie moe okaza si krytyczna. Pilot
w razie kopotw nie moe po prostu wcisn hamulcw i zatrzyma maszyny. Jedynym sposobem bezpiecznego powrotu jest bardzo delikatna operacja ldowania; niewiele jest na wiecie
miejsc, w ktrych mona j bezpiecznie przeprowadzi. Przemys lotniczy zadziwiajco skutecznie zatroszczy si o bezpieczestwo lotw. Byoby wskazane przej moliwie wiele z wypracowanych przeze procedur. By moe napisanie poprawnego oprogramowania musi by o rzd wielkoci drosze, ni jest obecnie, kiedy programy pisze si tak, jak do tego przywyklimy. Jeli jednak
wzi pod uwag koszty spoeczne bdw oprogramowania, moemy by pewni, e w duszym
okresie czasu wysiek si opaci.
112
9. O IMPLEMENTACJI (I)
tylko przez czas istnienia bezpiecznego kanau. Dugoterminowe przechowywanie tajemnic zostanie
omwione w rozdziale 22.
Tajemnice tymczasowe przechowuje si w pamici. Niestety, pami wikszoci komputerw
nie jest miejscem zbyt bezpiecznym. Po kolei omwimy wszystkie typowe problemy z ni zwizane.
113
w pamici przez dugi czas. Uycie procedur obsugi wyjtkw utrudnia rczne wymazywanie pamici. Po wygenerowaniu wyjtku ze stosu zdejmowane s kolejne wywoania, a programista nie
ma adnego wpywu na przebieg akcji, nie moe wywoa adnego swojego kodu; moe co najwyej kad funkcj umieci w duej klauzuli . Jest to rozwizanie cakiem niepraktyczne, na
dodatek naleaoby je stosowa w caym programie, wobec czego niemoliwe byoby stworzenie
prawidowo zachowujcej si biblioteki Javy do obsugi bezpieczestwa. Podczas obsugi wyjtkw Java zdejmuje dane ze stosu usuwajc wszelkie odwoania do obiektw, ale nie usuwa przy
tym samych obiektw. Pod tym wzgldem Java zachowuje si naprawd le. Najlepsze rozwizanie, do jakiego doszlimy, polegao na zapewnieniu wykonania procedur finalizacyjnych przy zamykaniu programu. Polega ono na tym, e metoda programu wykorzystuje instrukcj
114
9. O IMPLEMENTACJI (I)
jest w stanie na ni zareagowa. Zamy, e na dysk przeniesiony zostanie fragment pamici zawierajcy klucze. W razie awarii komputera lub choby wyczenia zasilania dane pozostan na
dysku. Wikszo systemw operacyjnych pozostawia dane na dyskach nawet w przypadku poprawnego zamknicia systemu. Zwykle nie ma sposobu na wymazanie pliku wymiany, wic dane
mog lee na dysku w nieskoczono. Nikt nie wie, kto w przyszoci uzyska dostp do takiego
pliku wymiany. Dlatego nie moemy sobie pozwoli na ryzyko zapisania naszych tajemnic w pliku
wymiany1.
Jak zatem uniemoliwi systemowi pamici wirtualnej zapisywanie naszych danych na dysku? W niektrych systemach operacyjnych dostpne s funkcje systemowe informujce system
pamici wirtualnej, e pewnych obszarw pamici nie wolno przenosi na dysk. Rzadko zdarza si
system operacyjny zawierajcy obsug bezpiecznego systemu wymiany, w ktrym zapisywane na
dysku dane byyby chronione kryptograficznie. Jeeli w naszym systemie nie jest dostpny aden
z opisanych przed chwil mechanizmw, to mamy pecha. Moemy wtedy tylko gono ponarzeka
na system operacyjny i zrobi wszystko, co da si zrobi w danej sytuacji.
Zamy teraz, e mamy rodki, by uniemoliwi zapisywanie czci pamici w pliku wymiany.
Ktrego fragmentu pamici winna dotyczy taka blokada? Oczywicie naleaoby ni obj wszystkie
te fragmenty pamici, ktre mog zawiera poufne dane. Mamy wic nastpny problem: w wielu
rodowiskach programowania bardzo trudno jest ustali, gdzie dokadnie dane zostay umieszczone.
Obiekty s czsto alokowane na stercie, dane globalne mona alokowa statycznie, za zmienne
lokalne zazwyczaj umieszcza si na stosie. Ustalanie takich szczegw jest bardzo skomplikowane
i moe by rdem bdw. Prawdopodobnie najlepsze rozwizanie polega na blokowaniu caej pamici naszej aplikacji. Jednak nawet ono nie jest tak proste, jak mogoby si wydawa, gdy moemy
przy okazji przegapi szereg usug systemu operacyjnego, takich jak automatycznie alokowany
stos. Poza tym blokowanie pamici powoduje, e system pamici wirtualnej staje si nieskuteczny.
Caa rzecz jest o wiele bardziej skomplikowana, ni powinna. Prawidowe rozwizanie polega
oczywicie na zbudowaniu systemu pamici wirtualnej, ktry chroniby poufno danych. Wie si
to ze zmian systemu operacyjnego i wobec tego jest poza nasz kontrol. Nawet jeli stosowne
funkcje pojawi si w nastpnej wersji uywanego systemu operacyjnego, to i tak trzeba bdzie starannie sprawdzi, czy system pamici wirtualnej dobrze strzee powierzanych mu tajnych danych.
115
gwnej, ale dopiero wtedy, kiedy w pamici podrcznej braknie miejsca na jakie inne dane. Nie
znamy wszystkich szczegw tego mechanizmu, poza tym jest on zaleny od typu procesora. Nie
da si stwierdzi, czy istnieje jakie oddziaywanie midzy moduem alokacji pamici a systemem
pamici podrcznej, ktre pozwolioby pomin etap buforowania danych w pamici podrcznej
podczas zwalniania pamici. Producenci nie wskazuj sposobu usuwania danych z pamici, a aden
mechanizm, ktry nie jest oficjalnie udokumentowany, nie jest te godny zaufania.
Kolejne niebezpieczestwo zwizane z pamici podrczn polega na tym, e w pewnych warunkach pami taka moe otrzyma sygna o modyfikacji pewnego obszaru pamici gwnej, na przykad przez inny procesor w systemie wieloprocesorowym. Dane w pamici podrcznej otrzymuj
status niepoprawnych, ale zwykle nie oznacza to wcale ich usunicia. Znowu moe si okaza,
e gdzie istnieje kopia naszych danych poufnych.
Na opisane wyej problemy nie ma oglnej rady. Nie stanowi te na og wielkiego zagroenia, poniewa w wikszoci systemw jedynie sam system operacyjny ma bezporedni dostp do
mechanizmu pamici podrcznej. Systemowi operacyjnemu tak czy inaczej trzeba ufa, wic i my
mu zaufamy. Tym niemniej o opisanych niebezpieczestwach trzeba pamita podczas projektowania, gdy sprawiaj one, e tworzone systemy nie s tak bezpieczne, jak by powinny.
116
9. O IMPLEMENTACJI (I)
materiau, a cilej migracj domieszek [39]. Atakujcy, majc fizyczny dostp do pamici, mgby teoretycznie odczyta tak zapisane dane.
Istotno opisanego typu zagroenia jest dyskusyjna; naszym zdaniem jest to zagroenie realne.
Nie chcielibymy przecie, by ewentualnej kradziey komputera towarzyszya kradzie skasowanych na nim wczeniej danych. Groby takiej unikniemy tylko troszczc si samemu, by komputer
rzeczywicie zapomina wszystkie kasowane dane.
Potrafimy wskaza jedynie czciowe rozwizanie, ktre dziaa przy pewnych zaoeniach
dotyczcych pamici. Rozwizanie to, nazwane Boojum3, nadaje si do wymazywania niewielkich
porcji danych, na przykad kluczy. Oznaczmy symbolem m dane, ktre chcemy przechowa. Zamiast
zapisywa m, wygenerujemy losowy acuch R i zapiszemy R oraz R m. Wartoci te umiecimy
w dwch rnych miejscach w pamici, najlepiej oddalonych od siebie. Caa sztuka polega na czstych zmianach R. W regularnych odstpach czasu, na przykad co 100 ms, generujemy now warto
R' i aktualizujemy pami tak, by zawieraa R R' oraz R R' m. Sposb ten daje gwarancj, e
kady bit pamici bdzie zalee od cigu bitw losowych. W celu skasowania pamici zapiszemy
jako nowe m cig zer, w wyniku czego oba obszary pamici otrzymaj te same, losowe dane.
Chcc odczyta warto m, musimy pobra dane z obu lokalizacji i podda je operacji XOR.
Podczas zapisywania obliczamy XOR nowych danych z R i umieszczamy wynik pod drugim z uywanych adresw.
Naley zwrci uwag na to, by cigi bitw R i R m nie zostay umieszczone w ukadzie
RAM obok siebie. Bez informacji na temat dziaania RAM nie jest to oczywiste, ale w wikszoci
pamici bity przechowuje si w prostoktnej macierzy, ktrej przestrze adresowa skada si
z czci odpowiedzialnych za wiersz i kolumn. Dwa fragmenty przechowywane w miejscach, ktrych adresy rni si o , maj ma szans, by ssiadoway w ukadzie fizycznie (zakadamy
przy tym, e w pamici bity z adresami parzystymi nie s numerami wierszy, a z bity adresami
nieparzystymi nie s numerami kolumn; zreszt takiej konstrukcji pamici nigdy jeszcze nie widzielimy). Jeszcze lepsze rozwizanie polegaoby na ustaleniu dwch losowych adresw w bardzo
duej przestrzeni adresowej. W ten sposb prawdopodobiestwo przylegania dwch wybranych
obszarw byoby bardzo mae, niezalenie od konstrukcji uytej pamici.
Opisane rozwizanie jest jedynie czciowe, przy tym jest ono jest dosy trudne do zastosowania. Sprawdza si ono tylko dla niewielkich porcji danych, gdy w przypadku wikszych iloci
danych funkcja aktualizujca warto dziaaaby zbyt wolno. Jednak jego uycie gwarantuje, e
aden obszar pamici nie bdzie naraony na regularne przechowywanie w nim tajnych danych
w sposb wpywajcy na jego preferowany stan.
Nadal jednak nie mamy gwarancji, e pami zostanie skasowana. Z dokumentacji ukadw
scalonych RAM nie wynika, e dane raz umieszczone w pamici w ogle musz by kasowane.
Oczywicie aden ukad nie zachowuj si w ten sposb, ale z uwanej lektury wynika, e moliwe
jest uzyskanie jedynie pewnego poziomu bezpieczestwa.
Skoncentrowalimy si tutaj na pamici gwnej. To samo rozwizanie zadziaa w pamici
podrcznej, tyle e niemoliwe bdzie kontrolowanie adresu, pod ktrym dane zostan umieszczone. Analogiczne rozwizanie nie dziaa w przypadku rejestrw procesora, ale rejestry uywane s
na tyle intensywnie, e proces przetrzymywania danych prawdopodobnie nigdy nie bdzie ich dotyczy. Z drugiej strony rejestry rozszerzajce, na przykad rejestry zmiennoprzecinkowe czy rejestry typu MMX, uywane s rzadziej, wic mog sprawia pewne problemy.
W sytuacji, kiedy konieczne jest przechowanie duej iloci danych, rozwizanie polegajce
na utrzymywaniu dwch kopii i mnoeniu ich przez nowe acuchy losowe staje si zbyt kosztowne. Lepsze okazuje si wtedy zaszyfrowanie duego bloku danych i zapisanie w pamici tekstu
3
Nazwa pochodzi z poematu Lewisa Carrolla The Hunting of the Snark [15]. W polskiej terminologii:
Bdzio; przekad Stanisawa Baraczaka pt. owy na Snarka przyp. tum.
117
zaszyfrowanego, ktry ewentualnie mgby zosta przez kogo odczytany. Naley jedynie unika
przetrzymywania w pamici kluczy, posugujc si np. technik Boojum. Wicej szczegw czytelnik znajdzie w [24].
Trzeba si upewni, e wszystkie czci skadowe komputera obsuguj pami ECC. Ostrzegamy zwaszcza przed nieznacznie taszymi moduami pamici, ktre nie przechowuj dodatkowych informacji, tylko obliczaj
je na bieco. Ich uycie cakowicie przekrela celowo korzystania z pamici ECC.
118
9. O IMPLEMENTACJI (I)
Czemu jest to a tak wane? Wspczesne komputery przetwarzaj ogromne liczby bitw.
Zamy, e z pami jest bardzo dobra jakociowo i szansa bdnego odczytu z pojedynczego
bitu pamici w cigu sekundy wynosi jedynie 1015. W maszynie wyposaonej w 128 MB, to znaczy w okoo 1012 bitw pamici, bdu mona spodziewa si co 1000 sekund, to znaczy w przyblieniu co 17 minut. Taka ilo bdw jest z naszego punktu widzenia niedopuszczalna. Liczba
bdw zwiksza si wraz ze wzrostem iloci pamici w komputerze, tak wic w maszynie dysponujcej 1 GB pamici sytuacja tylko si pogorszy. W serwerach zwykle montuje si pami ECC,
gdy serwery maj duo pamici i pracuj duej ni stacje robocze. Dobrze byoby jednak utrzyma podobny poziom stabilnoci we wszystkich uywanych komputerach.
Nasze uwagi dotycz oczywicie kwestii sprztowych. Zazwyczaj nie mamy moliwoci
okrelania rodzaju pamici w komputerze, na ktrym nasza aplikacja bdzie uruchamiana.
Czasami zagroenie poufnoci naszych danych zagraa jednoczenie ich integralnoci. Na
przykad za pomoc debugera mona zmodyfikowa stan pamici nalecej do programu. Superuytkownik ma te moliwo bezporedniej modyfikacji pamici. Nie da si zapobiec takiemu
niebezpieczestwu ani mu zaradzi, ale trzeba zdawa sobie z niego spraw.
9.3.7. Co robi
Zachowanie tajemnicy we wspczesnym komputerze nie jest takie proste, jak mogoby si wydawa.
Jest wiele drg, ktrymi tajemnice mog wycieka z systemy. Dla penego bezpieczestwa naleaoby zablokowa je wszystkie. Niestety, stosowane obecnie systemy operacyjne i jzyki programowania nie dostarczaj stosownych narzdzi. Mona i trzeba robi to, co si da, lecz oznacza
to mnstwo pracy cile zwizanej z konkretnym rodowiskiem realizacji.
Opisane problemy powoduj, e bardzo trudno jest stworzy bibliotek funkcji kryptograficznych. Zachowanie tajemnic wymaga czsto modyfikacji gwnego programu aplikacji. Oczywicie
program gwny te zawiera dane, ktre powinny pozosta ukryte; w przeciwnym wypadku biblioteka
kryptograficzna byaby w ogle zbdna. Wracamy do znanego ju stwierdzenia, e zachowanie
bezpieczestwa w systemie jako caoci wymaga zachowania go w kadej czci tego systemu.
9.4.1. Prostota
Zoono jest najwikszym to wrogiem bezpieczestwa. Wobec tego w projektach zwizanych
z bezpieczestwem naley za wszelk cen dy do prostoty. Naley eliminowa wszystkie elementy, ktre nie s absolutnie niezbdne. Trzeba pozby si wszystkich barokowych ozdobnikw,
na og zreszt wykorzystywanych przez bardzo niewielu uytkownikw. Naley z dala omija
119
projekty zbiorowe, gdy praca w komisji zawsze wymusza dodatkowe opcje w ramach kompromisu.
Tam, gdzie w gr wchodzi bezpieczestwo, prostota jest warunkiem pierwszorzdnym.
Typowym przykadem jest nasz bezpieczny kana. Jego projekt nie zawiera adnych opcji.
Nie pozwala zaszyfrowa nieuwierzytelnionych danych ani uwierzytelni danych niezaszyfrowanych. Wielu uytkownikw byoby zadowolonych z dodatkowych moliwoci, ale zwykle s to osoby
niewiadome konsekwencji takich rozwiza. Wikszo uytkownikw wie zbyt mao o bezpieczestwie, by pozwoli im wybiera odpowiednie opcje zabezpiecze. Najlepszym rozwizaniem
jest rezygnacja z opcji i wymuszanie bezpieczestwa domylnie. Jeli jest to naprawd konieczne,
naley umoliwi tylko jeden wybr: albo bezpieczny, albo niebezpieczny.
Wiele systemw udostpnia cay szereg szyfrw, za uytkownik moe wybra do uytku
szyfr i funkcj uwierzytelniajc. Nawet w sytuacji, ktra teoretycznie dopuszcza taki wybr, zalecamy bezwzgldne eliminowanie podobnych komplikacji. W zamian naley wybra jeden tryb
dziaania dostatecznie bezpieczny do wszystkich moliwych zastosowa. Rnice zoonoci obliczeniowej poszczeglnych trybw szyfrowania s niewielkie, a obecnie kryptografia ju tylko
wyjtkowo bywa wskim gardem przetwarzania. Pozbywajc si opcji nie tylko pozbywamy si
zoonoci, ale jednoczenie uniemoliwiamy uytkownikowi takie skonfigurowanie aplikacji, by
stosowa w niej sabe szyfry. Ostatecznie skoro wybr trybu szyfrowania i autoryzacji jest tak
trudny, e projektant nie podejmuje ostatecznej decyzji, to na jakiej podstawie miaby j podj
uytkownik?
9.4.2. Modularyzacja
Nawet po wyeliminowaniu mnstwa opcji i dodatkowych moliwoci moe si okaza, e uzyskany
system nadal pozostaje do zoony. Zapanowanie nad zoonoci umoliwia technika modularyzacji. Dzieli si w niej system na odrbne moduy, ktre nastpnie bd osobno projektowane,
analizowane i implementowane.
Sama koncepcja modularyzacji z pewnoci nie jest obca Czytelnikowi; w kryptografii po
prostu nabiera wagi waciwe jej zastosowanie. Mwic wczeniej o elementach skadowych systemu kryptograficznego, odnosilimy si do nich jak do moduw. Interfejs moduu powinien by
prosty, powinien te zachowywa si zgodnie z intuicj. Warto przyjrze si interfejsom zaprojektowanych przez siebie moduw. Czsto mona w nich dostrzec waciwoci czy opcje, ktre
su do rozwizania problemw zwizanych z innym moduem. Jeli tylko to moliwe, naley je
odrzuci. Kady modu powinien zajmowa si wycznie sam sob. Z naszego dowiadczenia
wynika, e kiedy modu zaczyna obrasta w dziwne waciwoci, nadchodzi czas na przejrzenie
projektu, gdy prawie zawsze okazuje si, e owe dziwne cechy byy zwizane z jakimi wadami
projektowymi.
Modularyzacja jest tak istotna, poniewa jest jedyn skuteczn metod panowania nad zoonoci. Dana opcja ograniczona do pojedynczego moduu moe by przeanalizowana w kontekcie
tego moduu. Jednak opcja, ktra zmienia zewntrzne zachowanie danego moduu, moe wpywa na
zachowanie innych moduw. W ukadzie 20 moduw, z ktrych kady jest wyposaony w jedn
dwustanow opcj zmieniajc jego dziaanie, moliwych jest ponad milion konfiguracji. Dla penego bezpieczestwa konieczne byoby przeanalizowanie wszystkich tych moliwoci, co jednak
jest niemoliwe.
Jak zauwaylimy, e wiele opcji powstaje z myl o poprawie wydajnoci. Temat ten jest
dobrze znany w inynierii oprogramowania. Wiele systemw jest wyposaonych w tak zwane optymalizacje, ktre jednak okazuj si cakiem bezuyteczne, zmniejszajc wydajno, lub s nieistotne,
gdy optymalizuj te czci systemu, ktre nie s wcale wskimi gardami caoci. W sprawach
120
9. O IMPLEMENTACJI (I)
optymalizacji jestemy bardzo zachowawczy. Zwykle w ogle si ni nie przejmujemy. Tworzymy dokadny projekt, a nastpnie staramy si zapewni, by dao si go zrealizowa w duych
kawakach. Za typowy przykad niech posuy stary BIOS IBM PC. Procedura wywietlajca
znak na ekranie ma tylko jeden parametr wywietlany znak. Procedura spdza wikszo
swojego czasu bezproduktywnie, a samo wstawiane znaku do bufora pamici zajmuje tylko
drobn jego cz. Gdyby interfejs procedury pozwala uy w charakterze parametru acucha
znakw, to moliwe byoby wywietlenie caego acucha w czasie nieznacznie duszym ni
wywietlenie pojedynczego znaku. Wynikiem tak kiepskiego projektu byo bardzo powolne wywietlanie znakw w systemie DOS. Ta sama zasada obowizuje w projektach kryptograficznych. Naley dy do tego, by przetwarzanie odbywao si w moliwie duych porcjach. Pozostanie wtedy jedynie optymalizacja tych czci programu, ktrych wpyw na wydajno caoci
zostanie wykazany jako istotny.
9.4.3. Asercje
Asercje s doskonaym narzdziem do poprawy jakoci programw5.
Podczas implementacji programu kryptograficznego trzeba przyj postaw zawodowego paranoika. aden modu nie ma prawa ufa innym moduom, wszystkich obowizuje sprawdzanie
poprawnoci parametrw, wymuszanie ogranicze wywoywania oraz odmowa wykonywania niebezpiecznych operacji. W wikszoci sytuacji chodzi o bardzo proste asercje. Jeeli specyfikacja
moduu wymaga, by uycie pewnego obiektu byo poprzedzone jego inicjalizacj, to odwoanie do
niezainicjowanego obiektu tego typu powinno spowodowa wygenerowanie bdu asercji. Bdy
zwizane z niespenieniem asercji powinny zawsze prowadzi do przerwania programu i udostpnienia diagnozy bdu.
Jako ogln zasad przyjmujemy, e kada kontrola spjnoci wewntrz programu winna posugiwa si asercjami. Naley wychwytywa tym sposobem tyle bdw, ile tylko si da; dotyczy
to zarwno bdw wasnych, jak i innych programistw. Bd wychwycony przez asercj oznacza
uniknicie dziury w systemie bezpieczestwa.
Niektrzy programici realizuj asercje na etapie budowy oprogramowania, a wyczaj je
przed oddaniem ostatecznej wersji. Kto to wymyli? Co by byo, gdyby pocigi do nuklearnej
elektrowni podjeday zgodnie z pen procedur ochronn, ale przy podjedaniu do samego reaktora wyczay systemy bezpieczestwa. Albo co myle o spadochroniarzu, ktry na kady trening naziemny zabieraby spadochron zapasowy, ale z samolotu skakaby ju bez niego?. Po co
w ogle usuwa sprawdzanie asercji z programw przekazywanych klientowi? Przecie tylko tam
jest ono naprawd potrzebne! Kiedy asercja zawodzi w gotowym kodzie wykonywalnym, mamy
do czynienia z bdem programistycznym. Zignorowanie tego bdu prawdopodobnie doprowadzi
do dalszych bdw, gdy przynajmniej jedno zaoenie dotyczce programu zostao naruszone.
Podawanie nieprawidowych odpowiedzi jest chyba najgorszym moliwym sposobem dziaania
programu. Znacznie lepiej jest poinformowa uytkownika, e wystpi bd programistyczny, wobec czego nie naley bezgranicznie ufa dalszym odpowiedziom systemu. Szczegowe sprawdzanie
bdw zostawimy ju Czytelnikom.
5
Wiemy, e nasze uwagi upodabniaj ksik do niedzielnej szkki programowania, ale przypominamy
je wszystkim programistom, z ktrymi pracujemy.
121
9.4.5. Testowanie
Dokadne testowanie jest obowizkowym elementem procesu tworzenia oprogramowania. Testowanie pomaga w znalezieniu bdw w programach, ale nie pozwoli ono znale dziur w systemie
zabezpiecze. Nigdy nie naley myli testowania z analiz bezpieczestwa. Te dwa elementy wzajemnie si uzupeniaj, ale s odrbne.
Istniej dwa rodzaje testw, ktre naleaoby realizowa. Pierwszy obejmuje oglne testy zwizane ze specyfikacj funkcjonaln moduu. W idealnej sytuacji jeden programista implementuje
modu, a drugi realizuje testy. Obaj pracuj na podstawie specyfikacji funkcjonalnej. Kade nieporozumienie midzy nimi wskazuje na konieczno poprawienia specyfikacji. Testy oglne powinny
obejmowa wszystkie moliwoci moduu. Czasami testy s proste; a czasami program testujcy
musi zastpi cae rodowisko. Kod programu testujcego czsto bywa rwnie obszerny, jak sam
kod testowanego moduu, i nie ma na to rady.
Druga grupa testw obejmuje testy wykonywane przez samego programist realizujcego dany
modu. Testy te su do zbadania wszelkich ogranicze danej implementacji. Na przykad dodatkowe testy moduu, ktry uywa wewntrznego bufora o rozmiarze 4 kB, powinny obejmowa traktowanie skrajnych czci bufora, tak by na ich podstawie dao si wychwyci wszelkie bdy zarzdzania tym buforem. Czasem stworzenie odpowiednich testw wymaga znajomoci wewntrznej
budowy moduu.
122
9. O IMPLEMENTACJI (I)
Czsto tworzymy cigi testw sterowane generatorem wartoci losowych. Generator liczb losowych omwimy w rozdziale 10. Uycie takiego generatora znakomicie uatwia przeprowadzenie wielu
testw. Przechowanie wartoci ziarna generatora pozwala powtrzy cay cykl testw, co jest przydatne
przy wykrywaniu i usuwaniu bdw. Szczegy realizacji zale od konkretnego moduu.
W kocu dobrze jest mie program do szybkiego testowania, ktry mona by uruchamia
przy kadym uruchamianiu programu. W swoich ostatnich projektach jeden z autorw, Niels, mia
zaimplementowa AES. Kod inicjalizujcy wykonywa algorytm AES dla kilku przypadkw testowych i sprawdza, czy wyniki s zgodne ze znanymi prawidowymi odpowiedziami. Kade naruszenie poprawnoci kodu implementujcego AES, ktre moe si zdarzy w toku dalszego rozwoju aplikacji, zostanie prawdopodobnie wychwycone przez opisany przed chwil szybki test.
9.6. WNIOSKI
123
9.6. Wnioski
Mamy nadziej, e lektura biecego rozdziau wyjania, e bezpieczestwo nie zaczyna si ani
nie koczy na projekcie kryptograficznym. Na bezpieczestwo wpywaj istotnie wszystkie aspekty
funkcjonowania caego systemu. Dlatego specjalici bezpieczestwo spotykaj si tak czsto z negatywnymi reakcjami: wszdzie wciubiaj swoje nosy, wszystkich pouczaj, a w kocu odcinaj
mnstwo bardzo przydatnych opcji, twierdzc, jakoby byy one niebezpieczne.
Implementacja systemu kryptograficznego sama w sobie jest sztuk. Najwaniejsza jest jako
kodu programu. Kod niskiej jakoci jest w praktyce najczstszym powodem atakw; z drugiej
strony wyeliminowanie kiepskiego kodu jest stosunkowo atwe. Z naszego dowiadczenia wynika,
e tworzenie porzdnego kodu rdowego wcale nie trwa duej ni tworzenie kodu byle jakiego,
o ile tylko liczy si czas od pocztku projektu do oddania gotowego produktu, a nie do czasu oddania pierwszej, najeonej bdami, wersji. Warto fanatycznie dba o jako tworzonego kodu. Porzdne kodowanie ley jak najbardziej w zasigu moliwoci i trzeba si go nauczy, moliwie jak
najprdzej.
Idealnie byoby przeanalizowa i przebudowa cae rodowisko, w tym stosowany jzyk programowania i system operacyjny, jako najwyszy priorytet przyjmujc bezpieczestwo. Mamy
wielk ochot wzi kiedy udzia w takim projekcie, wic prosimy o kontakt kadego, kto ma do
wydania kilka milionw dolarw na komputer naprawd godny zaufania.