Điểm:0

Chữ ký mù RSA Thực hiện an toàn

lá cờ in

Ghi chú: Tôi không phải là một crpytographer

Tôi muốn kiểm tra xem Triển khai Chữ ký mù RSA của tôi có an toàn để sử dụng trong ứng dụng ở giai đoạn sản xuất hay không và tôi cũng có một số câu hỏi mà tôi rất biết ơn nếu được giải đáp.
Tôi đã thực hiện rất nhiều nghiên cứu trong vài ngày qua và đưa ra điều này:

Giai đoạn phát hành chữ ký

  1. Lấy khóa công khai; số mũ $e$, mô đun $n$
  2. Tạo một số ngẫu nhiên $r$ nhỏ hơn và tương đối nguyên tố với mô đun $n$
  3. Tính hàm băm của mã thông báo riêng tư $m$
  4. Tính toán tin nhắn mù $ M = h(m).(r^emod$ $n) $
  5. Gửi tin nhắn ẩn đến máy chủ sẽ trả lại chữ ký ẩn $S = M^d mod $ $n$, ở đâu $d$ là số mũ riêng
  6. Tính toán chữ ký không bị che $s = S.r^{-1}$

Nếu tôi đúng, điều này sẽ kết thúc bằng một mã thông báo riêng tư $m$ và chữ ký hợp lệ của nó $s$

Câu hỏi 1: Cách nhân $h(m)$$r^emod$ $n$ ? Sẽ không phải là kết quả lớn hơn $n$ ?
Câu hỏi 2: Tôi có thể sử dụng bất kỳ thuật toán băm nào trên $m$ như SHA-256?
câu hỏi 3: Máy chủ sẽ không băm hoặc đệm tin nhắn bị mù trước khi ký, Điều đó có đúng và an toàn không?

Giai đoạn xác minh chữ ký

  1. Khách hàng gửi mã thông báo riêng của mình $m$ và chữ ký của nó $s$
  2. Máy chủ sẽ kiểm tra chữ ký $s^e = h(m)$ $mod$ $n$

câu hỏi 4: Làm cách nào để triển khai sơ đồ đệm để ngăn chữ ký bị giả mạo do thuộc tính đồng hình của RSA?
câu hỏi 5: Việc triển khai này có dễ bị tấn công không? Có bất kỳ cải tiến?

fgrieu avatar
lá cờ ng
Phương trình của $M$ là $M = h(m).(r^emod$ $n) $ trong câu hỏi. Với kiểu chữ tốt, tôi nghĩ điều này mang lại $M=h(m)\cdot(r^e\bmod n)$. Nhưng điều đó có đúng không? Phải không $M=h(m)\cdot r^e\bmod n$ ? Điều này có thể được tính là $M=(h(m)\cdot (r^e\bmod n))\bmod n$. Ngoài ra, tôi khá chắc chắn rằng nó có nghĩa là $s = S\cdot r^{-1}\bmod n$ trong đó có $s = S.r^{-1}$ và kiểu chữ chính xác là $S=M^d \bmod n$.
Điểm:2
lá cờ my

lưu ý: Tôi không phải là người viết mật mã

Tôi muốn kiểm tra xem Triển khai Chữ ký mù RSA của tôi có an toàn để sử dụng trong ứng dụng ở giai đoạn sản xuất hay không và tôi cũng có một số câu hỏi mà tôi rất biết ơn nếu được giải đáp.

Xin lỗi, nhưng khi tôi nghe những câu hỏi như thế này, có vẻ như:

Tôi không phải là bác sĩ phẫu thuật, nhưng tôi muốn thực hiện một số ca phẫu thuật tim. Tôi đã thực hiện rất nhiều nghiên cứu trong vài ngày và tôi muốn đảm bảo rằng mình hiểu những điều cơ bản trước khi bắt đầu...

Ok, tôi sẽ không điều đó tệ, nhưng nghe có vẻ hơi giống nhau (và nếu nó thực sự dành cho 'ứng dụng ở giai đoạn sản xuất', thì có lẽ cũng không còn xa nữa. Ít nhất, nếu bạn phẫu thuật tim sai, bạn sẽ biết ngay nó không hoạt động ...

Với điều đó ra khỏi ngực tôi, đây là một số câu trả lời:

Câu 1: Cách nhân $h(m)$$r^e \bmod n$ ? Sẽ không phải là kết quả lớn hơn $n$ ?

Trên thực tế, bạn nhân chúng modulo $n$.

Câu hỏi 2: Tôi có thể sử dụng bất kỳ thuật toán băm nào trên m như SHA-256 không? Câu hỏi 4: Làm cách nào để triển khai sơ đồ đệm để ngăn chữ ký bị giả mạo do thuộc tính đồng hình của RSA?

Tôi đang đặt hai câu hỏi này cùng nhau vì chúng có cùng một câu trả lời. Gì $h$ cần phải không phải là SHA-256 thẳng, mà thay vào đó là SHA-256 mà bạn thực hiện hàm băm (chẳng hạn như SHA-256) và sau đó đệm kết quả, có thể sử dụng PKCS 1.5 SSA hoặc PSS (tùy thuộc vào những gì người xác minh mong đợi).

Câu hỏi 3: Máy chủ sẽ không băm hoặc đệm thư bị che khuất trước khi ký, Điều đó có đúng và an toàn không?

Trong trường hợp này, nó đúng và an toàn - nếu máy chủ đã băm hoặc đệm tin nhắn, nó sẽ làm mọi thứ rối tung lên. Hãy nhớ rằng, bạn đã thực hiện thao tác băm/đệm ở bước 4.

Mặt khác (để quay lại nhận xét ban đầu của tôi), nếu bạn cần hỏi những câu hỏi này, có thể bạn chưa sẵn sàng để tự mình thực hiện điều này...

Mohamed Waleed avatar
lá cờ in
Cảm ơn câu trả lời của bạn, tôi không muốn tự mình thực hiện điều này vì tôi không phải là người viết mật mã, nhưng tôi không tìm thấy bất kỳ triển khai nào an toàn để sử dụng. Vì vậy, tôi đã hỏi về các chi tiết thực hiện, sau đó tôi sẽ viết mã để thực hiện nó.Tôi muốn chắc chắn một điều cuối cùng: Để kiểm tra xem chữ ký có được đệm chính xác hay không, tôi sẽ thử đệm vào tin nhắn gốc và kiểm tra xem kết quả có bằng nhau không (như kiểm tra hàm băm của tin nhắn). tức là pad(m) = s. Có đúng không ?

Đă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.