Score:2

ความช่วยเหลือเกี่ยวกับคำถาม RSA CTF

ธง cn

ฉันกำลังพยายามแก้ปัญหา CTF ที่เกี่ยวข้องกับการเข้ารหัส RSA

ฉันสามารถเรียกใช้ไบนารีของความท้าทายที่จะอ่านแฟล็กจากไฟล์ แฟล็กจะตรงกับ RegEx ต่อไปนี้:

AB1234C\{[0-9a-f]{32}\}\n

ดังนั้นค่าสถานะทั้งหมดคือ 42 ไบต์รวมถึงการขึ้นบรรทัดใหม่

จากนั้นแฟล็กจะถูกเสริมด้วยการเติมแบบสุ่มรวมเป็น 128 ไบต์

ฉันสามารถเลือกเลขชี้กำลังสาธารณะ e ตราบใดที่ e>1 ไบนารีจะสร้างโมดูลัส 2048 บิตแบบสุ่มโดยใช้ฟังก์ชันไพธอน Crypto.PublicKey.RSA.generate(บิต=2048)

ไบนารีจะพิมพ์โมดูลัสและข้อความเข้ารหัสของแฟล็กบุนวมที่เข้ารหัส

ฉันสามารถเรียกใช้ไบนารี่ได้หลายครั้ง โมดูลัสและการเติมจะแตกต่างกันระหว่างการรันแต่ละครั้ง

ฉันคิดว่ามันอาจเกี่ยวข้องกับการโจมตีของ Hastad แต่ดูเหมือนว่าจะใช้ได้กับการขยายเชิงเส้นเท่านั้น และการโจมตีด้วยแป้นสั้นของ Coppersmith จะทำงานก็ต่อเมื่อคุณมีข้อความสองข้อความที่มีการเติมแบบสุ่ม แต่เข้ารหัสด้วยโมดูลัสเดียวกัน ซึ่งฉันไม่มีที่นี่เนื่องจาก ความจริงที่ว่าโมดูลัสที่แตกต่างกันถูกสร้างขึ้นทุกครั้งที่ฉันเรียกใช้ไบนารี

ฉันยังเป็นมือใหม่เมื่อพูดถึง crypto ดังนั้นฉันอาจเข้าใจผิดเกี่ยวกับการโจมตีเหล่านั้นและอาจพลาดบางสิ่งที่ชัดเจน

ฉันเชื่อว่าช่องโหว่นี้อาจเกี่ยวข้องกับขนาดของช่องว่างภายใน เนื่องจากข้อความที่บุนวมมีขนาดเพียงครึ่งหนึ่งของความยาวของโมดูลัส

ฉันไม่ต้องการวิธีแก้ปัญหา แต่เพียงแค่สะกิดไปในทิศทางที่ถูกต้อง ขอบคุณ.

jdkleuver avatar
cn flag
คำถามนี้ดูเหมือนเกี่ยวข้องhttps://crypto.stackexchange.com/questions/80087/short-padding-known-prefix-rsa-attack แต่คำตอบสำหรับคำถามนั้นดูเหมือนจะไม่ช่วยอะไรเพราะมันอาศัยข้อความเข้ารหัสสองตัวที่สร้างด้วยโมดูลัสเดียวกัน
fgrieu avatar
ng flag
เนื่องจากเป็น CTF คำถามจึงอยู่ในหัวข้อที่ล้ำเส้น และบางทีอาจได้รับคำตอบจากคำใบ้ ที่กล่าวว่า: ไม่มีวิธีที่ระบุไว้ในการใช้โมดูลัสซ้ำและการเติมแบบสุ่ม 22 ไบต์ ฉันไม่สามารถคิดวิธีแก้ปัญหาได้ ฉันจะดูโค้ดที่ทำช่องว่างภายในเพื่อดูว่าเป็นไปตามที่โฆษณาไว้หรือไม่ และที่รหัสทำการสร้างเพื่อดูว่าใช้ $e$ ที่ระบุหรือไม่ (การแตกรหัสในคำถามไม่ได้)
jdkleuver avatar
cn flag
ฉันไม่สามารถแชร์ซอร์สโค้ดได้เนื่องจากเป็น CTF ส่วนตัว แต่ฉันสามารถยืนยันได้ว่าเมื่อโมดูลัสถูกสร้างขึ้น จะไม่ส่งค่า e เป็นอาร์กิวเมนต์ แต่จะส่งผ่านอาร์กิวเมนต์บิตเท่านั้น
Score:2
ธง my

นี่คือ CTF ดังนั้นฉันแค่ให้คำใบ้

ฉันสามารถเลือกเลขชี้กำลังสาธารณะ e ตราบใดที่ e>1

เราเลือกได้ไหม $e$ ที่ทำให้ง่ายจากแบบสอบถามเดียว? พิจารณา:

... รวมเป็น 128 ไบต์

ไบนารีจะสร้างโมดูลัส 2048 บิตแบบสุ่ม

fgrieu avatar
ng flag
แต่นั่นไม่ใช่ RSA! :-) และถ้า `Crypto.PublicKey.RSA.generate` ถูกส่งผ่านโดยใช้ $e$ (ตามที่ควร) ก็ไม่ควรปล่อยให้สิ่งนี้เกิดขึ้น คุ้มค่าแก่การตรวจสอบอย่างแน่นอน
jdkleuver avatar
cn flag
สามารถยืนยันได้ว่า `Crypto.PublicKey.RSA.generate` ไม่ผ่านการใช้ e ดังนั้นฉันเดาว่าคุณกำลังเข้าสู่บางสิ่งที่นั่น อาร์กิวเมนต์เดียวคือ 'บิต' ดังนั้นค่า e ที่สร้างโดย Python จึงถูกละเว้น ใช้เฉพาะ n เท่านั้น
jdkleuver avatar
cn flag
สิ่งที่คุณบอกเป็นนัยด้วยคำตอบนี้เป็นวิธีแก้ปัญหาที่ตั้งใจไว้จากผู้เขียน CTF
Score:0
ธง cn

ดังนั้นหลังจากอ่านความคิดเห็นของ @fgrieu ฉันจึงดูแผนการเติมอีกครั้งและตระหนักว่าจริง ๆ แล้วมันไม่ได้สุ่มอย่างที่ฉันคิด ฉันเพิ่งแก้ไขโดยใช้การโจมตีของ Hastad ดังนั้นในความเป็นจริงแล้วมันเป็นจุดอ่อนของช่องว่างภายใน ฉันขอโทษสำหรับคำถามที่ระบุไม่ถูกต้อง

โพสต์คำตอบ

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