2012-08-06 37 views

Trả lời

13

Theo phương trình được cập nhật của Lenstra có sẵn on this site, mức độ bảo mật của khóa RSA bit 4096 được kết hợp bằng mã băm mật mã dài ít nhất 248 bit, ví dụ SHA-256.

Nếu bạn sử dụng RSA OAEP (và bạn nên), lượng dữ liệu bạn có thể mã hóa nhiều nhất là modulus size - 2 - 2*hash size, là 446 byte.

Với RSA PKCS # 1 v1.5, bạn có thể mã hóa tối đa modulus size - 11 byte, nhưng RSA PKCS # 1 v1.5 cung cấp bảo mật kém hơn (nó không được bảo mật một cách an toàn, và số byte đệm ngẫu nhiên tối thiểu phải được mở rộng đến ít nhất 16 byte).

Nếu bạn cần mã hóa nhiều dữ liệu hơn, bạn không nên chỉ cần cắt nó lên và sử dụng RSA nhiều lần trên mỗi khối. Đó là một lỗ hổng bảo mật. Bạn phải thực hiện một cách tiếp cận khác, chính xác hơn:

  1. Chọn khóa đối xứng 128 bit ngẫu nhiên.
  2. Sử dụng chế độ hoạt động được xác thực để mã hóa dữ liệu của bạn (ví dụ: AES-128 GCM).
  3. Mã hóa khóa đối xứng bằng cách sử dụng RSA OAEP.

Mã hóa RSA (không giống giải mã) khá nhanh, nhưng thời gian thực sự phụ thuộc vào thư viện và trên nền tảng bạn sử dụng. Để tham khảo, hãy xem cryptopp library's website.

+2

@owlstead Điểm tốt về động từ đúng để sử dụng, tôi đã chỉnh sửa câu trả lời. Đối với tính toàn vẹn của khóa đối xứng được bảo vệ bằng mã hóa RSA, OAEP đã cung cấp tính toàn vẹn. Theo tôi, nó thậm chí không cần thiết, bởi vì chế độ xác thực (nhúng một MAC) được sử dụng sau này. Có lẽ bạn có nghĩa là tính xác thực (mà chương trình này không cung cấp)? – SquareRootOfTwentyThree

+0

Không, tôi có nghĩa là tính toàn vẹn. Nhưng tôi đã nhầm lẫn trong ý nghĩa rằng các cuộc tấn công oracle padding vào OAEP chỉ có thể là * tấn công kênh phụ *, nói cách khác, các cuộc tấn công vào việc thực hiện. –

+0

@SquareRootOfTwentyThree: bạn có tham chiếu nào giải thích ** tại sao ** kích thước tối đa là 'kích thước modulus - 2 - 2 * kích thước băm'? – eckes

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