Wśród algorytmów ECC dostępnych w openSSH (ECDH, ECDSA, Ed25519, Curve25519), które oferują najwyższy poziom bezpieczeństwa i (najlepiej) dlaczego?
Wśród algorytmów ECC dostępnych w openSSH (ECDH, ECDSA, Ed25519, Curve25519), które oferują najwyższy poziom bezpieczeństwa i (najlepiej) dlaczego?
W SSH używane są dwa algorytmy: algorytm wymiany kluczy (Diffie-Hellman lub wariant krzywej eliptycznej zwany ECDH) i algorytm podpisu. Wymiana kluczy daje tajny klucz, który będzie używany do szyfrowania danych w tej sesji. Podpis jest taki, że klient może upewnić się, że rozmawia z właściwym serwerem (inny podpis, obliczony przez klienta, może być użyty, jeśli serwer wymusza uwierzytelnianie klienta oparte na kluczach).
ECDH używa krzywa ; większość programów korzysta ze standardowej krzywej NIST P-256. Curve25519 to kolejna krzywa, której „skok sprzedaży” polega na tym, że jest szybszy, a nie silniejszy niż P-256. Różnica w wydajności jest bardzo mała w kategoriach ludzkich: mówimy o mniej niż milisekundach obliczeń na małym komputerze i dzieje się to tylko raz na sesję SSH. Nie zauważysz tego. O żadnej krzywej nie można powiedzieć, że jest „silniejsza” od drugiej, ani praktycznie (obie są dość daleko w sferze „nie mogą tego złamać”) ani naukowo (obie mają „128-bitowy poziom bezpieczeństwa”).
Nawet jeśli do wymiany kluczy jest używane ECDH, większość serwerów i klientów SSH będzie używać kluczy DSA lub RSA do podpisów. Jeśli potrzebujesz algorytmu podpisu opartego na krzywych eliptycznych, to jest to ECDSA lub Ed25519; z powodów technicznych, ze względu na precyzyjną definicję równania krzywej, jest to ECDSA dla P-256, Ed25519 dla Curve25519. Znowu żadna z nich nie jest silniejsza od drugiej, a różnica prędkości jest zbyt mała, aby mogła zostać wykryta przez człowieka. Jednak większość przeglądarek (w tym Firefox i Chrome) nie obsługuje już ECDH (także dh).
Korzystanie z P-256 powinno teraz zapewnić lepszą interoperacyjność, ponieważ Ed25519 jest znacznie nowszy i nie tak rozpowszechniony. Ale dla danego serwera, który konfigurujesz i do którego chcesz uzyskać dostęp z własnych maszyn, współdziałanie nie ma większego znaczenia: kontrolujesz zarówno oprogramowanie klienta, jak i serwera.
Zasadniczo wybór zależy od estetyki, tj. całkowicie od ciebie, bez racjonalnego powodu. Taki wybór i tak nie spowoduje problemów z bezpieczeństwem; algorytmy kryptograficzne są najsilniejszą częścią całego systemu, a nie najsłabszą.
Od wprowadzenia do Ed25519, są pewne korzyści związane z szybkością i pewne korzyści w zakresie bezpieczeństwa. Jedną z bardziej interesujących korzyści w zakresie bezpieczeństwa jest to, że jest odporny na kilka ataków kanału bocznego:
- Brak indeksów tablicy tajnej. Oprogramowanie nigdy nie czyta ani nie zapisuje danych z tajnych adresów w pamięci RAM; wzorzec adresów jest całkowicie przewidywalny. Oprogramowanie jest więc odporne na ataki związane z synchronizacją pamięci podręcznej, ataki typu hyperthreading i inne ataki typu side-channel, które polegają na wycieku adresów przez pamięć podręczną procesora.
- Brak tajnych warunków gałęzi. Oprogramowanie nigdy nie wykonuje rozgałęzień warunkowych na podstawie tajnych danych; wzór skoków jest całkowicie przewidywalny. Oprogramowanie jest zatem odporne na ataki typu side-channel polegające na wycieku informacji przez jednostkę predykcji rozgałęzień.
Dla porównania, na różnych algorytmach zademonstrowano kilka ataków na czas w pamięci podręcznej w świecie rzeczywistym. http://en.wikipedia.org/wiki/Timing_attack
Ed25519 ma ważną praktyczną przewagę nad (EC) DSA: ta ostatnia rodzina algorytmów całkowicie się łamie, gdy jest używana do podpisów razem z uszkodzonym generatorem liczb losowych. Taka awaria RNG zdarzyła się wcześniej i może się zdarzyć ponownie.
Teoretycznie implementacje mogą chronić przed tym konkretnym problemem, ale jest to znacznie trudniejsze aby zweryfikować, czy oba końce używają poprawnej implementacji, a nie tylko preferować lub wymuszać (w zależności od potrzeb zgodności) algorytm, który wyraźnie określa bezpieczne zachowanie (Ed25519).
Miałem wrażenie, że Curve25519 JEST faktycznie bezpieczniejszy niż krzywe NIST ze względu na kształt krzywej, który czyni ją mniej podatną na różne ataki kanału bocznego, a także na błędy implementacji. Zobacz: http://safecurves.cr.yp.to
Ed25519 ma tę zaletę, że można użyć tego samego klucza do podpisania umowy klucza (normalnie nie Zrób to). Nie jestem dobrze zaznajomiony z matematyką na tyle, aby powiedzieć, czy jest to właściwość tego, że jest krzywą Edwardsa, chociaż wiem, że jest ona przekształcana na układ współrzędnych Montgomery (efektywnie w Curve25519) dla uzyskania kluczowego porozumienia ... Ed25519 jest bardziej niż krzywa, określa także między innymi deterministyczne generowanie kluczy (np. haszowanie), o czym warto pamiętać. Jest to frustrujące w przypadku implementacji DJB, ponieważ tak się dzieje, ponieważ muszą być traktowane inaczej, aby zachować interoperacyjność.
Coś, na co do tej pory nie ma bezpośredniej odpowiedzi, to fakt, że Twoje pytania są połączeniem kilku mniej lub bardziej niezwiązanych ze sobą nazw, tak jakby były one równoważnymi alternatywami, co tak naprawdę nie jest prawdą.
ECDH i ECDSA to tylko nazwy metod kryptograficznych.
ECDH to metoda wymiany kluczy, której dwie strony mogą użyć do wynegocjowania bezpiecznego klucza na niezabezpieczonym kanał komunikacyjny. Jest to odmiana metody wymiany kluczy DH (Diffie-Hellman). ECDH to skrót od Elliptic-curve Diffie – Hellman . Jednak ECDH to tylko metoda, co oznacza, że nie można jej używać tylko z jedną określoną krzywą eliptyczną, można jej używać z wieloma różnymi krzywymi eliptycznymi.
ECDSA to algorytm podpisu, który może być użyty do podpisania fragmentu danych w taki sposób, że jakakolwiek zmiana danych spowodowałaby niepowodzenie weryfikacji podpisu, a mimo to atakujący nie byłby w stanie poprawnie ponownie podpisać danych po takiej zmianie. Jest to odmiana DSA (Digital Signature Algorithm). ECDSA to skrót od Elliptic Curve Digital Signature Algorithm . Ponadto ECDSA opisuje tylko metodę, której można używać z różnymi krzywymi eliptycznymi.
Bezpieczeństwo ECDH i ECDSA zależy zatem od dwóch czynników:
Krzywa25519 to nazwa konkretnej krzywej eliptycznej. Inne krzywe noszą nazwy Curve448, P-256, P-384 i P-521.
Ed25519 to nazwa konkretnej odmiany EdDSA . Podczas wykonywania EdDSA przy użyciu SHA-512 i Curve25519 , ta odmiana nosi nazwę Ed25519. EdDSA to algorytm podpisu, podobnie jak ECDSA.
Więc jeśli implementacja mówi tylko, że używa ECDH do wymiany kluczy lub ECDSA do podpisywania danych, bez wspominania o żadnej konkretnej krzywej, zwykle można założyć, że będzie używać krzywych NIST (P-256, P-384 lub P- 512), ale w rzeczywistości implementacja powinna zawsze wyraźnie nazwać używaną krzywą.
Aby odpowiedzieć na twoje pytanie dotyczące bezpieczeństwa: ECDH i ECDSA okazały się być koncepcyjnymi bezpiecznymi metodami wymiany kluczy i podpisywania, a zatem bezpieczeństwo ECDH i ECDSA w dużej mierze zależy od tego, czy ktoś znajdzie sposób, jak ogólnie złamać kryptografię eliptyczną (mało prawdopodobne, ale nie niemożliwe) lub znaleźć błąd w używanych krzywych (bardziej prawdopodobne).
Powodem, dla którego niektórzy ludzie wolą Curve25519 od standardowych krzywych NIST jest fakt, że NIST nie udokumentował jasno, dlaczego wybrał te krzywe na korzyść istniejących alternatyw. Ogólne stwierdzenie „ Krzywe zostały rzekomo wybrane ze względu na optymalne bezpieczeństwo i wydajność implementacji ” brzmi jak marketingowy banał i nie przekona ekspertów kryptograficznych.
NIST również ustandaryzował kryptografię krzywej eliptycznej opartej na generatorze liczb losowych (Dual_EC_DRB) w 2006 roku, a czasy nowojorskie twierdziły (po przejrzeniu notatek ujawnionych przez Edwarda Snowdena), że to NSA wpływała na NIST w celu standaryzacji ten konkretny generator liczb losowych. Odkryto ogromne słabości tego generatora i uważa się, że jest to celowy backdoor umieszczony przez NSA w celu złamania szyfrowania TLS opartego na tym generatorze. ANSI najwyraźniej odkrył słabość, gdy Dual_EC_DRB został im po raz pierwszy przesłany, ale pomimo świadomości, jak tego uniknąć, nie ulepszyli algorytmu ani nie opublikowali słabości, więc uważa się, że nie wolno im było (rozkaz kneblowania ). Kiedy słabość stała się publicznie znana, standard został wycofany w 2014 roku.
Mając tę podstawową wiedzę, oczywiście, ludzie zaczęli się zastanawiać, czy może źródłem tajemniczych parametrów krzywej NIST jest w rzeczywistości także NSA, ponieważ być może te krzywe mają również ukryte słabości, które nie są jeszcze publicznie znane, ale NSA może wiedzieć o nich, a tym samym być w stanie złamać kryptografię w oparciu o te krzywe. Nie ma na to żadnych dowodów, nawet domniemanych, ale z pewnością wydaje się to możliwe i bardziej realistyczne niż bajka. Dlatego ludzie stracili zaufanie do tych krzywych i przeszli na alternatywy, w przypadku których jest bardzo mało prawdopodobne, że były one pod wpływem jakichkolwiek tajnych służb na całym świecie.
Curve25519 została opublikowana przez niemiecko-amerykańskiego matematyka i kryptologa Daniela J. Bernstein w 2005 roku, który zaprojektował również słynny szyfr strumieniowy Salsa20 i obecnie szeroko stosowany jego wariant ChaCha20. Wynalazł również uwierzytelnianie wiadomości Poly1305. Google zdecydował, że ChaCha20 w połączeniu z Poly1305 jest bezpieczną alternatywą do użycia w TLS po usunięciu RC4, ponieważ algorytm został uszkodzony. Wymaga znacznie mniej mocy obliczeniowej niż użycie chipera blokowego AES (bardzo przydatne w urządzeniach mobilnych, ponieważ oszczędza czas pracy baterii), ale uważa się, że zapewnia porównywalne bezpieczeństwo. ChaCha20 / Poly1305 jest znormalizowany w RFC 7905 i od dziś szeroko stosowany w komunikacji klient-serwer TLS. Więc gdyby Bernstein był szpiegiem NSA, co jest bardzo mało prawdopodobne, wszyscy bylibyśmy już skazani na zagładę, ponieważ TLS, jak jest często używany dzisiaj, prawdopodobnie byłby bezużyteczny do ochrony danych przed oczami tajnych służb.