Wykład VIII Kierunek Matematyka - semestr IV Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik
Egzotyczne algorytmy z kluczem publicznym
Przypomnienie Algorytm z kluczem publicznym - oparty na dwóch kluczach: publicznym i prywatnym. Klucza prywatnego nie można obliczyć na podstawie klucza publicznego. Szybkość szyfrowania i deszyfrowania jest zwykle w takich algorytmach dużo mniejsza niż szybkość algorytmów symetrycznych.
Zastosowania Algorytmy z kluczem publicznym są podstawą algorytmów (albo same są takimi algorytmami) stosowanych do: szyfrowania informacji wymiany kluczy podpisów cyfrowych
Przypomnienie RSA - problem rozkładu liczby naturalnej na iloczyn liczb pierwszych Algorytm Rabina - problem znajdowania pierwiastków kwadratowych modulo liczba złożona Algorytm ElGamala - problem logarytmu dyskretnego Algorytm Masseya-Omury Algorytm Merkle a-hellmana - algorytm plecakowy (złamany)
Algorytm McElience a Algorytm McElience a - opracowany w 1978 roku, oparty jest na trudności dekodowania kodów liniowych. W przypadku tego algorytmu zastosowano kody Goppy. Zalety: - prędkość kodowania i dekodowania - łatwość implementacji Wady: - długie klucze - 2 19 bitowe (512 KB) - długi szyfrogram
Kody Goppy Kod Goppy (binary Goppa code) - jest kodem liniowym służącym do korekcji błędów. Każdy z kodów Goppy jest zadany przez wielomian g(x) stopnia t nad ciałem GF (2 m ), bez pierwiastków wielokrotnych, oraz przez ciąg L składający się z n różnych elementów ciała GF (2 m ) nie będących pierwiastkami wielomianu g(x), tzn. i,j {0,...,n 1} L i GF (2 m ) L i L j g(l i ) 0. Kod Goppy Γ(g, L) tworzy następującą podprzestrzeń przestrzeni Z n 2 : { } n Γ(g, L) = c Z n c i 2 ; 0 mod g(x) x L i i=1
Kody Goppy Kod Goppy Γ(g, L) ma rozstęp 2t + 1, więc może korygować t błędów (t to stopień wielomianu g(x)). Macierz kontroli parzystości tego kodu jest postaci: 1 1... 1 1 L 1 0 L 1 1... L 1 n 1 L 2 0 L 2 1... L 2 n 1 H = VD = V - macierz Vandermonde a...... L t 0 L t 1... L t n 1 g(l 0) 0... 0 1 0 g(l 1)... 0...... 0 0... 1 g(l n 1)
Algorytm McElience a - klucze Wybieramy parametry n, k i t. Wybieramy losowo macierz generującą (n, k) kod Goppy o rozstępie t. Wybieramy losowo macierz permutacji P o wymiarach n n. Wybieramy losową macierz odwracalną S o wymiarach k k. Obliczamy G = S G P Klucz publiczny: (G, t) Klucz prywatny: P, S i wielomian zadający kod
Algorytm McElience a - szyfrowanie Tekst jawny dzielimy na k-bitowe bloki. Niech u będzie takim blokiem. Obliczamy wektor: x = ug + z gdzie: G to publiczna macierz generująca kod, z to lokalnie wygenerowany losowy wektor o długości n i wadze t.
Algorytm McElience a - szyfrowanie Tekst jawny dzielimy na k-bitowe bloki. Niech u będzie takim blokiem. Obliczamy wektor: gdzie: x = ug + z G to publiczna macierz generująca kod, z to lokalnie wygenerowany losowy wektor o długości n i wadze t. Zaleta: Dwa takie same bloki mogą być szyfrowane w różny sposób (losując różne wektory z).
Algorytm McElience a - deszyfrowanie Obliczamy x = xp 1 gdzie P 1 jest macierzą odwrotną do macierzy permutacji P. Otrzymane x jest słowem kodowym dla kodu Goppy. Stosujemy algorytm korekcji błędów. Na koniec obliczamy u = u S 1 gdzie u to wektor po korekcji błędów.
Algorytm McElience a - deszyfrowanie Obliczamy x = xp 1 gdzie P 1 jest macierzą odwrotną do macierzy permutacji P. Otrzymane x jest słowem kodowym dla kodu Goppy. Stosujemy algorytm korekcji błędów. Na koniec obliczamy u = u S 1 gdzie u to wektor po korekcji błędów. Szkic dowodu. xp 1 = (ug + z)p 1 = usg + zp 1 = us ponieważ wektor zp 1 ma taką samą wagę jak z.
Algorytm McElience a - kryptoanaliza McEliece w swojej pracy sugerował użycie następujących liczb: n = 1024, t = 50 co daje około 10 149 wielomianów definiujących kody Goppa, oraz astronomiczną liczbę wyborów S i P. Kod będzie wymiaru k = 1024 50 10 = 524. W 2008 roku, Bernstein, Lange i Peters opisali praktyczny atak na oryginalny kryptosystem McElience a. Ten atak wymaga wielkiej ilości obliczeń, które można zrównoleglić.
Algorytm Tao Renji Chiński kryptograf Tao Renji zaproponował algorytm wykorzystujący teorię automatów skończonych. Algorytm ten bazuje na problemie faktoryzacji złożenia dwóch automatów skończonych, gdy co najmniej jeden z nich jest nieliniowy. Zaleta: - działa szybciej niż RSA Wada: - wymaga długich kluczy. Bezpieczeństwo zbliżone do 1024-bitowego klucza RSA wymaga w tym algorytmie klucza o długości około 4152 bitów. Wersje: FAPKC0, FAPKC1, FAPKC2, FAPKC3, FAPKC4
Automat skończony Definicja Skończonym automatem (Mealy ego) nazywamy uporządkowaną piątkę A = Q, X, Y, δ, λ gdzie: 1) Q jest niepustym skończonym zbiorem stanów wewnętrznych, 2) X i Y jest skończonymi alfabetami odpowiednio symboli wejściowych i wyjściowych, 3) δ : Q X Q jest funkcją przejścia, 4) λ : Q X Y jest funkcją wyjścia.
Rozszerzenia Funkcje δ i λ mogą być rozszerzone do δ : Q X Q i λ : Q X Y w następujący sposób: δ(q, ɛ) = q, δ(q, ωx) = δ(δ(ω, q), x), λ(q, ɛ) = ɛ, gdzie q Q, ω X, x X. λ(q, ωx) = λ(q, ω)λ(δ(q, ω), x), Wprowadzamy odwzorowanie f A,q : X Y określone przez automat A w stanie q Q następująco: f A,q (ω) = λ(q, ω), ω X.
Złożenie automatów Niech A 1 = Q 1, X 1, Y 1, δ 1, λ 1, q 1 i A 2 = Q 2, X 2, Y 2, δ 2, λ 2, q 2 będą dwoma automatami inicjalnymi takimi, że Y 1 = X 2. Złożeniem tych automatów nazywamy automat gdzie A 1 A 2 = Q 1 Q 2, X 1, Y 2, δ, λ, (q 1, q 2 ) δ((r 1, r 2 ), x) = ( δ 1 (r 1, x), δ 2 (r 2, λ 1 (r 1, x)) ), λ((r 1, r 2 ), x) = λ 2 ( r2, λ 1 (r 1, x)) ) dla wszystkich r 1 Q 1, r 2 Q 2, x X 1.
Liniowy automat skończony Definicja Niech F pewne ciało. Automatem liniowym nazywamy automat A = Q, X, Y, δ, λ taki, że Q = F k, X = F m i Y = F r oraz δ(q, x) = A q + B x, λ(q, x) = C q + D x, gdzie A k k, B k m, C r k, D r m to macierze o współczynnikach z ciała F.
Algorytm Tao Renji - idea Konstruowane są dwa automaty liniowy i quasi-liniowy. Ten drugi ma własność słabej odwracalności wtedy i tylko wtedy, gdy jego macierze są schodkowe. Ta własność znika po wykonaniu złożenia. Kluczem publicznym jest automat powstały poprzez złożenie tych dwóch automatów. Kluczem prywatnym są dwa automaty realizujące odwzorowania odwrotne do odwzorowań zadanych początkowymi automatami. Szyfrowanie i deszyfrowanie polega na przetwarzaniu wiadomości/szyfrogramu odpowiednim złożeniem automatów.
Algorytm Tao Renji
Liczby Lucasa Dany jest ciąg: f n = Pf n 1 Qf n 2, n > 1 gdzie f 0, f 1 są dwiema ustalonymi wartościami początkowymi, a P i Q ustalonymi stałymi względnie pierwszymi. Dla P = Q = 1 i f 0 = 0, f 1 = 1 otrzymujemy ciąg Fibonacci ego.
Liczby Lucasa Niech α i β są pierwiastkami równania x 2 Px + Q = 0. Jeżeli f 0 = 2 i f 1 = P, to mamy ogólny wzór f n = α n + β n Liczbę f n będziemy nazywali liczbą Lucasa n-tego stopnia i będziemy ją oznaczali poprzez V n (P, Q).
Liczby Lucasa - własności Jeżeli n jest dowolną liczbą naturalną, to zachodzi V k (P mod n, Q mod n) = V k (P, Q) mod n Jeżeli Q = 1, to V nk (P, 1) = V n (V k (P, 1), 1).
Algorytm LUC (rok 1993) Niech n = p q, gdzie p i q są liczbami pierwszymi spełniającymi wymagania stawiane dla RSA. Niech M będzie wiadomością, M < n. Wybieramy liczbę e względnie pierwszą z iloczynem (p 1)(p + 1)(q 1)(q + 1) Obliczamy cztery możliwe wartości d: d = e 1 mod(nww(p + 1, q + 1)) d = e 1 mod(nww(p + 1, q 1)) d = e 1 mod(nww(p 1, q + 1)) d = e 1 mod(nww(p 1, q 1))
Algorytm LUC Szyfrowanie: C = V e (M, 1) mod n Deszyfrowanie: dla jednej z wartości d. M = V d (C, 1) mod n
Wielokluczowa kryptografia Wielokluczowa kryptografia z kluczem publicznym - jest uogólnieniem idei algorytmu RSA. Niech n = p q, gdzie p i q są liczbami pierwszymi spełniającymi wymagania stawiane dla RSA. Wybieramy t kluczy K i takich, że K 1 K 2... K t 1 mod (p 1)(q 1) Wtedy M K 1 K 2... K t M mod n
Zastosowanie w podpisach wielokrotnych Alicja i Bob chcą podpisać dokument tak, aby ich podpisy były łatwo weryfikowalne publicznie. Osoba trzecia (notariusz) generuje liczby K 1, K 2 i K 3. K 1 przekazuje Alicji, K 2 Bobowi, a K 3 ogłasza publicznie. Alicja podpisuje M obliczając M = M K 1 mod n. Wysyła M Bobowi. Bob może sprawdzić, co podpisywała Alicja obliczając M = M K 2K 3 mod n, oraz dodać swój podpis M = M K 2 mod n Każdy może sprawdzić podpis używając klucza publicznego K 3 M = M K 3 mod n
Zastosowania algorytmów z kluczem publicznym Bezpieczne obliczenia wielostronne - na przykładzie tzw. problemu milionerów. Alicja zna liczbę całkowitą i, Bob zna liczbę całkowitą j. Chcą ustalić, czy i j albo i > j, ale niech chcą ujawnić swoich liczb.
Problem milionerów Zakładamy, że liczby i, j są z przedziału od 1 do 100. Alicja wybiera dużą liczbę losową x i szyfruje ją za pomocą klucza publicznego Boba c = E B (x) Alicja oblicza c i i przesyła wynik Bobowi. Bob oblicza 100 liczb: y k = D B (c i + k) 1 k 100 Bob wybiera dużą liczbę pierwszą p nieco mniejszą niż wartość x. (Alicja może podać rozmiar x).
Problem milionerów Bob oblicza 100 następnych liczb z k = y k mod p 1 k 100 Bob sprawdza, czy dla wszystkich k l z k z l 2 i czy dla wszystkich k 0 < z k < p 1. Jeśli nie, to wybiera inne p i próbuje ponownie. Bob przesyła Alicji ciąg liczb (w tym porządku): z 1, z 2,..., z j, z j+1 + 1, z j+2 + 1,..., z 100 + 1, p
Problem milionerów Alicja sprawdza, czy i-ta liczba w podanym ciągu jest przystająca do x modulo p. Jeśli tak, to wnioskuje, że i j. Jeśli nie, to wnioskuje, że i > j. Alicja przekazuje Bobowi swój wniosek.
Koniec