Kryptografia wizualna

Ideą kryptografii wizualnej jest możliwość bezpiecznego zaszyfrowania informacji będącej obrazem – może być to skan dokumentu, zdjęcie czy zapis pisma odręcznego, którą odszyfrować można patrząc na nią.

Na konferencji Euro­crypt’94 Naor i Shamir opisali sposób kodowa­nia czarno-białych obrazów przy pomocy n udzia­łów. Dekodowanie odbywa się za pomocą wzro­ku, gdy przeźroczyste folie z udziałami nakłada się na siebie. Zaproponowano kilka schematów takiego kodowania.

Obraz czarno-biały

Najprostszą odmianą kryptografii wizualnej jest podział obrazu czarno-białego na dwa udziały (przez udział należy rozumieć jedną ze składowych zaszyfrowanego obrazu, które nałożone na siebie pokazują ukryty obraz).

Polega to na podziale każdego piksela obrazu na dwa subpiksele – czarny i przeźroczysty, położone obok siebie (powiedzmy, że przekroimy piksel na dwie połówki – lewą i prawą).

Jeżeli kodowany piksel jest biały, to na obu udziałach czarny subpikselpiksel jest w tym samym miejscu, podobnie przeźroczysty. Jeżeli kodowany jest piksel czarny, to na udziałach subpiksele różnych 'kolorów' zajmują to samo miejsce (tzn. tam gdzie na 1. udziale jest czarny subpiksel na 2. udziale jest subpiksel przeźroczysty). W efekcie, przy odszyfrowywaniu obrazu, kolor biały zostanie zastąpiony przez mieszankę czarnego i przeźroczystego (białego) subpiksela, która będzie dawała złudzenie koloru szarego.

Dodatkowo, aby utrudnić odszyfrowanie obrazu, to czy czarny subpiksel będzie znajdował się z lewej czy prawej strony jest za każdym razem losowane (wybranie obu stron jest jednakowo prawdopodobne). Dzięki takiemu zabiegowi rozkład obrazu na udziały pozwala ukryć informację o obrazie pierwotnym dosyć dobrze. Ponad to jeżeli powtarzalibyśmy taki proces kilkakrotnie to złożenie udziałów pochodzących z różnych podziałów obrazu miałoby bardzo małą szansę na otworzenie szyfrowanego obrazu (która maleje tym bardziej, im większy jest szyfrowany obraz).

Każdy z udziałów sam nie zawiera żadnej informacji na temat zaszyfrowanego obrazu– wygląda jak losowa rozsypanka czarnych i białych punktów. Dopiero po nałożeniu na siebie obu udziałów uzyskujemy informacje jaki obraz został zaszyfrowany.

Sposoby rozkładu informacji

Zaprezentowany powyżej schemat pozwala na zaszyfrowanie czarno-białego obrazu za pomocą dwóch udziałów. Posiada jednak jedną wadę – wprowadza zniekształcenie w jednym kierunku (poziomym). Skąd bierze się to zniekształcenie? Ponieważ w obróbce obrazu piksel jest możliwie najmniejszą składową obrazu, podział obrazu na subpiksele jest tak naprawdę zastąpieniem go dwoma pikselami. Stąd wspomniane wcześniej zniekształcenie. Jak wówczas uniknąć takiego zniekształcenia? Reprezentowany obraz należy zastąpić nie dwoma, ale czterema pikselami ułożonymi w kwadrat (macierz kwadratową). Dzięki temu wyjściowy obraz jest dwa razy większy względem pierwotnego (szyfrowanego), ale nie uzyskujemy zniekształcenia w żadnym kierunku. Powstaje jeszcze jeden plus zwiększenie liczby pikseli szyfrujących jeden piksel obrazu pierwotnego – zwiększenie liczby kombinacji szyfrowania. Dzięki temu uzyskiwane udziały dają większe bezpieczeństwo przesyłu informacji, nawet przy przechwyceniu jednego z udziałów.

Jak dokładnie wygląda wówczas schemat szyfrowania? W tym przypadku zapisuje się listę macierzy szyfrujących kolory. W przypadku kodowania piksela białego do obu udziałów przypisuje się tę samą wylosowaną macierz. W przypadku koloru czarnego – jeden z udziałów ma macierz odpowiadającą wylosowanemu indeksowi jednej listy, a drugi – temu samemu indeksowi z drugiej listy.

W kryptografii graficznej stosuje się zapis (s,p), w którym para liczb określa ile udziałów jest tworzonych (s) oraz ile udziałów jest potrzebnych do odszyfrowania obrazu (p). Podany schemat jest schematem typu (2,2). Korzystając z 4 subpikseli możliwe jest również uzyskanie schematu (3,3). Uzyskuje się to poprzez stworzenie 3 list macierzy, które uzyskuje się poprzez permutowanie (przestawienie) kolumn macierzy:

Przy założeniu, że jeden wiersz odpowiada jednej macierzy w taki sposób:

Ostatecznie w tym przypadku uzyskujemy 24 indeksy na liście (dla schematu (2,2) lista miała 6 macierzy).

Zastosowanie

Gdzie można zastosować takie rozwiązanie ukrywania informacji? Np. w bankach lub innych miejscach, w których powierzenie informacji jednej osobie jest zbyt ryzykowne, a szyfrowanie informacji numeryczne jest zbyt niebezpieczne (każdy kod wygenerowany przez komputer można złamać). A w jaki sposób? Załóżmy, że trzy osoby zakładają skrytkę bankową i żeby ją otworzyć potrzebna jest zgoda wszystkich trzech osób. Wówczas bank może zaszyfrować wydruk z kodem do skrytki na trzech udziałach i rozdać je właścicielom skrytki (każdemu po jednej). W ten sposób nawet bank może nie posiadać informacji o kodzie, który został nadany skrytce.