PKKS 1

W kryptografii PKCS #1 jest pierwszym z rodziny standardów zwanych standardami kryptografii klucza publicznego (PKCS) , opublikowanymi przez RSA Laboratories . Zawiera podstawowe definicje i zalecenia dotyczące implementacji RSA dla kryptografii z kluczem publicznym . Definiuje właściwości matematyczne kluczy publicznych i prywatnych, prymitywne operacje szyfrowania i podpisów, bezpieczne schematy kryptograficzne i powiązane reprezentacje składni ASN.1 .

Obecna wersja to 2.2 (2012-10-27). W porównaniu z wersją 2.1 (2002-06-14), która została ponownie opublikowana jako RFC 3447, wersja 2.2 aktualizuje listę dozwolonych algorytmów haszujących, aby dostosować je do FIPS 180-4, dodając w ten sposób SHA-224, SHA-512/224 i SHA- 512/256.

Klucze

Standard PKCS #1 definiuje matematyczne definicje i właściwości, które muszą posiadać klucze publiczne i prywatne RSA. Tradycyjna para kluczy jest oparta na module n , który jest iloczynem dwóch różnych dużych liczb pierwszych p i q , takich że = .

Począwszy od wersji 2.1, ta definicja została uogólniona, aby umożliwić klucze z wieloma liczbami pierwszymi, w których liczba różnych liczb pierwszych może wynosić dwa lub więcej. Kiedy mamy do czynienia z kluczami o wielu liczbach pierwszych, wszystkie czynniki pierwsze są ogólnie oznaczane jako dla niektórych i , tak że:

dla

Dla wygody notacji i .

Klucz publiczny RSA jest reprezentowany jako krotka , gdzie liczba całkowita e jest wykładnikiem publicznym.

Klucz prywatny RSA może mieć dwie reprezentacje. Pierwszą zwartą formą jest krotka , gdzie d jest wykładnikiem prywatnym. Druga forma ma co najmniej pięć terminów lub więcej dla kluczy z wieloma liczbami pierwszymi. Chociaż matematycznie redundantne w stosunku do formy zwartej, dodatkowe terminy pozwalają na pewne optymalizacje obliczeniowe podczas używania klucza. W szczególności drugi format umożliwia uzyskanie klucza publicznego.

prymitywy

Norma definiuje kilka podstawowych prymitywów. Operacje prymitywne dostarczają podstawowych instrukcji przekształcania surowych formuł matematycznych w obliczalne algorytmy.

  • I2OSP — Integer to Octet String Primitive — Konwertuje (potencjalnie bardzo dużą) nieujemną liczbę całkowitą na sekwencję bajtów (łańcuch oktetów).
  • OS2IP - Octet String to Integer Primitive - Interpretuje sekwencję bajtów jako nieujemną liczbę całkowitą
  • RSAEP — prymitywne szyfrowanie RSA — szyfruje wiadomość przy użyciu klucza publicznego
  • RSADP — prymitywne odszyfrowywanie RSA — odszyfrowuje tekst zaszyfrowany przy użyciu klucza prywatnego
  • RSASP1 — RSA Signature Primitive 1 — tworzy podpis nad wiadomością przy użyciu klucza prywatnego
  • RSAVP1 — RSA Verification Primitive 1 — weryfikuje podpis wiadomości przy użyciu klucza publicznego

Schematy

Same w sobie prymitywne operacje niekoniecznie zapewniają jakiekolwiek bezpieczeństwo. Koncepcja schematu kryptograficznego polega na zdefiniowaniu algorytmów wyższego poziomu lub zastosowań prymitywów, aby osiągnąć określone cele bezpieczeństwa.

Istnieją dwa schematy szyfrowania i deszyfrowania:

Uwaga: Wprowadzono niewielką zmianę w RSAES-OAEP w PKCS #1 w wersji 2.1, powodując, że RSAES-OAEP w PKCS #1 w wersji 2.0 jest całkowicie niezgodny z RSA-OAEP w PKCS #1 w wersji 2.1 i 2.2.

Istnieją również dwa schematy postępowania z podpisami:

  • PSS : ulepszony probabilistyczny schemat podpisu z dodatkiem; oparty na probabilistycznym schemacie podpisu, pierwotnie wymyślonym przez Bellare i Rogaway.
  • RSASSA-PKCS1-v1_5: stary schemat podpisu z dodatkiem jako pierwszy znormalizowany w wersji 1.5 PKCS #1 .

Dwa schematy podpisu wykorzystują oddzielnie zdefiniowane metody kodowania:

  • EMSA-PSS: metoda kodowania załącznika do podpisu, probabilistyczny schemat podpisu.
  • EMSA-PKCS1-v1_5: metoda kodowania załącznika podpisu jako pierwsza znormalizowana w wersji 1.5 PKCS #1.

Schematy podpisów są w rzeczywistości podpisami z załącznikiem , co oznacza, że ​​zamiast bezpośredniego podpisywania niektórych danych wejściowych, najpierw używana jest funkcja skrótu w celu wytworzenia pośredniej reprezentacji danych, a następnie wynik skrótu jest podpisany. Ta technika jest prawie zawsze używana z RSA, ponieważ ilość danych, które można bezpośrednio podpisać, jest proporcjonalna do rozmiaru kluczy; która jest prawie zawsze znacznie mniejsza niż ilość danych, które aplikacja może chcieć podpisać.

Historia wersji

  • Wersje 1.1–1.3, od lutego do marca 1991 r., rozpowszechniane prywatnie.
  • Wersja 1.4, czerwiec 1991, opublikowana dla NIST/OSI Implementors' Workshop.
  •   Wersja 1.5, listopad 1993. Pierwsza publikacja publiczna. Opublikowane ponownie jako RFC 2313 .
  •   Wersja 2.0, wrzesień 1998. Ponownie opublikowana jako RFC 2437 . Wprowadzono schemat szyfrowania RSAEP-OAEP.
  •   Wersja 2.1, czerwiec 2002. Ponownie opublikowana jako RFC 3447 . Wprowadzono RSA z wieloma liczbami pierwszymi i schemat podpisu RSASSA-PSS
  •   Wersja 2.2, październik 2012 r. Ponownie opublikowana jako RFC 8017 .

Implementacje

Poniżej znajduje się lista bibliotek kryptograficznych obsługujących PKCS#1:

Ataki

Wykryto wiele ataków na PKCS #1 v1.5.

W 1998 roku Daniel Bleichenbacher opublikował przełomowy artykuł na temat tego, co stało się znane jako atak Bleichenbachera (znany również jako „atak miliona wiadomości”). PKCS # 1 został następnie zaktualizowany w wersji 2.0, a użytkownikom chcącym nadal korzystać ze starej wersji standardu wydano poprawki. Z niewielkimi zmianami ta luka nadal występuje w wielu nowoczesnych serwerach.

W 2006 roku Bleichenbacher przedstawił nowy atak fałszerstwa na schemat podpisu RSASSA-PKCS1-v1_5.

Zobacz też

Linki zewnętrzne