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.