Zadanie:
Skrócony opis problemu:
Problem przedstawia szyfrowanie z kluczem publicznym.
Na początek bierzemy pewien ciąg (superrosnący) ak, którego każdy wyraz jest większy od sumy wyrazów poprzednich. Następnie ustalamy dwie względnie pierwsze liczby n i m, takie, że n jest względnie pierwsze ze wszystkimi elementami ciągu ak oraz m jest większe od sumy wszystkich wyrazów ciągu ak. Każdy wyraz ciągu szyfrujemy według zasady:
bi = ai \cdot n mod m, dla 1 \leq i \leq k
W ten sposób otrzymaliśmy ciąg bk.
Oraz cztery elementy szyfrogramu: {10, 22, 31, 5}.
Obliczamy element odwrotny: n-1 = 10.
Wyznaczamy kolejne liczby Wi , gdzie 1 \leq i \leq 4
W1 = 10 \cdot 10 mod 23 = 8
W2 = 10 \cdot 22 mod 23 = 13
W3 = 10 \cdot 31 mod 23 = 11
W4 = 10 \cdot 5 mod 23 = 4
Teraz tworzymy szukane segmenty:
Wiadomość, którą chcemy zaszyfrować dzielimy na segmenty binarne o długości k a następnie szyfrujemy w taki sposób, że sumujemy tylko te elementy ciągu bk., które odpowiadają wartości 1 w segmencie binarnym.
Np. jeśli ciąg bk. ma postać: {1, 3, 5, 10}, dla n = 4, a wiadomość ma trzy segmenty o długości 4:
1100 0110 1111
to szyfrogram będzie wyglądał następująco:
I segment: 1 + 3 = 4
II segment: 3 + 5 = 8
III segment: 1 + 3 + 5 + 10 = 19.
Ciąg {4, 8, 19} jest szyfrogramem.
Na podstawie danych: n, m, k, ciągu ak oraz szyfrogramu należy podać oryginalną wiadomość w postaci binarnej.
Rozwiązanie:
W celu odszyfrowania wiadomości odbiorca musi określić element odwrotny dla n modulo m. Ponieważ n i m są względnie pierwsze, taki element istnieje. Wykorzystujemy w tym celu rozszerzony algorytm Euklidesa. Następnie każdą liczbę szyfrogramu mnożymy przez n-1 mod m. W ten sposób otrzymujemy wartości wiadomości w postaci liczby. Nazwijmy ją W.
Teraz wykorzystując ciąg ak określamy bity szukanej wiadomości według schematu:
Sprawdzamy, czy największy wyraz (ostatni) ciągu jest nie większy niż liczba W. Jeśli tak, to ostatni bit k-elementowego segmentu będzie równy 1 i liczbę W zmniejszamy o wartość tego ciągu wyrazu, w przeciwnym wypadku 0.
Przykład:
Niech ak ma postać: {1, 3, 5, 10}, n = 7, m = 23, k = 4,Oraz cztery elementy szyfrogramu: {10, 22, 31, 5}.
Obliczamy element odwrotny: n-1 = 10.
Wyznaczamy kolejne liczby Wi , gdzie 1 \leq i \leq 4
W1 = 10 \cdot 10 mod 23 = 8
W2 = 10 \cdot 22 mod 23 = 13
W3 = 10 \cdot 31 mod 23 = 11
W4 = 10 \cdot 5 mod 23 = 4
Teraz tworzymy szukane segmenty:
{1, 3, 5, 10}: 8 = 0\cdot1 + 1\cdot3 + 1\cdot5 + 0\cdot10 = 0110
{1, 3, 5, 10}: 13 = 0\cdot1 + 1\cdot3 + 0\cdot5 + 1\cdot10 = 0101
{1, 3, 5, 10}: 11 = 1\cdot1 + 0\cdot3 + 0\cdot5 + 1\cdot10 = 1001
{1, 3, 5, 10}: 4 = 1\cdot1 + 1\cdot3 + 0\cdot5 + 0\cdot10 = 1100
Wyjście: 0110010110011100
Omawiany problem należy do grupy algorytmów plecakowych wykorzystywanych w kryptografii.
Brak komentarzy:
Prześlij komentarz