2012-07-16 11 views
9

Mam wyraźny tekst, który chcę zaszyfrować przy użyciu RSA_PKCS_V21 (przy użyciu biblioteki PolarSSL). Problem polega na tym, że przed wykonaniem algorytmu muszę znać rozmiar tekstu szyfru (w celu dynamicznego przydzielania pamięci). Znam rozmiar klucza RSA & długość tekstu.
Chcę również poznać ograniczenie dotyczące długości tekstu wprowadzanego tekstem.
Każdy pomysł?Jak obliczyć rozmiar tekstu szyfrowania RSA, używając rozmiaru klucza i długości tekstu czystego?

Odpowiedz

12

Wystarczy sprawdzić RSA PKCS#1 v2.1 standard, chapter 7.2:

RSAES-PKCS1-V1_5 zaszyfrować ((n, e), m)

Wejście:

  • (n, e) odbiorcy RSA klucz publiczny (k oznacza długość w oktetach modułu n)
  • M wiadomość do zaszyfrowania, łańcuch oktetowy o długości mlen, gdzie mLen < = k - 11

Więc wejście zależy od rozmiaru klucza. k jest tym rozmiarem klucza, ale w oktetach. Tak więc dla klucza 1024-bitowego masz 1024/8 - 11 = 117 bajtów jako maksymalny zwykły tekst.


Należy zauważyć, że powyżej jest maksymalny rozmiar dla RSA z dopełnieniem PKCS # 1 v1.5. W przypadku nowszych OAEP dopełnienia są dostępne w chapter 7.1:

RSAES-OAEP zaszyfrowania ((n, e), K, L)

...

Wejście:

  • (n, e) w odbiorcy RSA klucza publicznego (k oznacza długość w oktetach RSA moduł n) komunikatu
  • M być szyfrowane, ciąg oktet l ength mLen, gdzie mL < = k - 2hLen - 2
  • L opcjonalna etykieta do skojarzenia z wiadomością; wartość domyślna dla L, L, jeżeli nie jest zapewnione, pusta ciąg

przypadku HLEN to wielkość wyjściowa funkcji haszującej do generowania funkcji maski. Jeśli używana jest domyślna funkcja skrótu SHA-1, maksymalny rozmiar wiadomości to k-42 (jako że rozmiar wyjściowy SHA-1 wynosi 20 bajtów, a 2 * 20 + 2 = 42).


Zazwyczaj losowo generowany klucz tajny jest szyfrowany zamiast wiadomości. Następnie wiadomość jest szyfrowana za pomocą tego tajnego klucza. Umożliwia to niemal nieskończenie długie wiadomości, a symetryczne krypto - takie jak AES w trybie CBC - jest znacznie szybsze niż asymetryczne krypto. Ta kombinacja nazywa się hybrid encryption.


Wielkość wyjściowa do szyfrowania RSA lub generowania podpisu z dowolnym wypełnieniem jest identyczna z wielkością modułu w bajtach (zaokrąglane w górę, oczywiście), więc dla kluczem 1024 bitowym można oczekiwać 1024/8 = 128 oktetów/bajtów.

Należy zauważyć, że tablica wyjściowa obliczonego rozmiaru może zawierać bajty wiodące ustawione na zero; to powinno być uważane za normalne.

+0

Jest to dość stare pytanie, ale ponieważ właśnie natknęliśmy się na to podczas badania część pytania: Myślę, że ta odpowiedź nie odpowie całą pytanie, które pyta o oczekiwanej wielkości * szyfrogram *, a nie tylko ograniczenia dotyczące rozmiaru wejściowego. tj. biorąc pod uwagę 2048-bitowy klucz RSA, jak duży jest wygenerowany * tekst zaszyfrowany * podany konkretnej wiadomości tekstowej? To pytanie nie było odpowiedzią na twoją odpowiedź (lub tęskniłem za nią). – malexmave

+1

@malexmave Dodano kolejną sekcję do odpowiedzi. Zapomniałem o tym, ponieważ jest to oczywiste. ** Uwaga ** rozmiar klucza 1024 bit jest tylko przykładem, zdecydowanie zaleca się użycie klucza o wielkości 2048 bitów lub wyższej. –

Powiązane problemy