2012-09-11 15 views
9

Czy jest jakaś implementacja szyfrowania w javascript, w tym wiarygodna zaprzeczalność?JavaScript implementacja szyfrowania, w tym wiarygodne zaprzeczenie

chcę coś wykazującą cechy opisane tutaj: http://en.wikipedia.org/wiki/Deniable_encryption

zakwestionowania szyfrowania pozwala nadawca zaszyfrowanej wiadomości zaprzeczyć wysyłania tej wiadomości. Wymaga to zaufanej strony trzeciej. Możliwy scenariusz wygląda następująco:

  1. Alicja jest żoną Boba, który podejrzewa, że ​​jego żona dopuszcza się cudzołóstwa. Chce komunikować się ze swoim tajemniczym kochankiem Carlem. Tworzy dwa klucze, jeden przeznaczony do zachowania w tajemnicy, drugi przeznaczony do złożenia w ofierze. Podaje sekretny klucz (lub oba) do Carla.
  2. Alice konstruuje niewinną wiadomość M1 dla Carla (ma zostać ujawniona Bobowi w przypadku odkrycia) i obciążający list miłosny M2 dla Carla. Konstruuje tekst C z obu komunikatów M1, M2 i wysyła go e-mailem do Carla.
  3. Carl używa klucza do odszyfrowania M2 (i prawdopodobnie M1, aby przeczytać fałszywą wiadomość).
  4. Bob dowiaduje się o wiadomości e-mail do Carla, staje się podejrzliwy i zmusza Alice do odszyfrowania wiadomości.
  5. Alicja używa klucza ofiarnego i odsłania niewinną wiadomość M1 do Boba. Ponieważ Bob nie zna drugiego klucza, musi przyjąć, że nie ma innej wiadomości M2.
+0

Prawdopodobnie należy do: http://programmers.stackexchange.com/ –

+0

@Diodeus, [a może nie] (http://meta.programmers.stackexchange.com/questions/1624/are-im-looking- for-x-questions-on-topic). –

+0

Jaka jest dokładnie Twoja walizka? – Philipp

Odpowiedz

-1

Interesujące pytanie. Istnieją biblioteki kryptograficzne JavaScript, które są tam here i here, ale Twój przypadek użycia nie wymaga implementacji tego w JavaScript, i prawdopodobnie lepiej byłoby użyć innego języka.

Dlaczego? Denieble encryption jest formą zabezpieczenia, które z definicji wymaga ochrony z powodu niejasności, więc implementacja go przy użyciu języka skryptowego prawdopodobnie nie jest najlepszym sposobem na obejście tego problemu (każdy i każdy może zobaczyć szczegóły dotyczące implementacji). Napisz go w mocnym, potężnym obliczeniowo języku i zablokuj go gdzieś na serwerze.

+3

Zakazane szyfrowanie nie powinno wymagać ukrytego algorytmu, ponieważ zarówno dane, jak i algorytm, atakujący powinien nadal nie wiedzieć, czy ukryta jest tam druga/trzecia/czwarta super tajna wiadomość. –

+0

Nie mam na myśli niejasnego algorytmu, mam na myśli niejasną architekturę. –

0

Istnieje wiele bibliotek JavaScript, które zapewniają prymitywy kryptograficzne, ale nigdy nie słyszałem o żadnej z nich, która zawiera wiarygodne deniability.

Możliwe jest zaimplementowanie schematu szyfrowania podobnego do używanego przez TrueCrypt. Jest ograniczony do 2 zestawów zaszyfrowanych danych: danych wabika i naprawdę tajnych danych. Ale jego konstrukcja jest dość prosta, więc jeśli nie potrzebujesz więcej niż dwóch zestawów danych - idź do niego. Można go zmodyfikować, aby umożliwić więcej niż 2 zestawy, ale nie może być "dynamiczny".

Wyjaśniono to szczegółowo na stronie TrueCrypt documentation page, ale podstawową zasadą jest to, że zaszyfrowane dane zawierają nagłówki o stałej szerokości dla każdego zestawu danych. Nagłówek zawiera informacje o swoim zbiorze danych. W najbardziej podstawowym scenariuszu byłoby to tylko przesunięciem początku zestawu danych w całym zaszyfrowanym bloku, długości tego zestawu danych i pewnej wartości kanarka używanej do sprawdzenia, czy nagłówek został pomyślnie odszyfrowany. Gdy użytkownik podaje hasło, system próbuje odszyfrować pierwszy nagłówek, jeśli się nie powiedzie, spróbuje z następnym nagłówkiem, aż mu się uda lub nie ma już nagłówków. Jeśli się powiedzie, odszyfruje bajty określone w nagłówku.

Schemat ten został zaprojektowany do szyfrowania systemu plików, więc miałby dużą wadę, gdy jest używany w systemie - gdy przeciwnik zmusza do ujawnienia klucza do danych wabika, zapyta, dlaczego jego rozmiar jest mniejszy niż rozmiar cały zaszyfrowany blok.

Powiązane problemy