Ukrywanie informacji w tekście polskim
Steganografia
Sposób na ukrywanie zakodowanej informacji w treści tekstu.
Za pomocą pary wyrazów staramy się zapisać znaki. Powiedzmy, że wybieramy dwa zbiory znaków: "w p o t", "p z s r". W ten sposób za pomocą kombinacji tych liter możemy zapisać dowolną cyfrę od 1 do 16. Znaki nie mogą się powtarzać w obrębie grupy z oczywistych względów. Grupy nie muszą zawierać tych samych znaków. A nawet mogą zawierać po kilka znaków równorzędnych. np. litery w oraz t mogą być traktowane wymiennie. Pozwala to pisać bardziej wygodnie i płynnie. Mniejsza ilość liter w grupie ułatwia pisanie naturalnych zdań i pomaga przekazać wiadomość.
Dla pełnego zaciemnienia przekazu tabela konwersji może się zmieniać dynamicznie np. po każdym znaku. Wtedy metody statystyczne nie powinny znaleźć żadnego oparcia w częstotliwości wybierania znaków. Choć pisanie przekazu będzie utrudnione, gdyż za każdym razem będziemy musieli uważać na nieistotne litery przekazu.
Dwa wyrazy będą zawierały zatem informacje o połowie znaku, cztery wyrazy zawierają informacje o całym znaku. I tu również możemy użyć innych wartości. Możemy jak w przykładzie wybrać dwie grupy po 4 znaki, ale możemy wybrać też dwie grupy po 16 znaków, albo 3 grupy o różnej długości znaków np. 8,4,8. Dla wygody przyjmuję by wynik wynosił 256.
Teraz powinniśmy wybrać który znak w wyrazie jest istotny. Czy pierwszy jak w przykładzie, czy drugi czy wręcz różny dla różnych znaków lub ich pozycji w ukrytym przekazie. Ale nawet jeśli wybierzemy pierwszą literę to nie zawsze wyraz zaczynający się od danych liter w pierwszej grupie będzie niósł informacje. Tylko wtedy będzie znaczący jeśli następny wyraz będzie z grupy drugiej. ew. jeśli nie będzie to ostatni wyraz w zdaniu , wersie. (ustawienia).
Przykład:
Zakodujmy na razie niezaszyfrowana wiadomość. Normalnie wiadomość powinna być szyfrowana, ale tak łatwiej będzie wytłumaczyć sam proces kodowania.
Tekst do zakodowania to "IP" = hex 4950 przy poprzednich przykładowych grupach liter.
Mamy zatem cztery grupy po 4 bity. Łącznie 8 wyrazów. Dla ułatwienia wygeneruję tablicę znaków.
| 0 = w p | 8 = o p |
| 1 = w z | 9 = o z |
| 2 = w s | 10 = o s |
| 3 = w r | 11 = o r |
| 4 = p p | 12 = t p |
| 5 = p z | 13 = t z |
| 6 = p s | 14 = t s |
| 7 = p r | 15 = t r |
Aby zapisać zatem nasze "IP" musimy wymyślić zdanie zawierające wyrazy na litery: "ppoz pzwp".
Przykładowe zdanie:
"Piękna Pani o złocistych lokach patrzyła zazdrośnie. Ach jakże patrzyła na mnie. Widocznie przypominałem jej kogoś."
Wyróżnione litery są istotne dla przekazu. Litera "p" we fragmencie "patrzyła na mnie" nie jest istotna, gdyż nie pasuje do schematu.
Koniec zdania też przerywa dwuznaki tak jak litera spoza drugiej grupy. Dlatego koniec zdania nie może być pomiędzy literami pierwszą i drugą, trzecią i czwartą itd. ,ale może być pomiędzy drugą i trzecią, czwartą i piątą itd.
Wszystkie przykłady działają z załączonymi skryptami.
Oczywiście istotne litery można wybrać na dowolną ilość sposobów. Można przyjąć, że istotne litery to np. kolejna litera w wyrazie który jest niepoprawnie napisany. Zawiera błąd ortograficzny, brakuje przecinka, jest napisany bez polskich liter. Także pozycja litery może być zmienna. Nie zawsze będzie to pierwsza litera w wyrazie. Może być to dowolny ciąg np. 1,2,3,1,2,3,1... To samo dotyczy tez grup potrzebnych do kodowania. Mogą być zawarte w przekazie lub nie. Mogą być cyklicznie zmieniane lub kilka liter mogą oznaczać to samo. Program w Lua jest dobrym miejscem na zmiany i eksperymentowanie.
