Pytanie:
Jak duże jest ryzyko publicznego udostępniania części klucza prywatnego?
Jamie Bull
2017-12-12 16:53:01 UTC
view on stackexchange narkive permalink

Jeśli dwie osoby chcą sprawdzić, czy mają ten sam (powiedzmy 256-bitowy) klucz prywatny, jakie jest ryzyko w przypadku udostępnienia pierwszych, powiedzmy 8 znaków, na potencjalnie publicznym kanale?

Czy osoba atakująca może odzyskać więcej informacji niż tylko te znaki i / lub o ile szybciej osoba atakująca może złamać klucz, mając te 8 znaków?

Czy mówisz o kluczu prywatnym w kryptografii asymetrycznej, takim jak RSA, czy też mówisz o kluczach symetrycznych, takich jak AES (które, jak przypuszczam, oparte na użyciu 256 bitów jako przykładowego rozmiaru i mówieniu o udostępnianiu samego klucza)?Odpowiedź różni się znacznie w zależności od tego, o której z tych osób mówisz.
Wygląda na to, że ludzie udzielali błędnych odpowiedzi ze względu na popularność tego pytania.Są ludzie, którzy mówią o tym, że klucz 4096-bitowy ma przestrzeń klucza 2 ^ 4096, ludzie, którzy twierdzą, że uwzględnienie dużego RSA jest trudniejsze niż brutalne wymuszenie, i ludzie, którzy nawet nie rozumieją podstawowej struktury takiego klucza, myśląwszystko jest jednorodne.Jeśli chcesz uzyskać aktualne odpowiedzi, prawdopodobnie powinieneś przejść do Crypto.SE.
Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (http://chat.stackexchange.com/rooms/70261/discussion-on-question-by-jamie-bull-how-great-is-the-risk-in-publicly-udostępnianie-p).
Siedem odpowiedzi:
Stephane
2017-12-12 17:21:31 UTC
view on stackexchange narkive permalink

Udostępnienie dowolnej części klucza prywatnego sprawia, że ​​jest on mniej bezpieczny, przynajmniej w minimalnym stopniu, po prostu dlatego, że zapewnia atakującemu mniejszą potencjalną przestrzeń na klucz do zbadania.

Nie udaje mi się aby zrozumieć, co chcesz osiągnąć. Jedyną rzeczą, jaką dwie osoby muszą zrobić, aby sprawdzić, czy posiadają te same informacje, jest wymiana hasha.

Jeśli projektujesz protokół i obawiasz się ataków typu replay, możesz się przed nim chronić, wykonując odpowiedź na wezwanie za pomocą HMAC.

Edytuj :

Jak sugerowano w komentarzach i wyjaśniono w wnikliwej odpowiedzi DW, muszę podkreślić, że wpływ na bezpieczeństwo twojego klucza prywatnego będzie zależeć DUŻO od tego, jakiego dokładnie algorytmu używają. W najgorszym przypadku ujawnienie tylko niewielkiej części klucza prywatnego całkowicie naruszy bezpieczeństwo tego klucza.

Klucze prywatne nie zapewniają bezpieczeństwa, ponieważ mają dużą przestrzeń kluczy, zapewniają bezpieczeństwo poprzez trudność uwzględnienia dużych liczb półpierwszych.Wyciekająca część klucza prywatnego nie powoduje wycieku równoważnej ilości informacji.
Wszystkie informacje w kluczu prywatnym są * nie * równe, więc nie ma „równoważnego współczynnika”.Wyciek modułu lub wykładnika publicznego i nic się nie stało (w przeciwieństwie do udostępniania klucza publicznego).Wyciek "50%" liczb pierwszych i masz 100% kości.
Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (http://chat.stackexchange.com/rooms/70243/discussion-on-answer-by-stephane-how-great-is-the-risk-in-publicly-sharing-część).
D.W.
2017-12-13 08:44:41 UTC
view on stackexchange narkive permalink

Ujawnienie części klucza prywatnego może być katastrofalne w przypadku niektórych asymetrycznych (klucza publicznego) kryptosystemów. Dokładny poziom ryzyka zależy od tego, jakiego dokładnie kryptosystemu używasz. Kilka przykładów:

  • Jeśli używasz RSA z e = 3 dla klucza publicznego, to ujawnienie 1/4 klucza prywatnego (niskie 1/4 bitu d) jest wystarczy, aby osoba atakująca zrekonstruowała cały klucz prywatny. Na przykład, jeśli używasz 2048-bitowego RSA i ujawnisz 512 najmniej znaczących bitów klucza prywatnego, osoba atakująca może odzyskać resztę twojego klucza prywatnego. Ten wynik jest wynikiem Boneh, Durfee i Frankel. Istnieją inne podobne wyniki w literaturze (np. Dotyczące najbardziej znaczących bitów, losowego podzbioru bitów itp.).

  • W przypadku DSA, jeśli kilka bitów jest wyciekły z nonce używanego w każdym podpisie (dla różnych podpisów), to wystarczy, aby odzyskać klucz prywatny. Na przykład, jeśli możesz zaobserwować 5 bitów tajnego numeru jednorazowego, który został użyty w każdym z 4000 sygnatur, wystarczy to do odzyskania 384-bitowego klucza prywatnego ECDSA. Nie jest to dokładnie ujawnienie klucza prywatnego (to ujawnienie innej tajnej wartości wygenerowanej podczas podpisywania), ale jest podobnie.

Zdaję sobie sprawę, że inne odpowiedzi mówią, że to żaden problem. Te odpowiedzi mogą zakładać, że używasz kryptosystemu z kluczem symetrycznym. W przypadku większości systemów kryptograficznych z kluczem symetrycznym, jeśli ujawnisz część klucza, ale jego wystarczająca część pozostanie nieujawniona, prawdopodobnie nadal będą bezpieczne. Jeśli chodzi o asymetryczne kryptosystemy, jest inaczej. Inne odpowiedzi wydają się zakładać, że brutalna siła (wyczerpujące wypróbowanie wszystkich możliwych kluczy prywatnych) jest najlepszym możliwym atakiem na kryptosystem. W przypadku wielu asymetrycznych kryptosystemów to założenie nie jest dokładne.

+1 za wyjaśnienie, co jest tak nie tak w innych odpowiedziach (ponownie zakładając symetryczny szyfr).W zależności od typu systemu, o który pyta OP, cały ten wątek jest albo niebezpiecznie niepoprawny, albo raczej przyzwoity.
zakinster
2017-12-12 19:47:49 UTC
view on stackexchange narkive permalink

O ile szybciej osoba atakująca może złamać klucz przy tych 8 znakach?

Trudno odpowiedzieć, nie wiedząc, o jakim kluczu mówimy i jakiego algorytmu używa z.

W przypadku szyfrowania symetrycznego, w którym klucz jest całkowicie losowy (zrozum, że każdy bit ma równy udział w globalnej niepewności klucza), zależy to głównie od tego, co "1 znak" reprezentuje w kategoriach danych binarnych. Ogólnie rzecz biorąc, ujawniając n bitów , skutecznie redukujesz liczbę możliwych kluczy o współczynnik co najmniej 2 ^ n .

  • W przypadku binarnej reprezentacji tekstowej, w której 1 znak = (0 lub 1) = 1 bit : 8 znaków oznacza współczynnik redukcji 2 ^ 8 = 256 .
  • W przypadku reprezentacji szesnastkowej, gdzie 1 znak = 4 bity : 8 znaków oznacza współczynnik redukcji 2 ^ 32 = 4294967296 .
  • W przypadku reprezentacji base64, gdzie 1 znak = 6 bitów : 8 znaków oznacza współczynnik redukcji 2 ^ 48 = 281474976710656 .

Które - w zależności od ilości ujawnionych informacji - mogą (lub nie) być wykorzystane jako dźwignia do złamania klucza w zależności od możliwych (obecnych lub przyszłych) słabości twojego algorytm szyfrowania.

Należy również zauważyć, że w przypadku szyfrowania asymetrycznego, w którym klucz nie jest całkowicie losowy (np. moduł czynnika pierwszego i wykładnik w RSA), ujawnienie n bitów może faktycznie ujawnić dużo bardziej użytecznych informacji i może prowadzić do katastrofalnej utraty bezpieczeństwa.

Ale prawdziwe pytanie brzmi:

Dlaczego ktokolwiek miałby kiedykolwiek to robić?

Nie tylko ta metoda stwarza potencjalne bezpieczeństwo wada, wydaje się, że niezawodność nie pasuje do twojego celu, a co z pozostałymi 248 bitami?

Metoda, którą opisujesz, to po prostu bardzo trywialna funkcja skrótu, która jest całkowicie ciągła (bardzo zła dla sprawdzania integralności) i częściowo odwracalna (bardzo zła ze względów bezpieczeństwa).

Jeśli naprawdę musisz to zrobić, użyj bezpiecznej i powszechnie dostępnej kryptograficznej funkcji skrótu, takiej jak SHA-256 , która wygeneruje znacznie bardziej bezpieczny skrót (praktycznie nieodwracalne i wymagające dużej mocy obliczeniowej) i znacznie bardziej odporne na kolizje niż „pierwsze 8 znaków”.

Jeśli używasz szyfrowania asymetrycznego, nigdy nie powinieneś potrzebować aby udostępnić jakąkolwiek część (nawet skrót) klucza prywatnego, użyj zamiast tego klucza publicznego .

Damon
2017-12-12 21:32:01 UTC
view on stackexchange narkive permalink

Powiedziałbym, że waha się od „nie krytyczne, ale trochę głupie” do „katastrofalne”, w zależności od tego, co oznacza „8 znaków” i w zależności od używanych algorytmów.

Jeśli ktoś czyta „ 8 znaków "tak, jak to jest dosłownie, 64 bity, następnie zmniejszasz rozmiar klucza o 64 bity (jest nieco mniej drastyczny, jeśli przyjmie się" char "jako znak zakodowany w base-64, wtedy będzie to tylko 48 bitów).

Zakładając, że „klucz prywatny” w rzeczywistości odnosi się do algorytmu symetrycznego (mało prawdopodobne?), jest to prawdopodobnie tolerowane, ponieważ 192 bity są daleko poza możliwościami brutalnej siły. Ale z drugiej strony, po co w ogóle używać 256-bitowego klucza?

Przy założeniu, że „klucz prywatny, 256 bitów” oznacza, że ​​używasz pewnego rodzaju kryptografii krzywej eliptycznej (w przypadku szyfrów symetrycznych określenie „prywatny” niewiele sens, ponieważ wszystkie klucze są prywatne, a dla RSA i innych. 256 bitów jest zdecydowanie za małe, aby były użyteczne), obniżasz poziom bezpieczeństwa z nieco poniżej 128 bitów (co jest obecnie niewykonalne) do nieco mniej niż 96 bitów. Co jest ... no cóż, nie do końca możliwe, ale prawie. Biorąc pod uwagę, że obliczenia kwantowe jeszcze nie istnieją, ale są w drodze, „nie całkiem, ale prawie” jest troche katastrofalne.
W końcu to, co się planuje, to najgorszy przypadek, a nie najlepszy przypadek .

Jest to katastrofalne tym bardziej, że robienie tego jest absolutnie, w 100% niepotrzebne.

Jeśli dwie strony mają wspólny tajny klucz, jedna bardzo oczywista metoda upewnienia się, że jest to ten sam klucz polegałoby na zaszyfrowaniu wystarczająco długiego (dłuższego niż wyjście hash) losowego wzorca bitowego, pozwoleniu drugiej stronie odszyfrować wzorzec bitowy i odesłaniu bezpiecznego skrótu (powiedzmy SHA-256, SHA3, cokolwiek) wzorca bitowego.
Które pierwsza partia może trywialnie porównać z wynikiem obliczenia skrótu na oryginalnym losowym wzorze.

W żadnym momencie nie jest przesyłany klucz prywatny (ani jego część), ani nawet skrót tego klucza (co może być bardzo mało prawdopodobne, ale możliwe, że zostanie odwrócone lub stanowić wskazówkę co do jego części), a ponieważ tam mają więcej losowych bitów wejściowych niż wyjściowych, niemożliwe jest określenie oryginalnego wzorca bitowego, który został zaszyfrowany z wartości skrótu i ​​użycie go do uzyskania kąta w szyfrowaniu.

Atakujący widzi tylko losowy wzorzec bitowy, dla którego musi znać (nieznany) klucz, aby uzyskać oryginał, oraz skrót innego nieznanego wzorca bitowego, który może być jednym z wielu wzorców bitowych (bez możliwości ustalenia, który).

Sprytny dowód wiedzy zerowej!
entrop-x
2017-12-12 20:34:16 UTC
view on stackexchange narkive permalink

Inni już odpowiedzieli, ile informacji wyciekło, a co za tym idzie, o ile entropia jest obniżona dla atakującego; a główny punkt, który należy porównać (publicznie) został również odnotowany.

Jednak zakłada się, że dwie osoby, które chcą porównać klucze, ufają sobie. Jeśli nie ufają sobie nawzajem, problem polega na tym, że jeśli A wysyła hash (K) do B, B może wiedzieć, że A ma takie samo lub inne K niż B, ale może oszukiwać i odesłać ten sam hash, błędne myślenie A, że B jest również w posiadaniu tego samego klucza.

Rozwiązaniem tego problemu jest to, że A wysyła hash (K) do B i oczekuje, że B wyśle ​​hash (nie K) do A , gdzie nie K jest odwróconą bitowo wartością K. B może wysłać ten hash do A tylko wtedy, gdy naprawdę posiada K.

Chociaż jest to zgrabne i sprytne rozwiązanie problemu, nie sądzę, aby odpowiadało to na pytanie zawarte w tytule.
@Anders: Zależy to od tego, co zrozumie się w pierwotnym pytaniu przez „sprawdź, czy mają ten sam klucz” i czy jest to po prostu sprawdzenie przez wzajemnie ufające strony niezabezpieczone łącze, czy też kontrahentowi nie należy ufać.
AMADANON Inc.
2017-12-13 07:24:33 UTC
view on stackexchange narkive permalink

UWAGA Poniższe zakłada liniowe przyspieszenie (takie, jakie można uzyskać w ataku brutalnej siły) - przyspieszenie może być DOSKONAŁE WIĘCEJ, w zależności od algorytmu.

Bardzo trudno zrozumieć duże liczby - nawet ja byłem zaskoczony, gdy nadeszła odpowiedź. Oto sposób myślenia o tym:

Jeśli bez żadnych informacji złamanie klucza zajęłoby 13,8 miliarda lat (dotychczasowy wiek Wszechświata), przy pomocy 8 znaków binarnych, zajęłoby to tylko 0,023 sekundy.

To jest: 13,8 miliarda lat / 2 (bits_per_symbol * number_of_symbols) .

Ty powiedział, że liczba symboli to „8 znaków”, a ja zakładam binarny, który ma 8 bitów na symbol. więc: 13,8 miliarda lat / 2 (8 * 8)

Jeśli są zakodowane uuencod lub base64, będą miały 6 bitów na symbol, więc zajęłoby im to 25 minut na przepracowanie pozostałych kombinacji.

Te proporcje dotyczą tylko liczby ujawnionych bitów i są niezależne od długości klucza (tylko że złamanie klucza zajęłoby 13,8 miliarda lat ).

Cały sens kryptografii klucza publicznego polega na tym, że NIGDY NIGDY nie musisz udostępniać klucza prywatnego. Każdy klucz prywatny powinien istnieć tylko w jednym miejscu i nigdy nie przechodzić przez sieć. Wysyłanie kluczy jest sprzeczne z samą zasadą kryptografii klucza publicznego. NIGDY nie ma potrzeby wysyłania kluczy prywatnych, częściowo lub w inny sposób.

Jeśli chcesz, aby dwa (lub więcej) różne urządzenia mogły zdekodować tę samą wiadomość, poproś każde z nich o utworzenie własnego klucza prywatnego, wyślij klucz publiczny (bezpiecznie !!), a następnie zaszyfruj wiadomość oboma kluczami. Zwykle w przypadku PKC długie wiadomości są szyfrowane przy użyciu szyfrowania symetrycznego z losowym kluczem, a następnie klucz jest szyfrowany za pomocą PKC i wysyłany wraz z wiadomością; możesz łatwo zaszyfrować losowy klucz wieloma kluczami publicznymi i wysłać je wszystkie z tą samą wiadomością.

Jeśli chcesz tylko pokazać, że masz klucz prywatny, możesz wykonać następujące czynności:

Poproś osobę, której chcesz to udowodnić, o podanie losowej wartości („nonce”) . Dodaj własną wartość losową, zaszyfruj ją i podpisz skrót. Odeślij swoją losową wartość i podpis z powrotem.

Twój odpowiednik weźmie następnie wysłaną przez siebie wartość jednorazową oraz losową wartość, zaszyfruje ją i sprawdzi podpis z Twoim kluczem publicznym.

Dołączenie losowej wartości od nadawcy dowodzi, że nie wybrałeś tylko wartości, która została wcześniej podpisana przez prawdziwego właściciela.

W ŻADNYCH OKOLICZNOŚCIACH NIE WOLNO przyjmować czegoś wysłanego przez kogoś innego i podpisanie bez żadnych zmian. Mogą wysłać Ci odcisk palca pisanego przez siebie dokumentu, a Ty skutecznie go podpiszesz.

W przypadku kryptografii klucza publicznego każdy bit w kluczu nie jest równoważny i nie można użyć prostych argumentów dotyczących przestrzeni klucza, aby obliczyć, jak bardzo byłby osłabiony.W przypadku klucza symetrycznego byłby to ważny argument, ale założenie, że 256-bitową przestrzeń kluczową można przeszukiwać za 13,8 miliarda lat, jest błędne.8 znaków to 64 bity.Klucz 256-bitowy zredukowany o 64 bity nadal ma przestrzeń kluczową 2 ^ 192, której absolutnie _nie_ można przeszukiwać w 0,023 sekundy.** Aby ta odpowiedź była poprawna, nawet w zakresie rzędu wielkości, musiałbyś odgadnąć cztery lub miliardy kluczy na sekundę. **
Nigdy nie powiedziałem, że można to obliczyć przy takiej prędkości.Chodziło mi o proporcję redukcji.istotom ludzkim trudno jest porównać 2 ^ 256 z 2 ^ 192, a nawet „zajmuje to 1 / (2 ^ 64) razy dłużej”, podczas gdy ludzie mają pewne pojęcie, że wiek Wszechświata -> 23 ms, jest całkiemduża redukcja.Bez odniesienia do konkretnego algorytmu nie można nic powiedzieć o tym, jak długo trwa złamanie klucza.
Wtedy wydaje się, że jest to wyjaśnienie, jak duże liczby są trudne do zrozumienia, a nie odpowiedź na pytanie.Czy opisujesz kryptografię asymetryczną (którą sobie wyobrażam, ponieważ wspominasz o parach kluczy publicznych / prywatnych)?Jeśli tak, to przyspieszenie również nie będzie liniowe, jak wskazują inne komentarze i odpowiedzi.
Myślę, że podanie zrozumiałego porównania jest bardzo istotne w tej rozmowie.Moja odpowiedź (w większości) jest niezależna od asymetrii lub symetrii, ale zakłada liniowe przyspieszenie (np. Brutalna siła).To założenie może nie być poprawne.Czy jest coś nieodłącznego w kryptografii asymetrycznej, co koniecznie powstrzymuje ją przed liniowością?Rozumiem, że niektóre (np. Najczęściej używane RSA, EC) mają lepsze ataki, czy to oznacza, że wszyscy (muszą) robić?
O ile mi wiadomo, wszystkie kryptosystemy klucza publicznego opierają się na „problemach z twardością”, takich jak problem z logiem dyskretnym, uwzględnianie ogromnych liczb półpierwszych, problem z najkrótszymi wektorami, itp. To z konieczności oznacza, że nie są one łamane brutalną siłą, ale przy użyciunajlepszy dostępny algorytm rozwiązania problemu (np. GNFS dla faktoryzacji liczb całkowitych).Z drugiej strony kryptowaluta symetryczna wykorzystuje zupełnie inne techniki.Zamiast używać problemów z twardością, wprowadzają „zamieszanie i dyfuzję” z takimi rzeczami, jak sieci feistel, sieci substytucji-permutacji, add-rotate-xor itp.
emory
2017-12-14 20:16:12 UTC
view on stackexchange narkive permalink

Jeśli Alicja i Bob podejrzewają, że mają ten sam klucz prywatny, to dlaczego nie:

  1. Alicja generuje jednorazowy X.
  2. Alicja szyfruje X dla siebie - Y.
  3. Alicja wysyła X, Y do Boba.
  4. Jeśli Alicja i Bob naprawdę mają ten sam klucz prywatny, to kiedy Bob odszyfruje Y, otrzyma X. Teraz Bob wie, że Alicja udostępnia jego klucz prywatny.
  5. Bob robi to samo w odwrotnej kolejności. Teraz Alicja wie, że Bob udostępnia swój klucz prywatny.

Nie jestem ekspertem w dziedzinie kryptografii. Czy coś mi brakuje?

Myślę, że powyższe odpowiedzi zaspokoją ich pytanie bez ujawniania ich tajemnic. Ewa też nie będzie znała odpowiedzi na to pytanie.

To jest dobra odpowiedź.Właśnie miałem napisać to samo!Dodałbym tylko, że 2 osoby (/ serwery / itp.) Nie powinny mieć tych samych kluczy prywatnych!
@OlivierDulac masz rację, że nie jest to problem
W pytaniu nie powiedziano, czy klucz prywatny jest kluczem prywatnym w kryptografii asymetrycznej.Jeśli jest to symetryczny klucz prywatny, ma to sens.A jeśli jest to część asymetrycznej pary kluczy, nie ma sensu: porównujesz klucze publiczne!Moglibyśmy mówić o „sprawdzaniu tego samego hasła”.
Jeśli dwie osoby mają ten sam klucz prywatny (przy użyciu tego samego algorytmu, np. RSA), MUSZĄ mieć ten sam klucz publiczny.Alicja może więc wyszukać swój klucz publiczny w katalogu kluczy publicznych, takim jak https://keyserver.pgp.com.To pozwala jej sprawdzić miliony kluczy za jednym razem.
@AMADANONInc.Nie wierzę, że jest to ściśle prawdą.Czy możesz to udowodnić?
@emory Nie mogę.Klucz publiczny to (P * Q), gdzie P i Q są liczbą pierwszą, więc czynniki pierwsze klucza publicznego muszą być (P, Q) lub (Q, P).Klucz prywatny pochodzi z wartości „e” i ((P-1) * (K-1)), więc kolejność P i Q nie ma znaczenia.Wartość e jest albo zapisywana w protokole (ta sama wartość dla wszystkich kluczy, np. 3 lub 65537), albo jest częścią klucza publicznego.Klucz prywatny może mieć dowolną wartość d, gdzie (d * e-1) / ((p-1) * (q-1)) jest liczbą całkowitą.Nie wiem, czy jest na to wiele odpowiedzi.Jeśli jednak istnieje wiele odpowiedzi, wszystkie są równoważnymi kluczami prywatnymi dla klucza publicznego.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...