Score:0

ลายเซ็น RSA-SHA256 มีแนวโน้มที่จะถูกโจมตีด้วยส่วนขยายความยาวหรือไม่

ธง mq

ฉันต้องเซ็นชื่อข้อความโดยใช้คีย์ส่วนตัวและยืนยันข้อความด้วยคีย์สาธารณะ ในขณะที่ต้องแน่ใจว่าข้อความไม่ได้ถูกแก้ไข

ฉันรู้ว่า SHA-256 นั้นมีแนวโน้มที่จะถูกโจมตีโดยขยายความยาว

ฉันรู้ด้วยว่าสิ่งต่าง ๆ เช่น HMAC ได้รับการออกแบบมาโดยเฉพาะเพื่อหลีกเลี่ยงการโจมตีดังกล่าว

แต่ถ้าฉันเซ็นข้อความด้วย RSA และ SHA-256 ล่ะ พวกเขาปลอดภัยหรือไม่?

ฉันจำเป็นต้องลงนามใน RSA/SHA3 เพื่อรับความคุ้มครองหรือไม่ หรืออาจตัดเวอร์ชันของ SHA2 (คือ SHA-384 และ SHA-512/256) ซึ่งถูกกล่าวหาว่า ไม่ ไวต่อการโจมตีแบบขยายความยาว?

HMAC จะเป็นแนวทางที่ดีกว่าสำหรับปัญหานี้หรือไม่

ฉันกำลังพิจารณาใช้ RSA ซึ่งน่าจะมีชื่อเสียงที่สุดในบรรดาการเข้ารหัสแบบอสมมาตร อย่าลังเลที่จะชี้ให้ฉันเห็นอย่างอื่นหากมีตัวเลือกที่ดีกว่า ฉันต้องการบางสิ่งที่รองรับโดย OpenSSL และโมดูลการเข้ารหัสลับ Node.js (ซึ่งเท่าที่ฉันทราบก็ขึ้นอยู่กับ OpenSSL ด้วย)

ปล. ฉันค่อนข้างใหม่สำหรับชุมชน crypto ดังนั้นฉันหวังว่าคำพูดของฉันจะสมเหตุสมผล

--ภาคผนวก--

นี่คือข้อกังวลของฉันเกี่ยวกับ RSA-SHA256

สมมติว่าข้อความคือ $M$ และแฮชของมันคือ $SHA256(M)$.

ผู้โจมตีสามารถใช้มันเพื่อคำนวณ $M||X$ และ $SHA256(M||X)$แม้จะไม่รู้คีย์ส่วนตัวก็ตามในกรณีนี้ผู้รับของ $M||X$ และลายเซ็น $SHA256(M||X)$ จะเชื่อว่าข้อความนั้นถูกต้องเนื่องจากข้อความและลายเซ็นนั้นตรงกัน

อย่างน้อยนั่นคือสิ่งที่เกิดขึ้นหาก RSA_sign ใช้แฮชดิบ หาก RSA ส่งแฮชผ่านเทคนิคที่คล้ายกับ HMAC หรืออัลกอริธึมใดๆ ที่ป้องกันผู้โจมตีจากการปลอมแปลงลายเซ็น ฉันเดาว่าเราปลอดภัย

