Điểm:0

Thông tin nào cần được lưu trữ cho khóa riêng RSA để giải mã

lá cờ mx

tôi đang dùng rsa mô-đun trong Python. Tôi sử dụng dòng sau để tạo khóa chung và khóa riêng:

(public_key, private_key) = rsa.newkeys(2048)

Và sau đó tôi mã hóa một tin nhắn bằng cách sử dụng:

mã hóa_msg = rsa.encrypt(the_msg, public_key)

Bây giờ, giả sử tôi muốn đưa khóa riêng cho ai đó, cùng với tin nhắn được mã hóa. Thông tin nào sẽ được đưa vào khóa riêng tư mà tôi cung cấp cho người khác? Nếu tôi nhìn vào Khóa riêng cấu trúc trong mã Python, tôi thấy ví dụ đó private_key có các trường sau:

bịt mắt, blinffac_inverse, coef, đ, e, kinh nghiệm1, exp2, câm, N, P, q.

Tôi có cần lưu và chuyển tất cả dữ liệu này cho người khác để họ có thể giải mã tin nhắn không? Tất cả những biến này là gì?

lá cờ ma
Trong RSA thô, khóa chung là (n, e) và khóa riêng là (n, d). Tất cả các biến khác không cần thiết cho toán học. Nhưng một triển khai phần mềm cụ thể có thể sử dụng nhiều các biến khác về tốc độ, tính năng bổ sung và các lý do khác.
user9278661 avatar
lá cờ mx
@Nayuki cảm ơn vì đã phản hồi. Biến `n` có giống nhau đối với khóa công khai và khóa riêng không? Nếu đúng như vậy thì người ta chỉ cần chuyển `d` làm khóa riêng? Ngoài ra, các biến khác mà tôi đã đề cập trong câu hỏi là gì? Có một tài liệu tham khảo giải thích những biến?
lá cờ ma
(n = p * q) thực sự được chia sẻ cho cả khóa chung và khóa riêng. Một lần nữa, tôi đã nói rằng các biến khác là dành riêng cho việc triển khai và bạn cần tự đọc.
SAI Peregrinus avatar
lá cờ si
"Bây giờ giả sử tôi muốn đưa khóa riêng cho ai đó, cùng với tin nhắn được mã hóa." TẠI SAO â½ KHÔNG BAO GIỜ chia sẻ khóa riêng tư, điều này không phù hợp với mục đích sử dụng RSA. Yêu cầu người khác tạo một cặp khóa và cung cấp cho bạn khóa chung của họ. Hoặc tốt hơn nữa, hãy sử dụng [age](https://age-encryption.org) để nhận được một số lợi ích bảo mật chính so với mã hóa thư bằng RSA (hầu như luôn luôn là một ý tưởng tồi nếu làm điều đó).
Điểm:1
lá cờ in

Trong RSA, có nhiều số khác nhau (loại) tương đương với khóa riêng, nhưng không phải là khóa riêng mỗi gia nhập. Đây là những con số mà nếu bạn biết chúng, bạn có thể tính toán phần còn lại của khóa riêng tư một cách nhanh chóng. Một số số này cải thiện tốc độ ký/giải mã của khóa riêng nếu bạn biết chúng, vì vậy việc triển khai RSA thường giữ chúng cùng với khóa riêng để tăng tốc độ.

Tôi đã tra cứu triển khai này và tìm thấy ý nghĩa sau:

  • Nmô đun, số modulo mà thao tác phím được thực hiện.
  • esố mũ công cộng, sức mạnh mà một tin nhắn được thực hiện để mã hóa nó (hoặc xác thực chữ ký của nó).
  • đsố mũ riêng. Lấy một con số để nắm quyền đ (mô-đun N) là phép toán nghịch đảo để lấy một số thành lũy thừa e. Điều này là do trong RSA, đối với bất kỳ $m$ trong phạm vi, $(m^e)^d \equiv (m^d)^e \equiv m \pmod n$.
  • Pyếu tố lớn hơn của N.
  • qyếu tố nhỏ hơn của N. Thực tế là nó nhỏ hơn rất quan trọng đối với ý nghĩa của coef.
  • kinh nghiệm1$d \mod (p-1)$.
  • exp2$d \mod (q-1)$.
  • coef$q^{-1} \mod p$. Đó là hệ số cho kỹ thuật tăng tốc CRT.
  • bịt mắt là một số ngẫu nhiên được chọn trong quá trình giải mã hoặc ký. Nó được sử dụng trong các hoạt động này để che giấu giá trị của các số riêng khỏi các cuộc tấn công theo thời gian và sức mạnh: đến các cuộc tấn công theo thời gian "mù".
  • Blindfac_inverse là nghịch đảo của bịt mắt modulo N, được sử dụng cho quá trình làm mù.
  • câm là nội bộ để triển khai và không phải là một số. Nó dường như được sử dụng để đảm bảo an toàn cho luồng triển khai.

Khóa công khai bao gồm các số Ne.

Khóa riêng bao gồm các số Nđ; e thường được bao gồm để thuận tiện. Bạn có thể thực hiện mọi thao tác chỉ với đ và khóa chung, nhưng nó có thể không có hiệu suất tối ưu.

P, q, kinh nghiệm1, exp2, và coef là bổ sung riêng các số mà khi được cung cấp sẽ tăng tốc quá trình giải mã và ký RSA. Bạn muốn giữ những con số này nếu có thể, nhưng chúng không cần thiết. Để biết thêm thông tin về những gì họ làm: Định lý phần dư Trung Quốc và RSA

bịt mắtBlindfac_inverse là các số tạm thời được tạo bởi mù() chức năng trong triển khai Python RSA đó. Đừng lưu những số này.

user9278661 avatar
lá cờ mx
Cảm ơn đó là một câu trả lời tuyệt vời. Bạn có thể vui lòng thêm một số tài liệu tham khảo cho đầy đủ? Bạn đã tìm thấy lời giải thích cho các tham số này ở đâu?
Myria avatar
lá cờ in
@ user9278661 Hừm. Tôi chỉ biết cách chúng được sử dụng và liên kết "CRT và RSA" là tài liệu tham khảo cho các số bổ sung. Đây là tất cả những thứ RSA rất chung chung và không dành riêng cho python-rsa. Để hiểu các tên biến cụ thể, tôi đã tra cứu mã nguồn python-rsa: https://github.com/sybrenstuvel/python-rsa/blob/main/rsa/key.py

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.