Score:0

การใช้ RSA ไม่ทำงานกับค่าขนาดใหญ่สำหรับข้อความธรรมดา

ธง it

ในขณะที่ใช้การเข้ารหัส/ถอดรหัส RSA (โดยใช้ python) ข้อความธรรมดาไม่ตรงกับข้อความเข้ารหัสที่ถอดรหัสสำหรับข้อความธรรมดาที่มีค่ามาก ทำงานได้ดีสำหรับค่าที่น้อยกว่าสำหรับข้อความธรรมดา (ค่าตัวเลข)

อินพุต: p=53 q=59 e=3 ข้อความธรรมดา = 1,000 (คีย์ส่วนตัวคำนวณเป็น 2011)

ที่นี่การถอดรหัสให้ 1000 เป็นข้อความธรรมดาซึ่งถูกต้อง ทีนี้ ถ้า

อินพุต: p=53 q=59 e=3 ข้อความธรรมดา = 10,000 (คีย์ส่วนตัวคำนวณเป็น 2011)

ที่นี่ หลังจากการถอดรหัส ข้อความธรรมดาที่คำนวณได้คือ 619 (ซึ่งควรจะเป็น 10000)

รหัสเดียวกันอยู่ที่นี่

    def เข้ารหัส (ข้อความธรรมดา):
            ciphertext = (ข้อความธรรมดา**publicKey) % (self.n)
            ส่งคืนข้อความรหัส
   def ถอดรหัส (ciphertext):
            ข้อความธรรมดา = (ciphertext**privateKey) % (self.n)
            กลับข้อความธรรมดา

เมื่อพิจารณาว่าจะใช้อัลกอริทึมในการเข้ารหัส/ถอดรหัสข้อความตัวอักษรและตัวเลข ซึ่งจะทำให้ได้ค่าตัวเลขจำนวนมาก ต้องแก้ไขอะไรบ้างหรือฉันขาดอะไรไป

ป.ล.: การตรวจสอบค่าของข้อความธรรมดาหลายค่า อาจเกิดขึ้นเนื่องจาก n=3127 และข้อความธรรมดาใด ๆ ที่มากกว่า 3127 จะไม่สร้างข้อความธรรมดาดั้งเดิมเมื่อถอดรหัส ฉันอาจจะผิด.

วิธีทำให้มันใช้งานได้กับข้อความธรรมดาที่มากกว่า , ที่นี่ 3127?

kelalaka avatar
in flag
RSA เป็นการเปลี่ยนแปลงประตูกล! คุณคาดหวังว่าจะได้ข้อความธรรมดาที่มีขนาดใหญ่กว่าขนาดโมดูลัสที่เข้ารหัสและถอดรหัสอย่างถูกต้องได้อย่างไร ข้อความ $m$ ต้องเป็น $m
kelalaka avatar
in flag
อาจซ้ำกับ [ฉันควรจัดการกับขีดจำกัดขนาดข้อความในการเข้ารหัส RSA อย่างไร](https://crypto.stackexchange.com/q/71092/18298)
kelalaka avatar
in flag
$10,000 \pmod{53\cdot 51} = 619$ ตามที่คาดไว้!
Maarten Bodewes avatar
in flag
ฉันได้ตอบคำถามนี้มากกว่าหนึ่งครั้งแล้ว แต่ [คำตอบนี้](https://crypto.stackexchange.com/a/50183/1172) ได้ระบุวิธีแก้ไขแล้วเพื่อวัตถุประสงค์ในการฝึกฝน: แยกข้อความของคุณและเข้ารหัสแต่ละข้อความ แยกชิ้น. ระวังว่าคุณควรจะสามารถแยกความแตกต่างของไซเฟอร์เท็กซ์ได้ (เช่น หากคุณแยกระหว่าง 5 ตามด้วย 23 และ 52 ตามด้วย 3 ไม่ได้ แสดงว่าคุณกำลังมีปัญหา)
SAI Peregrinus avatar
si flag
วิธีที่ดีกว่าคือใช้การเข้ารหัสแบบไฮบริด เลือกหมายเลขสุ่มระหว่าง 0 ถึง N เรียกหมายเลขนั้น X ใช้ KDF เพื่อรับคีย์จาก X เข้ารหัสโดยใช้ AEAD เช่น ChaCha20-Poly1305 เข้ารหัส X ด้วย RSA ส่ง X ที่เข้ารหัสและข้อความเข้ารหัสของข้อความ (และ IV & แท็ก) ผู้รับสามารถถอดรหัส X ใช้ KDF เดียวกัน ตรวจสอบแท็ก และถอดรหัสข้อความ สิ่งนี้ซับซ้อนน้อยกว่าการใช้ RSA-OAEP และปฏิบัติต่อ RSA เหมือนรหัสบล็อก
Maarten Bodewes avatar
in flag
@SAIPeregrinus โดยทั่วไปใช้ไม่ได้กับการมอบหมายแบบฝึกหัดด้านบน แน่นอน คุณสามารถสร้างคีย์แล้วใช้แพดแบบหลายเวลาหรือรหัส Caesar / Vigenere หรือสิ่งที่คล้ายกัน - คีย์เหล่านี้ต้องการเพียงขนาดคีย์ที่เล็ก และความจริงที่ว่าคีย์เหล่านี้ไม่ปลอดภัยอย่างสมบูรณ์ไม่ใช่ปัญหาสำหรับการออกกำลังกาย
SAI Peregrinus avatar
si flag
ใช่ มันไม่ใช่สิ่งที่การออกกำลังกายต้องการ แต่ก็ปลอดภัยเช่นกัน ในที่ที่การออกกำลังกายไม่ต้องการฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงวิธี "โลกแห่งความจริง" ในการใช้ RSA สำหรับการเข้ารหัส (แม้ว่า RSA-OAEP จะเป็นเรื่องปกติสำหรับแผนแบบไฮบริด) แม้ว่าจะไม่ใช่คำตอบแบบฝึกหัดก็ตาม
kelalaka avatar
in flag
ยังไม่บังคับ -1
ayush7ad6 avatar
it flag
หลังจากอ่านคำแนะนำของคุณ @MaartenBodewes แล้ว ฉันก็แยกข้อความธรรมดาที่เป็นตัวเลขออกเป็นตัวเลขและเข้ารหัส และเมื่อถอดรหัสแล้ว ก็คลับตัวเลขที่ถอดรหัสแล้ว นอกจากนี้ ขอขอบคุณสำหรับคำตอบของคุณ SAI และ Maarten

โพสต์คำตอบ

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