Wszystkie instrukcje wysyłane do kart sa szyfrowane za pomocą kluczy RSA.
RSA jest kodowaniem niesymetrycznym, tzn do kodowania używamy innych kluczy niż do dekodowania.


Zasada tworzenia klucza publicznego i prywatnego:
- wybieramy losowo dwie duże liczby p,q
- obliczamy n=pq
- obliczamy m=(p-1)(q-1)
- wybieramy niewielka liczbę e względnie pierwsza z m
- obliczamy d będące modularną odwrotnością e (tzn. ed mod m=1)
- kluczem publicznym jest para (e,n)
- kluczem prywatnym jest para (d,n)

Kodowanie
Kodować można liczby mniejsze od min(p,q)
c=w^e mod n, (w-kodowana wiadomosc, c-wartosc po zakodowaniu)

Dekodowanie:
w=c^d mod n

Przyklad na malych liczbach:
Wybieramy p=257, q=263
Obliczamy n=67591, m=67072
Wybieramy e=3
Znajdujemy d=44715
Teraz mozemy zakodowac np liczbe 100:
100^3 mod 67591 - 53726

Odkodujemy:
53726^44715 mod 67591=100

Aby złamać RSA należy rozwiązać problem rozkładu dużych liczb na iloczyn - tzw. faktoryzacja. Mając dane n możemy je sfaktoryzować aby obliczyć p oraz q. Mając p i q obliczamy m a następnie d (czyli nasz klucz prywatny).

RSA jest uważane za bezpieczne z jednego prostego powodu:
Mnożenie jest łatwiejsze niż dzielenie.
O ile faktoryzacja liczb kilkucyfrowych jest względnie prosta o tyle faktoryzacja liczb 100 i więcej cyfrowych jest niezwykle złożona obliczeniowo. Istnieje kilka algorytmów, które pozwalają nam sfaktoryzować wielkie liczby takie jak: transformata Fouriera czy metoda krzywych eliptycznych.

Opis pochodzi ze strony http://www.dvb-z.net/ .