next up previous contents
Next: Testy Up: Implementacja Previous: Stopki   Spis treści

Mechanizm wymiany kluczy prywatnych

Implementowany protokół przewiduje możliwość wymiany kluczy pomiędzy miksami w celu zwiększenia efektywności rozwiązania. Faktycznie klucz jest dzielony pomiędzy klientem sieci miksów (mixclient) a jednym z serwerów pośredniczących (mixcore). Klient jest rozpoznawany po swoim jednorazowym identyfikatorze, który jest doklejany jawnym tekstem do nagłówków zaszyfrowanych odpowiadającym mu kluczem. Aby klucz mógł być wykorzystywany wielokrotnie, po każdorazowym użyciu identyfikator szyfrowany jest związanym z nim kluczem odpowiednio przez klienta i miks. Takie rozwiązanie prowadzi do problemów w przypadku, gdy klient wykorzystał pewien identyfikator, ale nie otrzymał odpowiedzi. Nie wie w związku z tym, czy dany miks na ścieżce użył tego identyfikatora i zastąpił nowym, czy nie.

W implementacji zastosowano następujące rozwiązanie tego problemu. Klient generując wiadomość do miksu zawsze używa nowego identyfikatora. Miks natomiast przechowuje nie tylko aktualny identyfikator $I$, ale również jego kolejne generacje: $K(I)$, $K(K(I)) = K^2(I)$, $K^3(I)$... Liczba jednocześnie przechowywanych identyfikatorów $n$ jest ustalona z góry. Miks akceptuje komunikat oznaczony dowolnym z tych identyfikatorów. Po jego użyciu jest on usuwany z listy i zastępowany kolejną generacją. Dodatkowo zapewniony jest warunek, że na liście znajduje się co najmniej $m$ ($m < n$) identyfikatorów nowszych od ostatnio użytego. Ten wymóg powoduje, że usuwane są czasami najstarsze klucze, aby nie przekroczyć w ten sposób maksymalnej liczby kluczy $n$. W implementacji zostały przyjęte wartości $n = 10$ oraz $m = 5$.

Przyjęcie takiego algorytmu powoduje konieczność użycia zaawansowanej struktury danych do przechowywania identyfikatorów i kluczy. Wszystkie identyfikatory umieszczone są w słowniku z wartością identyfikatora jako kluczem słownika. Implementacją słownika jest tablica haszująca. Dzięki temu można szybko na podstawie identyfikatora uzyskać klucz. Identyfikatory odpowiadające temu samemu kluczowi powiązane są dodatkowo w listy, co pozwala na generowanie nowych i usuwanie starych identyfikatorów dla tego klucza.

Rysunek 5.3: Struktura danych używana do przechowywania kluczy tajnych i identyfikatorów
\includegraphics[width=15cm]{diag/IDDataStructure}

next up previous contents
Next: Testy Up: Implementacja Previous: Stopki   Spis treści
Michal Szafranski 2003-11-13