2010-04-17 14 views
5

Pracuję nad aplikacją, która umożliwia wtyczkom dostęp do różnych zestawów funkcjonalności, każda wtyczka udostępnia "ciąg inicjujący", który ustawia poziom dostępu do różnych funkcji. Programiści wysyłają mi te ciągi i zaszyfrowuję je przy użyciu 1024-bitowego klucza prywatnego RSA i wysyłam zakodowane dane z powrotem. Po uruchomieniu moja aplikacja dekoduje zakodowane dane (zakodowany ciąg inicjalizacyjny) za pomocą wbudowanego klucza publicznego i jeśli "dekodowane dane! = Ciąg inicjujący", to się nie uruchamia.Czy można uzyskać klucz prywatny RSA znający klucz publiczny i zestaw wpisów "oryginalne dane => zaszyfrowane dane"?

Czy możliwe jest użycie bazy danych "ciąg inicjalizacyjny" => "zakodowany ciąg inicjujący" (wyodrębniony z innych wtyczek) do złamania mojego klucza prywatnego lub umożliwienia jego brutalnego doręczenia w rozsądnym czasie?

Odpowiedz

5

Kiedy mówisz, że "szyfrujesz kluczem prywatnym RSA", to tak naprawdę nie szyfrujesz rzeczy. To historyczne zamieszanie. Co robisz to podpis cyfrowy podpis cyfrowy, który wtyczka weryfikuje za pomocą odpowiedniego klucza publicznego. Zamieszanie wynika z faktu, że w odpowiednim świetle, podpisy RSA mogą być postrzegane jako rodzaj "odwrotnego szyfrowania" z kluczem prywatnym działającym jako pierwszy. Różni się jednak niektórymi detalami (np. Dopełnieniem i włączeniem funkcji skrótu), które powodują, że jest zupełnie inny, jeśli chodzi o implementację.

Jeśli używasz właściwego RSA schematu podpisu cyfrowego (np jeden z opisanych w PKCS#1 sekcja 8 „schematy podpisu z dodatkiem”), z odpowiednio dużym kluczem RSA (1024 bitów lub więcej) generowane poprzez poprawnie zaimplementowany algorytm generowania kluczy, , następnie, nie jest znany, możliwy do obliczenia sposób, w jaki atakujący może wykorzystać podpisy, które wyprodukowaliście w celu sfałszowania nowych podpisów (i, a fortiori, złamania prywatnego klucza RSA). W żaden sposób nie udowodniono, że twoje podpisy nie pomagają napastnikowi, ale 30 lat publicznych badań na ten temat nie doprowadziło do takiego naruszenia.

Należy jednak zauważyć, że szczegóły użytkowania, w szczególności dopełnienie (początkowa część, która przekształca dane, które mają zostać podpisane w dużą liczbę, którą może przetwarzać matematyczny rdzeń RSA), okazały się delikatne; wiele proponowanych sposobów wypełniania zostało skutecznie zaatakowanych. Poduszki PKCS # 1 były pod obserwacją od dłuższego czasu (dwie dekady w przypadku "v1.5") i opierały się dotychczasowym próbom. Rodzina paddings "ISO 9796" nie radziła sobie tak dobrze, wiele wariantów zostało złamanych.

Jeśli jesteś , nie, obliczając swoje podpisy zgodnie z ustalonym standardem (tj. PKCS # 1), wtedy szukasz kłopotów. Nie rób tego. Na szczęście większość implementacji RSA (w bibliotekach kryptograficznych i językach/środowiskach programowania) stosuje się do PKCS # 1.

+0

Thaks za niesamowitą odpowiedź – Riz

2

Cały punkt technologii klucza publicznego/prywatnego z RSA polega na tym, że trudno jest odwrócić bardzo.

Znane są pęknięcia, które wykorzystują pewne szczególne niedociągnięcia w implementacji, ale uważa się, że podstawowy algorytm zajmuje dziesięciolecia, aby poddać się brutalnemu atakowi siłowemu. Zobacz this.

+0

Dlaczego zostało to odrzucone? Sheesh, twardy tłum. – egrunin

+0

Tak! Dlaczego została odrzucona? – wallyk

5

Ten rodzaj ataku kryptoanalitycznego nazywa się known plaintext attack i powinno być naprawdę trudne do zastosowania na RSA1024.

Albo przynajmniej próba złamania klucza RSA przy użyciu znanych tekstów jawnych będzie tak trudna, jak próba zrobienia tego bez nich, jedynym znanym rodzajem ataku związanego z twoim problemem jest atak w czasie, ale musi on dobrze wiedzieć konkretne wdrożenie twojego RSA, ponieważ działa przez pomiar czasu potrzebnego do odszyfrowania.

Faktem jest, że bezpieczeństwo RSA wynika z dwóch złożonych problemów matematycznych, a znajomość zwykłego tekstu i związanego z nim tekstu szyfrowania nie daje wiele pomocy.

W każdym przypadku jawnegoznane ataki zwykle potrzebuje dużo próbek przeprowadzane (jak miliony lub miliardy DES), więc to nie jest tak łatwe także dla słabszych algorytmów.

Powiązane problemy