2010-04-17 31 views
5

Tôi làm việc trên apllication cho phép các plugin truy cập vào các chức năng khác nhau, mỗi plugin cung cấp "chuỗi khởi tạo" để đặt mức truy cập vào các tính năng khác nhau. Các nhà phát triển gửi cho tôi chuỗi này và tôi mã hóa chúng bằng khóa riêng RSA 1024 bit của tôi và gửi dữ liệu được mã hóa trở lại. Khi bắt đầu, ứng dụng của tôi giải mã dữ liệu được mã hóa (chuỗi khởi tạo được mã hóa) bằng cách sử dụng khóa công cộng tích hợp và nếu "chuỗi dữ liệu đã giải mã! = Chuỗi khởi tạo" thì nó không khởi động được. Vì vậy, có thể sử dụng cơ sở dữ liệu của chuỗi khởi tạo được mã hóa "(trích xuất từ ​​các plugin khác) để bẻ khoá riêng tư của tôi hoặc làm cho nó có thể bruteforce trong thời gian hợp lý không?"Có thể nhận khóa riêng RSA biết khóa công cộng và tập hợp các mục nhập "dữ liệu gốc => dữ liệu được mã hóa" không?

Trả lời

5

Khi bạn nói rằng bạn "mã hóa bằng khóa riêng RSA" thì bạn không thực sự mã hóa mọi thứ. Đây là một chút bối rối lịch sử. Những gì bạn đang làm là chữ ký số số mà plugin xác minh bằng khóa công khai tương ứng. Sự nhầm lẫn xuất phát từ thực tế là, dưới ánh sáng đầy đủ, chữ ký RSA có thể được xem như một loại "mã hóa ngược" với khóa riêng hoạt động đầu tiên. Tuy nhiên, nó khác nhau trong một số chi tiết (ví dụ: padding, và sự tham gia của một hàm băm) mà làm cho nó khá khác nhau khi nói đến thực hiện.

Nếu bạn đang sử dụng một hợp sơ đồ chữ ký số RSA (ví dụ như một trong những mô tả trong PKCS#1, phần 8 "lược đồ chữ ký với phụ lục"), với một khóa RSA đủ lớn (1024 bit trở lên) tạo thông qua thuật toán tạo khóa được triển khai chính xác, thì không có cách nào khả thi, tính toán khả thi cho kẻ tấn công tận dụng chữ ký bạn tạo để tạo chữ ký mới (và a fortiori, khóa khóa riêng RSA). Không có cách nào chứng minh rằng chữ ký của bạn không giúp ích cho kẻ tấn công, nhưng 30 năm nghiên cứu công khai về chủ đề này đã không đưa ra một vi phạm như vậy.Lưu ý, mặc dù, chi tiết sử dụng đó, trong phần đệm cụ thể (phần ban đầu, biến đổi dữ liệu được ký thành một số lớn mà lõi toán học của RSA có thể xử lý) đã được chứng minh là tinh tế; nhiều cách đề xuất để làm đệm đã được tấn công thành công. Các PKCS # 1 paddings đã được giám sát trong một thời gian khá dài (hai thập kỷ cho "v1.5" padding) và đã chống lại tất cả những nỗ lực như vậy cho đến nay. Các gia đình "ISO 9796" của paddings không giá vé tốt, nhiều biến thể đã bị phá vỡ.

Nếu bạn đang không tính chữ ký của bạn theo tiêu chuẩn được thiết lập tốt (ví dụ: PKCS # 1), thì bạn đang tìm kiếm sự cố. Đừng làm thế. May mắn thay, hầu hết các triển khai RSA (trong các thư viện mã hóa và các ngôn ngữ lập trình/môi trường) đều theo PKCS # 1.

+0

Thaks cho một câu trả lời tuyệt vời – Riz

2

Toàn bộ điểm của công nghệ khóa công khai/riêng tư từ RSA là rất khó đảo ngược.

Có những vết nứt đã biết, lợi dụng một số thiếu sót thực hiện cụ thể, nhưng thuật toán cơ bản được cho là phải mất hàng thập kỷ để có thể tấn công bằng vũ lực. Xem this.

+0

Tại sao điều này lại được giảm giá? Sheesh, đám đông cứng rắn. – egrunin

+0

Vâng! Tại sao nó lại bị downvoted? – wallyk

5

Loại tấn công mã hóa này được gọi là known plaintext attack và sẽ rất khó áp dụng trên RSA1024. Hoặc ít nhất, cố gắng để phá vỡ khóa RSA với các bản rõ đã biết sẽ khó như cố gắng thực hiện nó mà không có chúng, loại tấn công duy nhất được biết đến liên quan đến vấn đề của bạn là tấn công thời gian, nhưng nó cần biết rõ việc triển khai cụ thể RSA của bạn vì nó hoạt động bằng cách đo thời gian cần thiết để giải mã.

Thực tế là sự an toàn của RSA được đưa ra bởi hai vấn đề toán học phức tạp, và biết văn bản thuần và văn bản mật mã liên quan không giúp bạn nhiều về nó.

Trong mọi trường hợp các biết rõ tấn công thường cần rất nhiều mẫu được thực hiện (như hàng triệu hoặc hàng tỷ cho DES) vì vậy nó không dễ dàng như vậy cũng cho thuật toán yếu.

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