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
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.
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.
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.
- 1. Sử dụng Khóa công cộng RSA để giải mã một chuỗi đã được mã hóa bằng Khóa riêng RSA
- 2. Cách tạo khóa công cộng và khóa riêng thông qua RSA
- 3. Mã hóa RSA của dữ liệu lớn trong C#
- 4. Có thể mã hóa với nhiều khóa riêng (PHP) không?
- 5. Java: Cách tạo Khóa công cộng RSA từ chuỗi
- 6. Tải khóa RSA riêng được mã hóa PEM trong Crypto ++
- 7. Mã hóa RSA bằng khóa công khai
- 8. nhận được một IllegalBlockSizeException: Dữ liệu không được dài hơn 256 byte khi sử dụng rsa
- 9. Chuyển khóa công cộng RSA thành RSA DER
- 10. Có thể sử dụng mật mã đường cong elip để mã hóa dữ liệu không?
- 11. Các khóa công khai/riêng tư của RSA trong YAML
- 12. Mở khóa riêng RSA từ Ruby
- 13. Thuộc tính "dữ liệu-url" và "khóa dữ liệu" của thẻ <a> là gì?
- 14. Xoá mục nhập trùng lặp trong Cơ sở dữ liệu MySQL mà không có khóa chính
- 15. Nhận lỗi java.lang.ArrayIndexOutOfBoundsException: quá nhiều dữ liệu cho khối RSA
- 16. Từ khóa "động" và dữ liệu JSON
- 17. Chúng tôi có thể có nhiều khóa công khai với một khóa riêng duy nhất cho RSA không?
- 18. Làm thế nào để mã hóa dữ liệu trong php bằng cách sử dụng khóa công khai/riêng?
- 19. Flash SecureSocket và khóa riêng RSA
- 20. R: nhập nhiều tập hợp dữ liệu
- 21. cách sử dụng RSA để mã hóa các tệp (dữ liệu lớn) trong C#
- 22. Thuộc tính cơ sở dữ liệu có thể là khóa chính và khóa ngoài không?
- 23. trao đổi khóa công khai/riêng tư trong mã hóa/giải mã OCSEP PKCS # 1
- 24. nguồn dữ liệu không được hỗ trợ từ khóa
- 25. Làm thế nào để mã hóa dữ liệu bằng khóa công khai trong NodeJS?
- 26. Mã hóa tệp MySQL và dữ liệu
- 27. Heroku - Nhập khóa công cộng SSH và vẫn nhận được lỗi bị từ chối (publickey)
- 28. Dữ liệu được mã hóa trong Silverlight có thể giải mã được bằng C++ không?
- 29. gửi RSA khóa công khai vào iphone và sử dụng nó để mã hóa
- 30. Nhận dữ liệu chuỗi từ byte được mã hóa
Thaks cho một câu trả lời tuyệt vời – Riz