A jednak się da!
O łganiu w żywe oczy
W poprzednim odcinku naszej sagi przedstawiliśmy miłosną historię Aldony i Bogumiła. Poniżej prezentujemy jej dość dramatyczną kontynuację, widzianą oczami Aldony...
Problem. Aldona ma problem sercowy. Na dyskotece z okazji ostatniego dnia kolonii poznała chłopaka, Bogumiła. Był całkiem sympatyczny, więc nawet ucieszyła się, gdy zadzwonił do niej kilka dni po zakończeniu wyjazdu. Umówili się na ciastka, przyniósł jej bardzo ładne kwiatki i tak zaczęli się spotykać. Bogumił wydaje się bardzo porządny, jednak jakaś część serca Aldony wciąż tęsknie wzdycha do innego poznanego na koloniach chłopaka, Dobromira, z którym od pewnego czasu koresponduje. Aldona nie jest jeszcze pewna swoich uczuć i nie chciałaby zamykać się na żadną z możliwości, co jest zupełnie zrozumiałe. Problem w tym, że Bogumił zdaje się wiedzieć o jej kontakcie z Dobromirem i być może lada chwila będzie się od niej domagał ujawnienia korespondencji. Aldona jest wielką miłośniczką kryptografii, w związku z czym do komunikacji z Dobromirem używa protokołu szyfrowania RSA. Niestety, Bogumił nie jest w ciemię bity i wie, że w tym protokole Aldona nie może udawać, że zaszyfrowała inną wiadomość niż w rzeczywistości. Czy istnieje sposób, dzięki któremu Aldona mogłaby wmawiać Bogumiłowi, że przesyłane przez nią do Dobromira listy mają treść inną niż naprawdę?
Protokół, którego potrzebuje Aldona, nosi nazwę szyfrowania wypieralnego (jest to dość karkołomna próba autora tłumaczenia angielskiego terminu deniable encryption). Zanim mu się przyjrzymy, wyjaśnijmy najpierw, na czym polega wspomniana w powyższej historii wada szyfrowania RSA. Temu szyfrowaniu poświęcony był pierwszy odcinek sagi, zamieszczony w poniżej przedstawiamy skrótowe przypomnienie:
Zauważmy, że oszalały z zazdrości Bogumił, który nakrył Aldonę na wysyłaniu szyfrogramu (czyli zaszyfrowanej wiadomości) do Dobromira, mógłby próbować wymusić na niej ujawnienie treści wiadomości
Niestety, Aldona nie mogłaby udać, że chciała wysłać inną wiadomość
niż w rzeczywistości. Bogumił ma dostęp do klucza publicznego
i wie, na czym polega szyfrowanie, w związku z czym wystarczy, że sprawdzi, czy
- jeśli nie, dowiaduje się, że
i Aldona próbowała go oszukać, co czyni go jeszcze bardziej sfrustrowanym. Można odnieść wrażenie, że nie sposób skonstruować protokołu szyfrowania z kluczem publicznym, który byłby pozbawiony tego mankamentu - rzecz jasna, gdyby to była prawda, nie pisalibyśmy o tym w ramach naszego cyklu: A jednak się da!
Naturalnie, wystarczy nam umiejętność wypieralnego szyfrowania pojedynczego bitu - wszak dowolnie długą wiadomość można rozbić na bity i osobno zaszyfrować każdy z nich. Takie szyfrowanie można przedstawić w postaci dwóch czynności: i
oraz klucza
Dobromir informuje Aldonę, że jeśli chce ona wysłać do niego bit 0, powinna wykonać czynność
a jeśli chce wysłać 1 - wykonuje
Klucz
powinien pozwalać Dobromirowi na rozstrzygnięcie, czy Aldona wykonała
czy
Oczywiście, aby to szyfrowanie miało sens, bez znajomości
to rozstrzygnięcie powinno być bardzo trudne. Rozważane szyfrowanie będzie wypieralne, jeśli dla żadnej z tych czynności nie istnieje dowód (niewymagający klucza
), że wykonało się właśnie tę czynność. Istotnie, gdyby dla którejś z nich istniał taki dowód (powiedzmy dla
), to po wykonaniu
Aldona nie mogłaby udawać przed Bogumiłem, że uczyniła
(gdyż wówczas Bogumił wie, że może domagać się dowodu, a jeśli go nie dostanie, dowiaduje się, że Aldona ma przed nim jakieś sekrety).
Najpierw przedstawimy protokół, w którym tylko czynność będzie pozbawiona wspomnianego "dowodu wykonania" (czyli Aldona może udawać, że przesłała 0, gdy przesłała 1, ale nie odwrotnie). W tym wypadku
będzie oznaczać przesłanie Dobromirowi losowego elementu ze zbioru
(tzn. zbioru ciągów binarnych długości
) dla pewnej (dużej) liczby naturalnej
Czynnością
będzie z kolei wysłanie losowego elementu z pewnego podzbioru
zbioru
Pojawia się tutaj pewien szkopuł - przecież element z
jest również elementem z
zatem po wykonaniu
Dobromir nie jest w stanie stwierdzić ze stuprocentową pewnością, że nie zostało wykonane
Sto procent to faktycznie za dużo, ale jeśli zbiór
jest dostatecznie mały w stosunku do
to szansa na wybór elementu z
przy losowaniu z
jest pomijalnie mała (mniejsza niż, powiedzmy,
), w związku z tym czynności
i
mają praktycznie rozłączne skutki. Pojawiło się nam w ten sposób pierwsze naturalne wymaganie wobec zbioru
:
- (a)
- stosunek
jest bardzo mały.
Kolejne wymagania wobec zbioru są bezpośrednimi konsekwencjami sformułowanych wcześniej własności czynności
i
prowadzących do uzyskania protokołu szyfrowania ( "połowicznie") wypieralnego:
- (b)
- łatwo generować losowe elementy zbioru
bez znajomości klucza
- (c)
- bez znajomości klucza
trudno stwierdzić, czy dany
należy do
- (d)
- znając klucz
łatwo stwierdzić, czy dany
należy do
- (e)
- bez znajomości klucza
praktycznie nie sposób udowodnić, że dany
nienależący do
faktycznie nie należy do
Uff, pozostaje nam teraz "tylko" wskazać taki magiczny (można poetycko napisać: przezroczysty) zbiór spełniający własności (a)-(e). Zwrócimy najpierw uwagę na pewną charakterystyczną własność funkcji
przy szyfrowaniu z kluczem publicznym. Jej obliczenie jest proste, natomiast jej odwrócenie bardzo trudne, o ile nie znamy klucza prywatnego. Jeśli potraktować
jako funkcję z
do
dla pewnej liczby naturalnej
(możemy tak zrobić, zapisując argumenty i wartości w postaci binarnej), takie funkcje zwykło się nazywać funkcjami jednokierunkowymi z zapadką - łatwo obliczać ich wartości i trudno je odwracać (jednokierunkowość) bez podpowiedzi (zapadki).
Okazuje się, że dla każdej funkcji jednokierunkowej można wskazać "funkcję trudnego bitu", tzn. funkcję
taką, że
jest trudne do obliczenia, jeśli znamy tylko wartość
Mówi o tym twierdzenie Goldreicha-Levina. Odpowiednie definicje "trudności" są w tym kontekście dość skomplikowane - na potrzeby artykułu ograniczymy się do stwierdzenia, że dla odpowiednio dużych wartości
z omawianymi tutaj trudnymi zadaniami nie poradzi sobie żaden ziemski komputer.
Ustalmy pewną funkcję jednokierunkową z zapadką
oraz odpowiadającą jej funkcję trudnego bitu
Ustalmy liczbę naturalną
(dużo) większą od
Dla dowolnego ciągu
z
rozważmy ciąg z
powstały przez dołączenie do
(gdzie "potęgowanie" funkcji oznacza krotność iteracji) "trudnych bitów" z
a zbiór tak powstałych ciągów oznaczmy przez
to znaczy

