Wykład 6 Kryptografia główne slajdy 9 listopada 2011 w OpenSSL Instytut Informatyki Uniwersytet Jagielloński 6.1
Kryptografia nie ma konieczności ustalania wspólnego klucza przed komunikacja sama w sobie nie zapewnia bezpieczeństwa skad pewność, że podany klucz rzeczywiście należy do Alicji? klucz trzeba uzyskać bezpiecznym kanałem podstawowe wykorzystanie uzgadnianie klucza szybka wymiana klucza symetrycznego podpisy cyfrowe weryfikacja tożsamości przy konieczności zapewnienia niezaprzeczalności kosztowne obliczeniowo znacznie wolniejsze od symetrycznego, szczególnie deszyfrowanie zależy od wybranego klucza wykładnika łatwość popełnienia błędu potrzeba struktury zapewniajacej o własności klucza () algorytmy Diffie-Hellmana,, DSA (dla podpisów cyfrowych), krzywe eliptyczne w OpenSSL 6.2
Algorytmy klucza publicznego algorytm Rivest, Shamir, Adleman obsługuje szyfrowanie, podpisywanie cyfrowe, uzgadnianie klucza DSA Digital Signature Algorithm tylko podpisywanie cyfrowe Diffie-Hellmana tylko uzgadnianie klucza algorytm Rabina algorytm plecakowy w OpenSSL 6.3
konieczne definicje a jest kongruentne z b mod n, jeśli n dzieli a b a = b mod n czyli a = kn + b a = a 1 mod n, b = b 1 mod n, wtedy a + b mod n = (a 1 + b 1 ) mod n, ab mod n = a 1 b 1 mod n jeśli n jest liczba pierwsza, to a n 1 = 1 mod n dla a takich, że gcd(a, n) = 1 (małe twierdzenie Fermata) n = pq i r = s mod n to a r = a s mod n można redukować wykładniki modulo φ(n) = (p 1)(q 1) niech p pierwsza; jeśli gcd(a, p) = 1, to a p 1 = 1 mod p działaj ac modulo liczba pierwsza, można redukować wykładniki modulo p 1 w OpenSSL 6.4
operacje arytmetyczne potęgowanie modularne można wykonać efektywnie na zmianę mnożac i podnoszac do kwadratu niech k = t i=0 k i2 i b = 1 A = a if(k_0 == 1) b = a for(i = 1 to t) A = A^2 modulo n if(k_i == 1) b = (A b) modulo n w OpenSSL złożoność rzędu O((log n) 3 ) 6.5
wybór kluczy 1 Alicja wybiera 2 różne liczby pierwsze p i q, n = pq 2 teraz wybiera e : 1 < e < ϕ(n) = (p 1)(q 1) takie, że gcd(e, (p 1)(q 1)) = 1 e jest liczba nieparzysta 3 teraz Alicja wybiera d takie, że ed = 1 mod (p 1)(q 1) takie d istnieje, bo gcd(e, (p 1)(q 1)) = 1 kluczem publicznym Alicji staje sie para (e, n) kluczem prywatnym jest (d, n) w OpenSSL szyfrowanie to c = m e deszyfrowanie natomiast m = c d 6.6
działa ed = 1 mod (p 1)(q 1) więc ed = 1 + k(p 1)(q 1) (m e ) d = m ed = m 1+k(p 1)(q 1) = m(m p 1 ) k(q 1) (tw. Fermata) Jeśli p liczba pierwsza i gcd(m, p) = 1, to m p 1 = 1 gcd(p, m) = 1 to z tw. Fermata m p 1 = 1 mod p gcd(p, m) = 0 to obie strony sa równe 0 stad m ed = m(m p 1 ) k(q 1) analogicznie m ed = m(m q 1 ) k(p 1) mod p = m mod p p i q sa różnymi liczbami pierwszymi, stad m ed = m mod n mod q = m mod q w OpenSSL 6.7
Czy p jest liczba pierwsza? (tw. Fermata) Jeśli p liczba pierwsza to a p 1 = 1 mod p dla wszystkich takich a, że gcd(a, p) = 1 1 wybieramy wszystkie a {1, 2,..., p 1} 2 obliczamy y = a p 1 mod p 3 jeśli y 1, to p jest liczba złożona istnieja takie liczby złożone p, że a p 1 = 1 mod p test wykazuje jedynie, że p jest złożona to liczby Carmichaela i jest ich nieskończenie wiele najmniejsza znana jest 561 = 3 11 17 test rabina-millera praktyczna procedura wyboru liczby pierwszej 1 wybieramy n bitowa liczbę ustawiajac 1-szy i n-ty bit na 1, resztę losujemy 2 sprawdzamy czy n jest podzielna przez któraś z liczb mniejszych od ustalonego progu, zwykle 10 6 3 wykonujemy t razy test Rabina-Millera 4 zwykle t = 3, co daje pewność co najmniej 1 (1/2) 80, że n jest pierwsza w OpenSSL 6.8
Wybór p, q, e p i q powinny być losowo wybranymi liczbami pierwszymi jeśli p 1 ma tylko małe czynniki (p jest złożona) to istnieja efektywne algorytmy faktoryzacji czy konieczne jest sprawdzanie takich warunków? prawdopodobieństwo, że tak się stanie jest bardzo niewielkie konieczny jest wybór liczb o większej od minimalnej długości dla efektywności szyfrowania wybieramy możliwie mały klucz e jeśli np. e = 3, to wystarczy jedno potęgowanie i jedno mnożenie mod n to jednak może ułatwić atak przy dużej liczbie tych samych informacji zaszyfrowanych przy pomocy tego samego wykładnika (ale różnych n) np. wielokrotnie wysłany ten sam mail do wielu osób przy pomocy ich klucza publicznego klucz prywatny d powinien być przechowywany w sposób bezpieczny karta elektroniczna zabezpieczona PIN-em czy fraza karta sama dokonuje rozszyfrowywania procesor na karcie jest wolny może więc tutaj klucz powinien być mały? w OpenSSL 6.9
z szyfrowania asymetrycznego tylko podczas wymiany kluczy zbyt złożone obliczeniowo a niezaprzeczalność? podpisy cyfrowe! po ustaleniu klucza raczej kody MAC szybciej klucz publiczny musi być uzyskany w sposob bezpieczny i pewny podatność na atak man in the middle rozwiazaniem może być infrastruktura także dla zapewnienia niezaprzeczalności w OpenSSL który algorytm? zwykle szybszy od algorytmu DSA dla podpisów 6.10
Obsługa dużych liczb i generowanie liczb pierwszych zwykle reprezentowana jako ciag bajtów w OpenSSL to typ BIGNUM generowanie liczb pierwszych np. w OpenSSL procedura BN_generate_prime() za pomoca generatora liczb losowych, np. BN_rand() zwykle 2 pierwsze bity ustawiane by zapewnić żadan a długość iloczynu do testowania wykorzystywany probabilistyczny test Rabina-Millera BN_is_prime() w OpenSSL 6.11
Szyfrowanie przy wykorzystaniu konwersja komunikatu do liczby całkowitej m kodowanie do szyfrogramu c = m e publicznym e deszyfrowanie m = c d mod n mod n kluczem powolne podejście kopertowe zakodowany za pomoca klucz symetryczny komunikat zakodowany symetrycznie konieczność dopełniania komunikatów standard EME-OAEP dopełnia dane losowymi wartościami z funkcji jednokierunkowej jeśli klucz ma 2048 bitów, czyli 256 bajtów funkcja mieszajaca zwraca 20 bajtów można zakodować 256 2 20 2 = 214 bajtów w OpenSSL 6.12
Potrzeba Public Key Infrastructure sama klucza publicznego jest tylko metoda szyfrowania atak man in the middle Bob rozmawiajac z Alicja musi mieć pewność, że to nie jest Mallory... wymiana kluczy powinna następować przez bezpieczne medium zaufane kanały, tryb off-line uwierzytelnianie kluczy przez porównanie odcisków cyfrowych kluczy (fingerprints) mało skalowalne jest trzecia zaufana strona wydajac a certyfikaty w OpenSSL certyfikat łaczy klucz z informacjami o właścicielu Bob może sprawdzić prawdziwość certyfikatu 6.13
Infrastruktura klucza publicznego CA (Certificate Authority) wystawia użytkownikom certyfikaty wersja certyfikatu numer seryjny certyfikatu, unikalny dla CA algorytm i parametry użyte do podpisu nazwa CA i unikalny identyfikator CA okres ważności nazwa użytkownika (ang. distinguished name) unikalny identyfikator użytkownika algorytm klucza i zwiazane z tym parametry klucz publiczny użytkownika rozszerzenia elektroniczny podpis CA w OpenSSL CA Publiczne i Prywatne CA (lub RA Registration Authority) przeprowadzaja rzeczywista kontrolę użytkowników 6.14
Lista kluczy usuniętych problem z usunięciem klucza, zwykle jest wiele kopii lista kluczy usuniętych CRL (Certificate Revokation List) typ CRL algorytm i parametry użyte do podpisania nazwa CA data utworzenia CRL lista usuniętych certyfikatów rozszerzenia podpis elektroniczny CA w OpenSSL 6.15
Problemy z CRL przepustowość klienci musza ściagać pełne CRL i buforować możliwość kawałkowania CRL lub list przyrostowych CRL aktualizowane sa z opóźnieniem wiele programów nie sprawdza CRL lub robi to źle VeriSign wydało klucze do oprogramowania dla Microsoft żadaj acy był oszustem, VeriSign wycofało klucze oprogramowanie Microsoft nie sprawdzało list CRL... co robić gdy unieważniany jest klucz głównego CA? protokół OCSP Online Certificate Status Protocol obsługiwany przez CA lub trzecia stronę na rzecz jednego lub więcej CA odpowiada na test Good, Revoked, Unknown mało serwerów OCSP możliwość ataków na serwery OCSP Denial of Service ataki replay (odgrywania, powtórzeń) man in the middle w OpenSSL 6.16
Problemy nazwy w certyfikatach nie sa unikalne nie ma pełnego zaufania do CA prawa dostępu musza być kontrolowane lokalnie brak jednolitego standardu certyfikatów administracja uprawnieniami systemy zawiaduja same, zapewnia uwierzytelnianie łatwa implementacja; żadnej dodatkowej struktury trudna synchronizacja przywilejów przywileje, atrybuty, autoryzacje w certyfikacie jako rozszerzenie łatwe usunięcie przywilejów przez usunięcie certyfikatu konieczność wydawania nowych przywileje w certyfikacie atrybutów łatwa administracja koszt infrastruktury problemy z przekazywaniem uprawnień w OpenSSL 6.17
Utworzenie własnego wykorzystujac OpenSSL utworzenie kartoteki mkdir /opt/igorca cd /opt/igorca mkdir certs private chmod g-rwx, o-rwx private echo 01 > serial touch index.txt w OpenSSL 6.18
Konfiguracja openssl.cnf [ ca ] default_ca = igorca [ igorca ] dir = /opt/igorca certificate = $dir/cacert.pem database = $dir/index.txt new_certs_dir = $dir/certs private_key = $dir/private/cakey.pem serial = $dir/serial default_crl_days = 7 default_days = 365 default_md = md5 policy = igorca_policy x509_extensions = certificate_extensions [ igorca_policy ] commonname = supplied stateorprovincename = supplied countryname = supplied emailaddress = supplied organizationname = supplied organizationalunitname = optional w OpenSSL 6.19
Konfiguracja openssl.cnf [ certificate_extensions ] basicconstraints = CA:false [ req ] default_bits = 2048 default_keyfile = /opt/igorca/private/cakey.pem default_md = sha512 prompt = no distinguished_name = igor_ca_distinguished_name x509_extensions = igor_ca_extensions [ igor_ca_distinguished_name ] commonname = IgorCA stateorprovincename = Krakow countryname = PL emailaddress = podolak@ii.uj.edu.pl organizationname = Igor Root Certification Authority [ igor_ca_extensions ] basicconstraints = CA:true w OpenSSL 6.20
wygenerowanie certyfikatu // wydanie samo-podpisanego certyfikatu openssl req -x509 -newkey rsa:2048 -sha512 -days 365 -out cacert.pem -outform openssl x509 -in cacert.pem -text -noout // wydanie i podpisanie nowego certyfikatu // pusta konfiguracja openssl req -newkey rsa:2048 -keyout igor.pem -keyform -out igorreq.pem -outform openssl req -in igorreq.pem -text -noout // kofiguracja CA openssl ca -in igorreq.pem w OpenSSL 6.21
Rozszerzenia certyfikatu X509 wersja 3 zawiera 14 możliwych rozszerzeń 4 sa ogólnie obsługiwane ca: czy certyfikat może być traktowany jako certyfikat CA keyusage: określa sposób w jaki certyfikat może być używany certyfikat CA: keycertsign:true, crlsign:true podpisywanie certyfikatów: KeyCertSign:true klient SSL: digitalsignature:true extkeyusage: jakie użycia certyfikatu sa dopuszczalne, między innymi uwierzytelnianie serwera uwierzytelnianie klientów podpisywanie kodu poczta komputerowa użytkownik IPSec crldistributionpoints: sposób rozpowszechniania list CRL w OpenSSL 6.22
CA generuje swoja parę kluczy i publikuje jeden z kluczem zwiazana samocertyfikacja mówi o własnościach klucza, uprawnieniach, okresie ważności nie stanowi o bezpieczeństwie Alicja dostaje klucz bezpieczna droga odnawianie klucza po utracie ważności klucze musza być odnawiane ze względu na możliwość złamania Alicja wysyła podpisane żadanie uaktualnienia zawierajace nowy klucz publiczny jeśli CA zmienia klucz, musi wydać wszystie ważne certyfikaty bez zmiany okresu ważności prywatny klucz CA jest ważny do momentu w którym ważność traca wszystkie podpisane nim certyfikaty w OpenSSL 6.23
Odtwarzanie zagubionych kluczy zdeponowanie długookresowy prywatny klucz zostaje zdeponowany u zaufanego trzeciego agenta (KRA Key Recovery Agent) enkapsulacja klucz zostaje zakodowany kluczem publicznym KRA przekazanie klucza pojedynczemu agentowi nie zawsze jest bezpieczne można podzielić klucz na wiele częście i przekazać wielu KRA możliwy podział tak, by wystarczyła współpraca n z m agentów KRA w OpenSSL 6.24
Clipper administracja Clintona zaproponowała chip Clipper każde urzadzenie telekomunikacyjne w administracji miałoby zainstalowany układ cyfrowy Clipper Chip chip używałby tajnego algorytmu SKIPJACK automatycznie kodujacy wszystkie wymiany każdy układ miałby własny unikalny klucz klucz w dwóch częściach byłby przechowywany w dwóch agencjach rzadowych do odzyskiwania w uzasadnionych przypadkach reakcja była raczej negatywna kryptografowie zwracali uwagę na użycie tajnych algorytmów rzad USA miał plany ogólnoświatowego standardu przeciw były ruchy obywatelskie Phil Zimmerman z MIT jeśli chcemy obalić zapał rzadu do zabronienia kryptografii, to musimy jej uzywać jak najwiecej póki jest legalna Zimmerman zaproponował w OpenSSL 6.25
: Distinguished Encoding Rules klucz (czy inna strukturę) można zakodować dla przechowywania to format typu XML pozwala na przenoszenie kluczy między aplikacjami możliwe kodowanie kluczy publicznych i prywatnych, DSA parametrów algorytmu Diffie-Hellmana certyfikatów X.509 list unieważnionych certyfikatów w OpenSSL 6.26
: Privacy Enhanced Mail reprezentacja zakodowanych danych w postaci umożliwiajacej drukowanie klucze prywatne i publiczne, parametry algorytmu Diffie-Hellmana, certyfikaty, listy CRL format pochodzi od standardu kodowanej szyfrograficznie poczty, obecnie nie stosowanego dane zakodowane w formacie z dodanymi nagłówkami i stopkami wykorzystujac Base64 możliwe zakodowanie reprezentacji przy wykorzystaniu klucza kodowanie symetryczne funkcja typu callback obsługuje zapytanie o klucz w OpenSSL 6.27