2009-07-15 17 views
11

Niedawno znalazłem tę bibliotekę JavaScript RSA: http://www.ohdave.com/rsa/. Wymaga to jednak wygenerowania klucza. Oto moje pytania/zagadnienia:Generowanie klucza RSA w kodzie JavaScript

  1. Chciałbym wygenerować parę kluczy RSA w JavaScript

  2. (tak, że nie mam do zmiany kodu za każdym razem chcę nową parę kluczy).
  3. Podczas gdy rozumiem, w jaki sposób można to wykorzystać do wysyłania bezpiecznych danych, jeśli się nie mylę, ta biblioteka nie może być używana do odbierania przez klienta bezpiecznych danych z serwera (ponieważ publiczne i prywatne wykładniki i moduł są transmitowane zwykły tekst z serwera). Czy się mylę?

Chciałbym trochę dyskusji na ten temat. Nie jestem ekspertem od zabezpieczeń, ale mam dość mocną znajomość szyfrowania asymetrycznego.

+0

Nie możesz po prostu wysłać danych za pomocą SSL? Jest bezpieczny, a co ważniejsze, jest przezroczysty, więc nie musisz wykonywać żadnego szyfrowania/odszyfrowywania na żadnej stronie. – RaYell

+2

Może mógłbym zrobić SSL. Ale co, jeśli używam hosta, który go nie obsługuje? Osobiście nie wiem, jak skonfigurować SSL - wszystkie rzeczy znalezione online nie są proste. Bez względu na to, SSL nie jest tak naprawdę związane z moim pytaniem. –

Odpowiedz

1

Generowanie keypair wymaga silnego generatora liczb losowych (nie sądzę, że masz go w JavaScript) i całkiem sporo obliczeń (dla testów pierwszorzędności). Wtedy, gdy masz już parę, kiedy przekazujesz swój klucz publiczny na drugą stronę, istnieje możliwość ataku man-in-the-middle, ponieważ nie ma kontroli integralności transmisji klucza publicznego.

Dostaniesz bezpieczną transmisję do każdego, kto ma klucz prywatny. Z twojego pytania nie wynika jednoznacznie, czy to klient, czy serwer. Możesz zainicjować wspólny sekret, jeśli ktokolwiek ma tylko klucz publiczny, wygeneruje wspólny klucz tajny, zaszyfruje go i wyśle ​​go każdemu, kto ma klucz publiczny.

Można uzyskać podobny zestaw funkcji (zależność od generatora liczb losowych, podatność na MITM, możliwość tworzenia wspólnego klucza tajnego do użycia jako klucz sesji), ale przy znacznie mniejszej liczbie obliczeń, zamiast wymiany klucza Diffiego-Hellmana.

Prawdopodobnie lepiej jest zastanowić się, jak skonfigurować SSL na serwerze.

+0

Wymiana kluczy Diffiego-Hellmana brzmi interesująco, przyjrzę się temu. Oto link znaleziony do implementacji javascript: http://enanocms.org/News:Article/2008/02/20/Diffie_Hellman_key_exchange_implemented W punkcie asymetrycznych par kluczy, silny generator liczb losowych może być dość łatwo przeniesiony z inny język. To samo dotyczy testowania pierwotności. Nie sądzę, że byłoby to całkowicie czasochłonne w javascriptie, szczególnie przy uruchomieniu prawego wątku tła (podczas gdy użytkownik wykorzystuje resztę strony). Czy znasz jakiś dobry kod generowania klucza RSA w stylu C, z którego mógłbym skorzystać? –

+0

Słyszałem, że książka Simsona Garfinkela na temat PGP ma całkiem dobre wytłumaczenie kodu, w tym testera pierwszości - używając różnych szybkich metod, a następnie wykonując kilka końcowych przebiegów z kodem opartym na Małym Twierdzeniu Fermata. Powinieneś być w stanie znaleźć go w starym źródle PGP lub dowolnej z wersji OpenPGP lub gpg. Ale myślę, że okaże się, że jest zbyt wolny w JavaScript. –

Powiązane problemy