13.1. Kodowanie danych i arytmetyka dużych liczb 297
liczby pierwsze 5, NI i N2 (typowo 100 cyfrowe) i udostępnia publicznie tylko ich iloczyn5 N =NIkN2 oraz pewną liczbę P, spełniającą warunek:
PxS mod (NI-I) x(N2-l)=I.
Zostało udowodnione, że dla każdego ciągu kodowego M (tekst zostaje zamieniony na odpowiadający mu ciąg liczbowy o pewnej skończonej długości) spełniona jest równość: MIS mod N = M.
Kodowanie sprowadzi się zatem do obliczenia rówmości:
{ciąg kodowy}=£or/rr/(!Vl)= M1' mod N,
natomiast dekodowanie jest równoważne obliczeniu:
M=clekoduj({ciąg kodowy})= {ciąg kodowy}s mod N.
Pomimo pozornej trudności wykonania operacji na bardzo dużych liczbach, okazuje się, że własności funkcji modulo powodują, iż zarówno ciąg kodowy, jak i jego zaszyfrowana postać należą do tego samego zakresu liczb. Złamanie systemu RSA byłoby możliwe, jeśli umielibyśmy na podstawie znanych wartości N i P odtworzyć utajnione .9, potrzebne do rozkodowania wiadomości! Nie znaleziono do tej pory algorytmu, który potrafiłby wykonać to zadanie w rozsądnym czasie.
Wszelkie algorytmy kryptograficzne napotykają na problem wykonywania obliczeń na bardzo dużych liczbach całkowitych. Okazuje się, że obliczenia te mogą zostać znacznie uproszczone, pod warunkiem traktowania tych liczb jako współczynników wielomianów. Weźmy dla przykładu liczbę:
12 9876 0002 6000 0000 0054
W systemie o podstawie a-10 powyższa liczba może zostać przedstawiona jako:
a:21 +2x10 +(9xiv + 8a:18 + 7x17 +6xi6) + (2xi2) + (6jcii) + (5xi +4).
Jeśli x— 10 wydaje nam się za małe, to identyczną liczbę otrzymamy podstawiając, np. a-10000:
5 Ponieważ nie są aktualnie znane szybkie metody rozkładu na czynniki pierwsze, dokonanie takiego rozkładu przez osobę postronnąjest wysoce nieprawdopodobne.