kelalaka avatar
in flag
การหลอกลวงที่เป็นไปได้ของ: [Hashed Value จะเหมือนกันในการโจมตีส่วนขยายความยาวได้อย่างไร](https://crypto.stackexchange.com/q/87696/18298)
AleksanderCH avatar
nl flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [HMAC จำเป็นสำหรับ MAC ที่ใช้ SHA-3 หรือไม่](https://crypto.stackexchange.com/questions/17735/is-hmac-needed-for-a-sha-3-based-mac)
vdavid avatar
mq flag
@AleksanderCH ขอบคุณสำหรับลิงค์ มันตอบคำถามได้บางส่วน แสดงว่า MAC ที่ใช้ SHA3 จะปลอดภัยหากไม่มี HMAC ซึ่งเป็นหนึ่งในสมมติฐานของฉัน แต่ไม่ได้บอกว่าการลงชื่อ/การยืนยัน RSA-SHA256 ปลอดภัยหรือไม่ ซึ่งเป็นคำถามหลักของฉัน
kelalaka avatar
in flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [ค่าแฮชจะเหมือนกันในการโจมตีส่วนขยายความยาวได้อย่างไร](https://crypto.stackexchange.com/questions/87696/how-can-hashed-value-be-same-in-length-extension-attack)
vdavid avatar
mq flag
@kelalaka นั่นเป็นการอ่านที่น่าสนใจเกี่ยวกับวิธีการทำงานของการโจมตีแบบขยายความยาว แต่มันไม่ได้บอกว่า RSA-SHA256 นั้นไวต่อพวกมันหรือไม่
Score:5
ธง my

แต่ถ้าฉันเซ็นข้อความด้วย RSA และ SHA-256 ล่ะ พวกเขาปลอดภัยหรือไม่?

การโจมตีด้วยความยาวไม่ได้เป็นปัญหา

นี่คือสิ่งที่การโจมตีแบบขยายความยาวช่วยให้คุณทำได้: หากคุณได้รับแฮช $\text{SHA256}(M)$แต่คุณไม่ทราบข้อความต้นฉบับ $M$ (แต่คุณรู้ความยาวของมัน) จากนั้นคุณสามารถคำนวณค่าของแฮชได้ $\text{SHA256}(M || X)$ (ที่ไหน $||$ เป็นการต่อข้อมูลบิตสตริง และสำหรับบางค่าของสตริง $X$); ค่าของแฮชนี้จะแตกต่างจากแฮชดั้งเดิม

เหตุใดจึงไม่น่ากังวล:

  • เมื่อคุณมีลายเซ็นของข้อความที่รู้จัก $M$เห็นได้ชัดว่าคุณรู้ $M$; คุณสามารถ (ถ้าคุณต้องการ) คำนวณ $\text{SHA256}(M || X)$ สำหรับสตริงใดๆ $X$ คุณต้องการ; คุณไม่จำเป็นต้องใช้ "การโจมตีแบบขยายความยาว"

  • RSA ลงนามค่า $\text{SHA256}(M)$; มูลค่า $\text{SHA256}(M || X)$ จะแตกต่างออกไป ดังนั้น หากคุณเปลี่ยน $M$ กับ $M || X$ลายเซ็นจะไม่ตรวจสอบ

vdavid avatar
mq flag
ข้อกังวลของฉันคือ ผู้โจมตีรู้จัก `M` และ `SHA256(M)` ดังนั้นเขาจึงอาจคำนวณ `M||X` และ `SHA256(M||X)` (แม้ว่าจะไม่รู้รหัสส่วนตัวก็ตาม) ในกรณีนี้ ผู้รับ `M||X` และลายเซ็น `SHA256(M||X)` จะไม่ทราบว่าข้อความถูกแก้ไข เนื่องจากข้อความที่แก้ไขและลายเซ็นจะตรงกัน อย่างน้อยนั่นคือสิ่งที่จะเกิดขึ้นหาก RSA_sign ใช้แฮชดิบถ้า RSA ส่งแฮชผ่านเทคนิคแบบ HMAC ฉันเดาว่าเราปลอดภัย
poncho avatar
my flag
@vdavid: "ดังนั้นเขาจึงสามารถคำนวณ `M||X` และ `SHA256(M||X)` (แม้จะไม่รู้คีย์ส่วนตัวก็ตาม) - แตกต่างจาก (พูด) SHA3 อย่างไร? ด้วย SHA3 ถ้าเขารู้ $M$ และเลือก $X$ เขาสามารถคำนวณ `SHA3(M||X)` ได้ หากคุณคิดว่า `SHA256(M||X)` จะเป็นค่าเดียวกับ `SHA256(M)` ก็ไม่ นั่นไม่ใช่วิธีการทำงาน
fgrieu avatar
ng flag
@vdavid: _"ผู้รับ `M||X` และลายเซ็น `SHA256(M||X)`â¦"_ ของคุณมีข้อผิดพลาด `SHA256(M||X)` ไม่ใช่ลายเซ็นของ `M||X` เป็นขั้นตอนตัวกลางในการคำนวณลายเซ็นของ `M||X` ซึ่งเป็นฟังก์ชันของ `SHA256(M||X)`, คีย์ส่วนตัว, การสุ่มทางเลือก ในสามอินพุตของฟังก์ชันนี้ เฉพาะคีย์ส่วนตัวเท่านั้นที่เป็นความลับ ดังนั้นจึงไม่ใช่ปัญหาที่ `SHA256(M||X)` จะคำนวณได้ง่าย เป็นข้อกำหนดด้านการทำงาน
vdavid avatar
mq flag
@poncho SHA3 ดีกว่าในทางทฤษฎีเพราะไม่เหมือนกับ SHA-256 ฉันคิดว่าเรา *ไม่สามารถ* ใช้ `M` และ `SHA3(M)` เพื่อสร้าง `SHA3(M||X)`
vdavid avatar
mq flag
@fgrieu ตกลงถ้าแฮชเป็นขั้นตอนกลาง ฉันเดาว่าลายเซ็นไม่สามารถแก้ไขได้
fgrieu avatar
ng flag
@vdavid: คุณถูกต้องที่ SHA3 ซึ่งแตกต่างจาก SHA-256 ไม่มีคุณสมบัติการขยายความยาว อย่างไรก็ตามคุณไม่ถูกต้องในสิ่งที่ป้องกัน มันป้องกันการคำนวณ `SHA3(M||X)` จาก `SHA3(M)` _unless_ ที่มีความรู้ครบถ้วนเกี่ยวกับ `M` (ในกรณีของ SHA-256 จำเป็นต้องจำกัด `X` บางตัวด้วยความแม่นยำ เริ่มต้นที่ถูกต้อง ขึ้นอยู่กับความยาวของ `M`) ด้วยความรู้เกี่ยวกับ `M` และ `X` เราสามารถคำนวณ `SHA3(M||X)` สำหรับ `M` และ `X` ใดๆ หมายเหตุ: สิ่งที่ถูกต้องคือการยอมรับคำตอบของเสื้อปอนโชโดยคลิกที่เครื่องหมายถูก
vdavid avatar
mq flag
@fgrieu คุณถูกต้อง และเนื่องจาก `M` ไม่ใช่ความลับในกรณีของฉัน ฉันเชื่อว่าคุณสมบัตินี้ไม่ได้ทำให้ SHA3 มีข้อได้เปรียบที่สำคัญเหนือ SHA-256 (อย่างน้อยก็ไม่ใช่จากมุมมองของการขยายความยาว)
kelalaka avatar
in flag
ที่จริงแล้วควรเป็น $\text{SHA256}(M || padding_1|| X)$ เนื่องจากแฮชเดิมมีการเสริมและระหว่างส่วนขยาย SHA-256 จะคำนวณการเติมอื่น
poncho avatar
my flag
@kelalaka: จริง ๆ แล้วฉันได้รวม $padding_1$ ไว้ใน $X$ - นั่นคือเหตุผลที่ฉันบอกว่ามันเป็นสำหรับ 'some X' - ฉันไม่คิดว่ารายละเอียดของการโจมตีแบบขยายความยาวนั้นเกี่ยวข้องจริง ๆ - เขาไม่ได้พยายาม ทำการโจมตีแทน เขากำลังถามถึงผลที่ตามมา
kelalaka avatar
in flag
$M$ เป็นข้อความที่ให้ทุกคนตรวจสอบลายเซ็นได้ฟรี อิมโฮ รายละเอียดนี้ยังคงสำคัญอยู่
vdavid avatar
mq flag
@kelalaka ฉันจะบอกว่าช่องว่างภายในมีความสำคัญหากช่องว่างภายในผิดทำให้ RSA เสี่ยงต่อการปลอมแปลงลายเซ็นที่ถูกต้องสำหรับข้อความที่ถูกดัดแปลง เป็นสิ่งที่ฉันควรกังวลหรือไม่?
poncho avatar
my flag
@vdavid: *padding* กำลังถูกใช้ในสองความรู้สึกที่แตกต่างกัน หนึ่งคือการเติมบางส่วนที่ทำเป็นส่วนหนึ่งของการคำนวณ SHA256 (ซึ่งเป็นรายละเอียดที่คุณไม่จำเป็นต้องกังวล เว้นแต่ว่าคุณกำลังใช้ SHA256) อีกวิธีหนึ่งคือการเติมข้อมูลหลังจากแฮชและก่อนการคำนวณ RSA แบบดิบ ซึ่งเป็นสิ่งสำคัญ (การเข้าใจผิดอาจทำให้ใครบางคนสร้างการปลอมแปลงได้) อย่างไรก็ตาม มันไม่มีส่วนเกี่ยวข้องกับการโจมตีแบบขยายความยาว
vdavid avatar
mq flag
@poncho การปลอมแปลงประเภทอื่นอาจเกิดขึ้นได้หากฉันใช้ช่องว่างภายในผิด มีเบาะรองนั่งแนะนำไหม? ฉันยังไม่ได้เลือกอย่างใดอย่างหนึ่งระหว่าง PKCS (หรืออย่างอื่นที่ดีกว่าสำหรับ RSA)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา