2009-07-25 21 views
12

Tôi biết rằng RSACryptoServiceProvider có thể mã hóa bằng khóa công khai, sau đó nó có thể được giải mã bằng khóa riêng.Có thể mã hóa bằng khóa riêng sử dụng. RSACryptoServiceProvider không?

Có thể mã hóa bằng khóa cá nhân và giải mã bằng khóa công khai bằng RSACryptoServiceProvider không?

+0

* "Mã hóa bằng khóa cá nhân" * không phải là một hoạt động mã hóa hợp lệ. Nếu bạn đang cố gắng thực hiện thao tác đó, thông thường bạn muốn có *** Lược đồ Chữ ký với Phục hồi ***. – jww

Trả lời

-3

No. Đó không phải là cách thức hoạt động của bất kỳ mã hóa khóa công khai/riêng tư nào. Bạn chỉ có thể mã hóa bằng khóa công cộng và chỉ giải mã bằng khóa riêng.

+1

Cảm ơn! Tôi muốn làm Số sê-ri để bảo vệ phần mềm của mình, nếu RSA không thể mã hóa bằng khóa riêng, Làm thế nào để thực hiện theo cách khác? – guaike

+11

Thực ra, việc mã hóa bằng khóa riêng có thể có sử dụng nó. Bạn có thể mã hóa và phát hành một cái gì đó và "công khai" có thể giải mã thông điệp bằng khóa * công khai * của bạn, do đó biết rằng tệp được mã hóa đến từ bạn. Nó hoạt động như một hình thức thô sơ của một chữ ký/xác thực. PGP dựa trên dos cũ cho phép điều này. – CraigTP

+1

Craig bạn đang nói về việc ký kết, đó là một điều hoàn toàn khác. Việc ký không phải là mã hóa (mặc dù nó là mật mã). Ngay cả khi đó, chữ ký chỉ có thể được tạo bằng khóa riêng, nhưng được kiểm tra bằng công khai. – blowdart

2

May mắn là không. Tuy nhiên, bạn có thể đăng nhập bằng khóa riêng và xác minh chữ ký bằng khóa công cộng.

Trong khi toán liên quan đến ý nghĩa khi các vai trò chính được đảo ngược (và đây là cách chữ ký hoạt động), mã hóa cho bảo mật không có ý nghĩa nhiều khi khóa giải mã được biết và công khai.

+0

Khi toán học đảo ngược hàm nghịch đảo sẽ mất nhiều thời gian hơn để hoàn thành, một thời gian dài không thể đoán được. –

+1

bởi 'đảo ngược toán học' Tôi có nghĩa là toán học không quan tâm nếu e và d trong thuật toán được hoán đổi. Đây là những gì đã ký: mã hóa thông điệp băm thông báo bằng khóa riêng (số mũ riêng 'd'). Rõ ràng là tôi không có nghĩa là hướng tính toán có thể được đảo ngược. –

-1

Bảo mật của hệ thống mật mã khóa công khai dựa trên thực tế chức năng sign()/encrypt() là one-way function ở chỗ mất một khoảng thời gian để giải mã nó mà không có khóa "cửa bẫy" công khai.

Ngoài ra, thường các khóa được tạo không có cùng độ dài, mặc dù chúng có thể. Có rất nhiều bài báo về độ dài khóa bất đối xứng với RSA.

6

Thực hiện thao tác RSA thô với khóa riêng thường được gọi là thao tác giải mã (giống như thực hiện nó bằng khóa công khai được gọi là hoạt động mã hóa).

Có ích khi truy cập vào hoạt động này - ví dụ để triển khai một hoạt động không được khung công tác hỗ trợ.

Hoạt động tồn tại: đó là phương thức DecryptValue, được xác định bởi lớp cơ sở của RSACryptoServiceProvider: System.Security.Cryptography.RSA. Thật không may, nó không được RSACryptoServiceProvider hỗ trợ (vì win32-api cơ bản, CryptoAPI, không hỗ trợ nó). Nếu bạn có thể nắm giữ một triển khai .NET khác của lớp RSA, bạn sẽ có thể thực hiện nó, tuy nhiên.

41

Chỉ cần để xóa mọi thứ lên một chút:

RSA có thể được sử dụng một trong hai để mã hóa (đảm bảo rằng Eve không thể đọc được thông điệp mà Alice gửi cho Bob) hoặc ký (đảm bảo rằng nếu Alice gửi một thông điệp cho Bob, Bob biết rằng đó thực sự là Alice gửi tin nhắn, và không phải Eve giả vờ là Alice)

RSA tạo ra một cặp khóa - khóa công cộng và khóa riêng. RSA được thiết kế sao cho nếu bạn áp dụng khóa công khai và sau đó áp dụng khóa riêng, hoặc ngược lại, bạn sẽ nhận được thông báo tương tự. Và khóa công khai không thể được lấy từ khóa riêng (hoặc ngược lại).

Để sử dụng RSA để mã hóa, Alice mã hóa thư bằng khóa công khai của Bob. Cách duy nhất để đọc tin nhắn này là với khóa riêng của Bob, mà chỉ có anh ta có. Vì thế Eve không thể đọc được thông điệp vì anh ta không có chìa khóa này. Mặt khác, điều này không cung cấp xác thực nguồn gốc của thông báo. Eve cũng có thể lấy khóa công khai của Bob (vì nó công khai) và gửi tin nhắn cho Bob, giả vờ là Alice.

