Điểm:0

Chữ ký RSA-SHA256 có dễ bị tấn công mở rộng không?

lá cờ mq

Tôi cần ký một tin nhắn bằng khóa riêng và xác minh tin nhắn đó bằng khóa chung, đồng thời đảm bảo rằng tin nhắn không bị giả mạo.

Tôi biết rằng bản thân SHA-256 dễ bị tấn công kéo dài.

Tôi cũng biết rằng những thứ như HMAC đã được thiết kế đặc biệt để phá vỡ các cuộc tấn công như vậy.

Nhưng nếu tôi ký một tin nhắn bằng RSA và SHA-256 thì sao? Họ có an toàn không?

Tôi có cần phải ký RSA/SHA3 để được bảo vệ không? Hoặc có thể là các phiên bản rút gọn của SHA2 (cụ thể là SHA-384 và SHA-512/256) được cho là không phải dễ bị tấn công kéo dài?

HMAC sẽ là một cách tiếp cận tốt hơn cho vấn đề này?

Tôi đang cân nhắc sử dụng RSA, đây có lẽ là mã nổi tiếng nhất trong số các loại mật mã bất đối xứng. Vui lòng chỉ cho tôi thứ khác nếu có một lựa chọn tốt hơn. Tôi cần thứ gì đó được hỗ trợ bởi OpenSSL và mô-đun mật mã Node.js (theo như tôi biết, cũng dựa trên OpenSSL).

tái bút Tôi hơi mới đối với cộng đồng tiền điện tử, vì vậy tôi hy vọng lời nói của mình có ý nghĩa.

--phụ lục--

Đây là mối quan tâm của tôi về RSA-SHA256.

Giả sử tin nhắn là $M$ và hàm băm của nó là $SHA256(M)$.

Kẻ tấn công có thể sử dụng chúng để tính toán $M||X$$SHA256(M||X)$, ngay cả khi không biết khóa riêng.Trong trường hợp này, người nhận $M||X$ và chữ ký của nó $SHA256(M||X)$ sẽ tin rằng tin nhắn hợp lệ vì tin nhắn và chữ ký của nó khớp với nhau.

Ít nhất đó là những gì sẽ xảy ra nếu RSA_sign chỉ sử dụng hàm băm thô. Nếu RSA chuyển hàm băm thông qua một kỹ thuật giống như HMAC hoặc bất kỳ thuật toán nào ngăn kẻ tấn công giả mạo chữ ký, tôi đoán chúng ta sẽ an toàn.

