it-swarm-vi.com

Tôi có thể sử dụng khóa riêng làm khóa chung và ngược lại không?

Tôi có mã để mã hóa dữ liệu bằng khóa chung và giải mã nó bằng khóa riêng. Điều này hữu ích khi khách hàng muốn gửi dữ liệu đến máy chủ và biết rằng chỉ có máy chủ mới có thể giải mã được.

Nhưng nói rằng tôi muốn máy chủ mã hóa dữ liệu bằng cách sử dụng khóa private và giải mã nó bằng khóa công khai, như một cách phân phối dữ liệu có thể được xác minh xuất phát từ đúng máy chủ. Thay vì sửa đổi mã để cho phép điều này, tôi có thể đơn giản xuất bản khóa riêng và giữ bí mật khóa chung không? Điều này có ảnh hưởng đến an ninh của hệ thống?

39
Graeme Perrow

Nhưng nói rằng tôi muốn máy chủ mã hóa dữ liệu bằng khóa riêng và giải mã nó bằng khóa chung, như một cách phân phối dữ liệu có thể được xác minh là đến từ đúng máy chủ.

Bạn có thể làm điều này - đây là, ở mức độ rất đơn giản, cách thức ký RSA hoạt động (lưu ý, đơn giản - có thêm một chút cho nó).

Thay vì sửa đổi mã để cho phép điều này, tôi có thể đơn giản xuất bản khóa riêng và giữ bí mật khóa chung không? Điều này có ảnh hưởng đến an ninh của hệ thống?

Bạn không cần cần xuất bản khóa riêng - RSA là một hoán vị bẫy có nghĩa là:

  • Nếu bạn mã hóa bằng khóa chung, bạn có thể giải mã bằng khóa riêng.
  • Nếu bạn mã hóa bằng khóa riêng, bạn có thể giải mã bằng khóa chung.

Do đó, RSA hỗ trợ thực hiện cả ký và mã hóa dựa trên người dùng cuối chỉ có khóa chung.

Trong trường hợp của bạn, nếu khách hàng muốn xác minh dữ liệu đến từ máy chủ, bạn áp dụng trường hợp thứ hai của RSA và giải mã dữ liệu chữ ký bằng khóa chung bạn đã có.

Hơn nữa, vì đó là một hoán vị, bạn không cần phải sửa đổi mã của mình. Cả hai phím nên hoạt động bằng cách sử dụng cùng một chức năng. Tôi hy vọng bất kỳ thư viện tiền điện tử tử tế nào cũng sẽ có API để xác minh chữ ký theo các tiêu chuẩn khác nhau tồn tại - một trong số đó có thể là một lựa chọn tốt.

RSA Labs cung cấp Nice giải thích về điều này .

Nếu bạn muốn mở rộng điều này giữa các máy chủ hoặc xác minh giao tiếp khách - tạo khóa cho mỗi thực thể và trao đổi các thực thể công khai. Quá trình sau đó có thể được sử dụng ở cả hai đầu.

Về mặt lý thuyết, e và d có thể hoán đổi cho nhau (đó là lý do tại sao RSA hoạt động) (người ta phải được chỉ định bí mật và giữ bí mật) nhưng p và q phải luôn luôn giữ bí mật vì những điều này cho phép bạn lấy được d từ e và ngược lại. Tuy nhiên, bạn cần phải cực kỳ cẩn thận trong việc hiểu về khóa riêng - phần mềm của bạn có lưu trữ p/q trong khóa riêng không? Nếu vậy, bạn không thể xuất bản nó như là. Ngoài ra, khi tôi nói có thể hoán đổi cho nhau - một khi bạn xuất bản một trong các cặp đó (e hoặc d cùng với mô đun n của bạn), bạn phải bảo vệ cái kia với cuộc sống của bạn. Thực tế mà nói như Graeme được liên kết trong các bình luận e thường được chọn là một giá trị nhỏ/cố định. Nhận xét của tôi về e/d có thể thay thế cho nhau rõ ràng không áp dụng khi e dễ dàng xác định. Do đó, làm điều này có khả năng gây nhầm lẫn và thực hiện sai. Sử dụng thư viện của bên thứ ba/không bắt đầu xuất bản khóa riêng.

51
user2213

Có, bạn có thể mã hóa bằng khóa riêng và giải mã bằng khóa chung, KHÔNG đưa ra khóa riêng của bạn (khóa riêng có thể tạo khóa chung và toàn bộ hệ thống mã hóa của bạn giờ đây vô dụng), tôi cho rằng bạn muốn làm gì đó như điều này:

Máy chủ mã hóa dữ liệu, gửi nó cho khách hàng.

Khách hàng có khóa chung và có thể giải mã dữ liệu từ máy chủ.

Trong trường hợp này, sẽ có ý nghĩa, nếu máy chủ thực hiện cả mã hóa và giải mã, tôi không biết tại sao bạn muốn triển khai tiền điện tử không đối xứng.

Quy tắc luôn được áp dụng mặc dù: khóa riêng vẫn ở chế độ riêng tư và không rời khỏi máy chủ.

9
StrangeWill

Nhưng nói rằng tôi muốn máy chủ mã hóa dữ liệu bằng khóa riêng và giải mã nó bằng khóa chung:

Máy chủ có thể mã hóa dữ liệu bằng khóa riêng của nó và người nhận có thể giải mã bằng khóa chung của máy chủ, điều này là có thể. Tuy nhiên, kịch bản này được sử dụng để ký điện tử một tài liệu và như bạn nói "cách phân phối dữ liệu có thể được xác minh là đến từ đúng máy chủ", vì chỉ có thể sử dụng khóa tương ứng (khóa chung của máy chủ) để giải mã dữ liệu. Khóa chung của máy chủ được xác minh bằng chứng thư số tương ứng được tạo và ký bằng kỹ thuật số bởi máy chủ.

tôi có thể đơn giản xuất bản khóa riêng và giữ bí mật khóa chung không?

Bạn không bao giờ nên xuất bản khóa riêng, như tên cho thấy.

Điều này có ảnh hưởng đến an ninh của hệ thống?

Có, hệ thống này không khả thi, ví dụ, nếu bạn đang sử dụng Diffie-Hellman (một trong những giao thức trao đổi khóa được sử dụng rộng rãi nhất), máy chủ và tất cả các máy khách phải chia sẻ các giá trị chung, được sử dụng để tính toán các khóa phiên. . Vì vậy, nếu bạn là người dùng xuất bản khóa riêng của mình, việc tính toán khóa công khai là điều không thể hoặc rất khó theo cách khác.

2
Ishtiaq Hussain

Tôi không biết liệu bạn có thể mã hóa bằng khóa riêng và giải mã bằng khóa chung hay không, nhưng nếu bạn có thể, thì nó sẽ không an toàn, vì khóa giải mã là công khai - khóa riêng của bạn nên được giữ riêng tư.

Nếu bạn chỉ muốn xác minh rằng người gửi thư, thì thay vào đó bạn ký dữ liệu bằng khóa riêng của người gửi và người nhận xác minh chữ ký bằng khóa chung của người gửi.

Nếu bạn muốn mã hóa dữ liệu và xác minh người gửi, bạn mã hóa và ký tên, không yêu cầu phải tiết lộ khóa riêng.

0
hmallett