2012-07-16 37 views
9

Tôi có một số văn bản rõ ràng mà tôi muốn mã hóa bằng RSA_PKCS_V21 (sử dụng thư viện PolarSSL). Vấn đề là tôi cần phải biết kích thước của văn bản mã hóa trước khi thực hiện các thuật toán (cho mục đích phân bổ bộ nhớ động). Tôi biết kích thước khóa RSA & độ dài văn bản rõ ràng.
Tôi cũng muốn biết giới hạn về độ dài văn bản đầu vào rõ ràng.
Bất kỳ ý tưởng nào?Cách tính kích thước của văn bản mã hóa RSA bằng cách sử dụng kích thước khóa và độ dài văn bản rõ ràng?

Trả lời

12

Chỉ cần kiểm tra RSA PKCS#1 v2.1 standard, chapter 7.2:

RSAES-PKCS1-V1_5-ENCRYPT ((n, e), M)

Input:

  • (n, e) của người nhận RSA khóa công khai (k biểu thị độ dài trong octet của mô đun n)
  • Thông điệp được mã hóa, chuỗi octet có độ dài mLen, trong đó mLen < = k - 11

Vì vậy, đầu vào phụ thuộc vào kích thước then chốt. k là kích thước chính nhưng trong octet. Vì vậy, đối với khóa 1024 bit, bạn có 1024/8 - 11 = 117 byte làm văn bản thuần tối đa.


Lưu ý rằng ở trên là kích thước tối đa cho RSA với đệm PKCS # 1 v1.5. Đối với OAEP đệm mới sau đây có thể được tìm thấy trong chapter 7.1:

RSAES-OAEP-ENCRYPT ((n, e), M, L)

...

Input:

  • (n, e) RSA khóa công khai của người nhận (k biểu thị độ dài trong octet của mô đun n RSA) nhắn
  • M được mã hóa, một chuỗi octet của l ength mLen, nơi mLen < = k - 2hLen - 2
  • L nhãn tùy chọn được liên kết với thông báo; giá trị mặc định cho L, nếu L không được cung cấp, là trống rỗng chuỗi

đâu hLen là kích thước đầu ra của hàm băm sử dụng cho chức năng hệ mặt nạ. Nếu hàm băm SHA-1 mặc định được sử dụng thì kích thước tối đa của thông báo là k - 42 (vì kích cỡ đầu ra của SHA-1 là 20 byte và 2 * 20 + 2 = 42).


Thông thường, khóa bí mật được tạo ngẫu nhiên được mã hóa thay cho thư. Sau đó, tin nhắn được mã hóa bằng khóa bí mật đó. Điều này cho phép các tin nhắn gần như vô hạn và mật mã đối xứng - chẳng hạn như AES ở chế độ CBC - nhanh hơn nhiều so với mật mã không đối xứng. Sự kết hợp này được gọi là hybrid encryption.


Kích thước đầu ra cho mã hóa RSA hoặc hệ chữ ký với bất kỳ đệm trùng với kích thước của mô đun theo byte (làm tròn lên, tất nhiên), vì vậy đối với một chìa khóa 1024 bit bạn mong chờ 1024/8 = 128 octet/byte.

Lưu ý rằng mảng đầu ra của kích thước được tính có thể chứa các byte hàng đầu được đặt thành 0; điều này nên được coi là bình thường.

+0

Đây là một câu hỏi khá cũ, nhưng vì tôi vừa vấp phải nó trong khi nghiên cứu một phần câu hỏi: Tôi nghĩ câu trả lời này không trả lời toàn bộ câu hỏi, cũng yêu cầu kích thước của * ciphertext *, không chỉ các giới hạn về kích thước đầu vào. tức là, được cung cấp khóa RSA 2048 bit, mật mã * được tạo ra * lớn như thế nào cho một thông điệp rõ ràng? Câu hỏi này không được giải quyết bằng câu trả lời của bạn (hoặc tôi đã bỏ qua nó). – malexmave

+1

@malexmave Đã thêm một phần khác vào câu trả lời. Quên về nó vì nó là loại hiển nhiên. ** Cảnh báo ** kích thước khóa 1024 bit chỉ là một ví dụ, sử dụng kích thước khóa 2048 bit hoặc cao hơn được khuyến khích mạnh mẽ. –

Các vấn đề liên quan