Để sử dụng RSA để ký, Alice lấy một mã băm của thư, mã hóa băm bằng khóa riêng của mình và nối kết quả (đây là chữ ký) vào thư. Eve tất nhiên vẫn có thể giải mã điều này bằng cách sử dụng khóa công khai của Alice. Tuy nhiên, Bob có thể giải mã chữ ký bằng khóa công khai của Alice và xem nó có khớp không.Nếu có, nó phải được mã hóa bằng khóa riêng của Alice, mà chỉ có cô ấy mới có, vì vậy nó phải đến từ Alice.


Hiện tại, tôi không quen với API mã hóa .NET, vì vậy tôi không chắc liệu nó có hoạt động chính xác như được mô tả ở đây hay không. Nhưng lời giải thích này có thể giúp bạn hiểu một số câu trả lời bạn đang nhận được.

+0

Bạn có ý gì bằng cách "áp dụng khóa công khai và sau đó áp dụng khóa riêng tư hoặc ngược lại"? "áp dụng" có nghĩa là gì ở đây? – WarLord

+0

Điều gì sẽ xảy ra nếu Alice mã hóa chính thư đó thay vì mã băm? Điều đó sẽ không đơn giản hơn, hay có lỗ hổng bảo mật trong điều này? Tôi đang nói về việc ký tất nhiên, không phải mã hóa. –

16

Mọi người đều tuyên bố rằng không có điều nào như vậy hoặc không biết cách thức hoạt động của RSA hoặc chúng bị kẹt trong dấu "ký".

Điều này hoàn toàn có thể, và có ý nghĩa hoàn toàn, để mã hóa bằng khóa riêng. Vâng, điều này tương tự như ký, nhưng đây KHÔNG phải là tất cả những gì các thư viện hiện đại nhất dùng khi ký. Đối với họ, điều này có nghĩa là tính toán thông báo thông báo, hoặc HMAC và mã hóa bằng khóa riêng. Mã hóa thích hợp với khóa riêng để ký kết cũng có ý nghĩa nhiều khi nói rằng dán một tài liệu vào một két an toàn và để chìa khóa nằm xung quanh, là một ký tự để ký tài liệu.

Có, nó đang mã hóa, bởi vì nó hoạt động tương tự. Mã hóa được mã hóa riêng tư chỉ là không đọc được như là bản mã được mã hóa công khai; người ta cần cả hai chìa khóa để giải mã bản mã.

Xem http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html để tham khảo về thuật toán RSA.

+0

Hai liên kết trong [bài đăng này] (http://stackoverflow.com/a/2350959/1299353) nói chuyện với việc thực hiện cụ thể của RSA và cách bảo mật mã hóa khóa riêng của nó là – Jett

+0

Tôi thấy câu trả lời này là thú vị ... Tôi là không chắc chắn tôi sẽ không đồng ý với một cơ thể học thuật của các nhà mật mã và toán học. – jww

+0

Vâng, do đó, điều này đặc trưng cho việc cấy ghép RSA, đúng không? E và D là ma thuật công cộng/riêng tư, và bạn chỉ cần 1 trong số chúng để mã hóa/giải mã. Nó chỉ xảy ra như vậy mà RSA bao gồm một số dữ liệu khác trong khóa công khai P và Q (có thể cũng chỉ có trong khóa riêng). – therealsix

0

Bạn có thể mã hóa và giải mã bằng Khóa riêng tư. PrivateKey infact chứa cả Private và PublicKey.

Về mặt lý thuyết, ít nhất bạn có thể mã hóa bằng PublicKey và giải mã bằng Khóa cá nhân và ngược lại. Trong VB.net tôi thấy trường hợp đầu tiên hoạt động và chữ số thứ hai ném lỗi BadKey

+2

Tôi phải mã hóa bằng PrivateKey và giải mã bằng PublicKey. Sau một ngày thất bại, tôi hiểu rằng 'RSACryptoServiceProvider.Encrypt' luôn sử dụng PublicKey ngay cả khi đối tượng' RSACryptoServiceProvider' được tạo ra từ PrivateKey. Mặt khác, tôi không thể sử dụng 'Sign' vì nó yêu cầu thuật toán băm nhưng tôi muốn mã hóa dữ liệu bằng cách băm. Nói cách khác, vấn đề là trong thực hiện .Net. – i486

0

Bạn có thể thực hiện cả hai; mã hóa với tư nhân và decypt với công chúng, OR, mã hóa với công chúng và giải mã với tư nhân. Bạn không thể mã hóa sau đó giải mã với khóa riêng, hoặc bạn cũng không thể thực hiện tương tự với khóa công khai.

Remus đóng đinh nó; mã hóa bằng khóa riêng không có ý nghĩa nhiều khi khóa giải mã được biết và công khai.

Ngoài ra, bạn có thể lấy được khóa công khai từ khóa riêng tư, nhưng không phải ngược lại.

+0

Tôi tìm thấy câu trả lời này là thú vị, quá ... Tôi không chắc chắn tôi sẽ không đồng ý với một cơ thể học thuật của các nhà mật mã và toán học. – jww

+0

Có, ngay cả khi tôi tự hỏi điểm mã hóa bằng khóa riêng, khi khóa công khai được cho là được biết đến. Trừ khi, nó giống như, chìa khóa công khai (mặc dù) có tên 'công khai; không thực sự được công khai cho tất cả, nhưng chỉ cho bên liên quan. –

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