gdzie znak " " oznacza łączenie ciągów. Zbiór
ma wszystkie pożądane własności! Istotnie, jego rozmiar to
(co w porównaniu z
jest bardzo małe, więc spełnione jest (a)), a sposób generowania elementów z
wychodzący od dowolnego elementu
z
(i niewymagający klucza
), został przedstawiony wyżej (własność (b)). Jeśli dostaniemy dowolny
to aby stwierdzić, czy jest to element z
musielibyśmy sprawdzić, czy jego ostatnie
bity są "trudnymi bitami" dla
dla pewnego
o którym wiemy jedynie, ile wynosi
(jest to pierwsze
bitów
). Zgodnie z definicją "trudnego bitu", bez znajomości
jest to zadanie trudne (zatem spełniona jest własność (c)), a znając
- łatwe (co oznacza (d)). Ponadto, nie znając
praktycznie nie można udowodnić, że dany
spoza
faktycznie do niego nie należy - ponownie, jak poprzednio, należałoby obliczyć odpowiednie "trudne bity" i uzasadnić, że się nie zgadzają z "ogonem"
a tego bez klucza zrobić nie umiemy, co uzasadnia ostatnią własność (e). Przypomnijmy jednak, że nasz sukces jest niestety połowiczny - Aldona może udawać tylko "w jedną stronę".
Teraz czas na przedstawienie czynności i
z których obie są pozbawione "dowodu wykonania" (no dobrze - tak szczerze mówiąc, jedna z nich będzie go pozbawiona z dużym prawdopodobieństwem). Polega on na odpowiednim "zamaskowaniu" kłopotliwej sytuacji, której doświadczyliśmy poprzednio. Teraz Aldona wybiera liczbę naturalną
i losuje
Następnie losuje
ze zbioru
oraz (jeśli
)
ze zbioru
Czynność
polega na wylosowaniu
ze zbioru
a czynność
- na wylosowaniu
ze zbioru
Oczywiście Dobromir - podobnie jak poprzednio - może bez problemu sprawdzić, co chciała przesłać Aldona. Ponadto, jeśli Aldona zrobiła
może śmiało wmawiać Bogumiłowi, że zrobiła
- wystarczy, że będzie twierdzić, że
było wylosowane z
(czego i tak nie byłaby w stanie udowodnić), oraz pokaże mu, jak wygenerowała
(co będzie dowodem, że należy ono do
). Co, jeśli Aldona zrobiła
i chce przekonać Bogumiła, że było to
Wtedy może mu powiedzieć, że zarówno
jak i
były wylosowane z
i pokaże, jak wygenerowała
z
W takim przypadku Bogumił również nie jest w stanie wykryć szwindlu. Czy aby na pewno? Zauważmy, że Aldona może nieszczęśliwie wylosować
i wówczas, jeśli zrobiła
i chce wmówić Bogumiłowi, że było inaczej, to twierdziłaby, że wszystkie liczby
były wylosowane z
- taka sytuacja nie jest jednak dopuszczalna przez protokół. Wydawać by się mogło, że nie jest to problem - przecież to Aldona jest "stroną losującą", więc jeśli wylosuje
może śmiało powtórzyć losowanie. Dla jednego bitu takie oszustwo mogłoby przejść, ale (jak to w kryptografii) zakładamy, że przeciwnik (tutaj, niestety, Bogumił) "zna system" i w końcu zorientowałby się, że protokół nie jest taki, jak mówimy (tzn. nigdy nie wylosowaliśmy
chociaż po dłuższym czasie powinno to się zdarzyć). W tej sytuacji należy po prostu uznać, że nasze rozwiązanie nie jest idealne i z grubsza "raz na
", niestety, próba oszustwa wychodzi na jaw.
Rzecz jasna, opisane tu uczuciowe rozterki miały jedynie dodać całej historii kolorytu. Mamy jednak nadzieję, że Czytelnikom łatwo będzie uwierzyć w znaczenie przedstawionej idei dla bezpieczeństwa w cyberprzestrzeni.