kelalaka avatar
lá cờ in
Một bản lừa bịp có thể có của: [Làm thế nào Giá trị băm có thể giống nhau trong cuộc tấn công kéo dài?](https://crypto.stackexchange.com/q/87696/18298)
AleksanderCH avatar
lá cờ nl
Điều này có trả lời câu hỏi của bạn không? [Có cần HMAC cho MAC dựa trên SHA-3 không?](https://crypto.stackexchange.com/questions/17735/is-hmac-needed-for-a-sha-3-based-mac)
vdavid avatar
lá cờ mq
@AleksanderCH cảm ơn vì liên kết. Nó một phần trả lời câu hỏi. Nó cho thấy rằng MAC dựa trên SHA3 sẽ an toàn nếu không có HMAC, đó là một trong những giả định của tôi. Nhưng nó không cho biết liệu dấu hiệu/xác minh RSA-SHA256 có an toàn hay không, đó là câu hỏi chính của tôi.
kelalaka avatar
lá cờ in
Điều này có trả lời câu hỏi của bạn không? [Làm thế nào Giá trị băm có thể giống nhau trong cuộc tấn công mở rộng độ dài?](https://crypto.stackexchange.com/questions/87696/how-can-hashed-value-be-same-in-length-extension-attack)
vdavid avatar
lá cờ mq
@kelalaka đó là một bài đọc thú vị về cách hoạt động của các cuộc tấn công kéo dài, nhưng nó không cho biết liệu RSA-SHA256 có dễ bị tấn công hay không.
Điểm:5
lá cờ my

Nhưng nếu tôi ký một tin nhắn bằng RSA và SHA-256 thì sao? Họ có an toàn không?

Các cuộc tấn công mở rộng chiều dài không phải là một mối quan tâm.

Đây là những gì một cuộc tấn công mở rộng chiều dài cho phép bạn làm: nếu bạn được cung cấp hàm băm $\text{SHA256}(M)$, nhưng bạn không biết tin nhắn gốc $M$ (nhưng bạn biết độ dài của nó), thì bạn có thể tính giá trị của hàm băm $\text{SHA256}(M || X)$ (ở đâu $||$ là nối chuỗi bit và đối với một số giá trị của chuỗi $X$); giá trị của hàm băm này sẽ khác với hàm băm ban đầu.

Vì vậy, tại sao đây không phải là một mối quan tâm:

  • Khi bạn có chữ ký của một tin nhắn đã biết $M$, bạn rõ ràng biết $M$; bạn có thể (nếu bạn muốn) tính toán $\text{SHA256}(M || X)$ cho bất kỳ chuỗi $X$ bạn muốn; bạn không cần một "cuộc tấn công kéo dài"

  • RSA ký giá trị $\text{SHA256}(M)$; giá trị $\text{SHA256}(M || X)$ sẽ khác, và vì vậy nếu bạn thay thế $M$ với $M || X$, chữ ký sẽ không xác minh

vdavid avatar
lá cờ mq
Mối quan tâm của tôi là, kẻ tấn công biết `M` và `SHA256(M)`, vì vậy hắn có thể tính toán `M||X` và `SHA256(M||X)` (ngay cả khi không biết khóa riêng tư). Trong trường hợp này, người nhận `M||X` và chữ ký của nó `SHA256(M||X)` sẽ không biết rằng tin nhắn đã bị giả mạo vì tin nhắn đã thay đổi và chữ ký của nó sẽ khớp với nhau. Chà, ít nhất đó là những gì sẽ xảy ra nếu RSA_sign chỉ đơn giản sử dụng hàm băm thô.Nếu RSA chuyển hàm băm thông qua một kỹ thuật giống như HMAC, tôi đoán chúng ta sẽ an toàn.
poncho avatar
lá cờ my
@vdavid: "vì vậy anh ấy có thể tính toán `M||X` và `SHA256(M||X)` (ngay cả khi không biết khóa riêng tư)." - nó khác với (giả sử) SHA3 như thế nào? Với SHA3, nếu anh ấy biết $M$ và chọn $X$, anh ấy có thể tính `SHA3(M||X)`. Nếu bạn đang nghĩ rằng `SHA256(M||X)` sẽ có cùng giá trị với `SHA256(M)`, thì không, đó không phải là cách nó hoạt động.
fgrieu avatar
lá cờ ng
@vdavid: _"người nhận `M||X` và chữ ký `SHA256(M||X)`â¦"_ của bạn bị lỗi. `SHA256(M||X)` không phải là chữ ký của `M||X`. Đây là một bước trung gian trong việc tính toán chữ ký của `M||X`, như một chức năng của `SHA256(M||X)`, khóa riêng tư, tính ngẫu nhiên tùy chọn. Trong số ba đầu vào của chức năng này, chỉ có khóa riêng là bí mật. Do đó, việc `SHA256(M||X)` dễ tính toán không phải là vấn đề; đó là một yêu cầu chức năng.
vdavid avatar
lá cờ mq
@poncho SHA3 về mặt lý thuyết tốt hơn bởi vì, không giống như SHA-256, tôi nghĩ rằng chúng tôi *không thể* sử dụng `M` và `SHA3(M)` để giả mạo `SHA3(M||X)`
vdavid avatar
lá cờ mq
@fgrieu OK nếu hàm băm là bước trung gian, tôi đoán chữ ký không thể bị giả mạo
fgrieu avatar
lá cờ ng
@vdavid: bạn đúng là SHA3, không giống như SHA-256, không có thuộc tính mở rộng độ dài. Tuy nhiên, bạn không chính xác về những gì ngăn cản. Nó ngăn việc tính toán `SHA3(M||X)` từ `SHA3(M)` _unless_ một người có kiến ​​thức đầy đủ về `M` (trong trường hợp của SHA-256, người ta cần giới hạn thêm ở một số `X` với chính xác bắt đầu đúng, phụ thuộc vào độ dài của `M`). Với kiến ​​thức về `M` và `X`, người ta có thể tính toán `SHA3(M||X)`, cho bất kỳ `M` và `X` nào. Lưu ý: Điều đúng đắn sẽ là chấp nhận câu trả lời của poncho bằng cách nhấp vào dấu tích.
vdavid avatar
lá cờ mq
@fgrieu Bạn nói đúng. Và bởi vì `M` không phải là bí mật trong trường hợp của tôi, tôi tin rằng thuộc tính này không mang lại cho SHA3 lợi thế đáng kể so với SHA-256 (ít nhất, không phải từ quan điểm mở rộng độ dài).
kelalaka avatar
lá cờ in
Trên thực tế, nó phải là $\text{SHA256}(M || padding_1|| X)$ vì hàm băm ban đầu có phần đệm và trong phần mở rộng, SHA-256 sẽ tính toán phần đệm khác.
poncho avatar
lá cờ my
@kelalaka: thực ra, tôi đã bao gồm $padding_1$ trong $X$ - đó là lý do tại sao tôi nói nó dành cho 'some X' - tôi không nghĩ rằng các chi tiết của cuộc tấn công kéo dài thực sự có liên quan - anh ấy không cố gắng thực hiện cuộc tấn công, thay vào đó, anh ta đang hỏi về những hàm ý.
kelalaka avatar
lá cờ in
$M$ là tin nhắn miễn phí cho tất cả mọi người để xác minh chữ ký với nó, Imho, chi tiết này vẫn quan trọng.
vdavid avatar
lá cờ mq
@kelalaka Tôi muốn nói rằng phần đệm có vấn đề nếu phần đệm sai khiến RSA dễ bị giả mạo chữ ký hợp lệ cho một thư giả mạo. Đó có phải là điều tôi nên quan tâm không?
poncho avatar
lá cờ my
@vdavid: *padding* đang được sử dụng theo hai nghĩa khác nhau; một là một số phần đệm được thực hiện như một phần của tính toán SHA256 (đây là chi tiết mà bạn không cần quan tâm, trừ khi bạn đang triển khai SHA256). Cái khác là phần đệm được thực hiện sau hàm băm và ngay trước khi tính toán RSA thô - điều đó rất quan trọng (việc hiểu sai sẽ cho phép ai đó tạo ra các giả mạo), tuy nhiên nó không liên quan gì đến các cuộc tấn công kéo dài.
vdavid avatar
lá cờ mq
@poncho loại giả mạo nào khác có thể xảy ra nếu tôi sử dụng sai phần đệm? Có một phần đệm được đề nghị? Tôi vẫn chưa chọn một trong số PKCS (hoặc bất kỳ PKCS nào khác sẽ tốt hơn cho RSA).

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