Score:3

RSA: นอกเหนือจากอัลกอริทึม เราจะเปลี่ยนสตริงเป็น int และในทางกลับกันได้อย่างไร

ธง cn

สมมติว่าผมต้องการเข้ารหัสไฟล์ ธรรมดา.txt. ขั้นตอนแรกสุดคือเปลี่ยนเนื้อหาของไฟล์นั้น (สมมติว่ามีเฉพาะสตริง "Hello") เป็น int ฉันเห็นรหัสหลามดังนี้:

จาก Crypto.Util.number นำเข้า bytes_to_long
ด้วย open('plain.txt', 'rb') เป็น f:
    ธง = f.read()

m = bytes_to_long (ธง)

อย่างไรก็ตาม ฉันไม่ค่อยเข้าใจว่าเกิดอะไรขึ้น นอกจากนี้ เมื่อข้อความเข้ารหัสถูกถอดรหัสกลับเป็นข้อความธรรมดา แต่ยังอยู่ในรูปแบบตัวเลข ฉันไม่เห็น long_to_bytes หรืออะไรก็ตามเพื่อแปลงตัวเลขเป็นสตริง เข้าใจแล้ว

นำเข้า binascii
binascii.unhexlify('{:x}'.format(m))

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

kelalaka avatar
in flag
ยินดีต้อนรับสู่ Cryptography.SE. นี่เป็นปัญหาการเข้ารหัสและไม่ได้อยู่ในหัวข้อที่นี่ นอกจากนี้คุณกำลังทำผิด เราควรถอดรหัสตรงข้ามกับการเข้ารหัสที่ใช้
fgrieu avatar
ng flag
การแปลงไบต์เป็น int ทั่วไปหนึ่งรายการคือ [OS2IP ใน PKCS#1](https://pkcs1.grieu.fr#page=9)ลดความซับซ้อนของคำอธิบายเล็กน้อย โดยถือว่าไบต์เป็นตัวเลขในฐาน 256 (ซึ่งเป็นจำนวนเต็มตั้งแต่ 0 ถึง 255 เช่นเดียวกับหลักทั่วไปในฐาน 10 คือตั้งแต่ 0 ถึง 9) จากนั้นแปลง $n$ ไบต์ $X_1,X_2â¦X_n $ (จากแรก/ซ้ายไปสุดท้าย/ขวา) ถึงจำนวนเต็ม $\displaystyle\sum_{1â¤iâ¤n} 256^{n-i}X_i$ โปรดสังเกตว่าไม่ค่อยใช้สำหรับ _text_ นอกบริบทของ CTF แต่จะใช้ [การเข้ารหัสแบบไฮบริด](https://en.wikipedia.org/wiki/Hybrid_cryptosystem)แทน
cn flag
การปรับปรุงคำถามคือการลบคำว่า RSA ออกจากคำถาม เนื้อหาจริงไม่มีส่วนเกี่ยวข้องใดๆ และในทางปฏิบัติ แทบไม่เคยใช้ RSA เพื่อเข้ารหัสข้อมูลโดยตรง แต่ใช้การเข้ารหัสแบบไฮบริด
Maarten Bodewes avatar
in flag
ฉันพยายามตอบคำถามว่าปกติแล้วสิ่งนี้ทำงานอย่างไร หากคุณกำลังพูดถึง RSA แบบเรียน โดยทั่วไปแล้ว หนึ่งไบต์หรือมากกว่านั้นจะกลายเป็นจำนวนเต็มระหว่างศูนย์และโมดูลัส จากนั้นจึงใช้การยกกำลังแบบโมดูลาร์ การถอดรหัสหมายถึงการแยกข้อความไซเฟอร์เท็กซ์ออกเป็นบล็อกที่มีขนาดเท่ากับโมดูลัส ถอดรหัสแล้วถอดรหัสกลับ มีรายละเอียดน้อยเกินไปในคำถามที่จะระบุมากกว่านี้
Score:7
ธง in

โดยทั่วไปมีสองขั้นตอนในการนี้:

  1. เข้ารหัสข้อความเป็นไบต์ - โดยทั่วไปต้องมีการเข้ารหัสอักขระเช่นการเข้ารหัส UTF-8 หรือละติน
  2. เข้ารหัสไบต์เป็นจำนวนเต็ม - นี่คือ เป็นส่วนหนึ่งของ การดำเนินการเข้ารหัสใน RSA ตามที่ระบุไว้ใน PKCS#1 และดำเนินการโดยใช้ฟังก์ชันที่เรียกว่า OS2IP

ในกรณีของคุณ เห็นได้ชัดว่าข้อความถูกเข้ารหัสเป็นไบต์แล้ว ไฟล์ประกอบด้วยไบต์และคุณกำลังเปิดไฟล์เป็นไฟล์ไบนารี (b ในแฟล็ก rb)

OS2IP หมายถึงสตริงออคเต็ตเป็นจำนวนเต็มดั้งเดิม สตริงออคเต็ตไม่มีอะไรมากไปกว่าอาร์เรย์ไบต์ หากไบต์อยู่ในรูปแบบที่ถูกต้องแล้ว ก็เป็นเพียงคำถาม ล่าม ไบต์เป็นตัวเลข เนื่องจากคอมพิวเตอร์มักจะจัดการทุกอย่างเป็นเลขฐานสองอยู่ดี

ใน PKCS#1 ที่ใช้ RSA OS2IP นั้นไม่ได้ใช้โดยตรง: ขั้นแรกให้เติมช่องว่างที่เกี่ยวข้องกับความปลอดภัย ซึ่งจะเป็นช่องว่างภายในที่กำหนด PKCS#1 v1.5 หรือช่องว่างภายใน OAEP การเพิ่มช่องว่างภายในหมายความว่าจะมีการเพิ่มโอเวอร์เฮดในจำนวนที่ไม่สำคัญก่อนที่จะใช้ข้อความ จำนวนของข้อความธรรมดานั้นน้อยกว่าโมดูลัส RSA มาก


นี่เป็นเหตุผลหนึ่งที่ทำให้ไฟล์ไม่ได้รับการเข้ารหัสโดยใช้ RSA โดยตรง เหตุผลหลักอื่นๆ คือการเข้ารหัส RSA และโดยเฉพาะอย่างยิ่งการดำเนินการถอดรหัสนั้นไม่มีประสิทธิภาพมากเมื่อเทียบกับเช่น การเข้ารหัสตาม AES เราใช้โปรโตคอลเช่น PGP ซึ่งทำการเข้ารหัสแบบไฮบริดแทน RSA ในโหมดการทำงานที่ปลอดภัยมีค่าโสหุ้ยที่แน่นอนและค่าสูงสุดต่อการดำเนินการ ดังนั้นโดยทั่วไปคีย์สมมาตรจะถูกเข้ารหัสหรือได้รับโดยใช้ RSA แทน คีย์สมมาตรนี้ใช้เพื่อเข้ารหัสข้อมูล การเข้ารหัสแบบสมมาตรเช่น AES ทำงานโดยตรงกับข้อมูลไบนารี ดังนั้นนอกเหนือจากการจัดการ IV และการเติม ข้อมูลสามารถเข้ารหัสได้โดยตรงโดยไม่ต้องแปลง

us flag
เดาว่า OS2IP จะจำกัดความยาวสำหรับการแปลงสตริงออคเต็ตแบบหนึ่งต่อหนึ่ง ดังนั้นมาจากสตรีมไบต์ในขั้นตอนที่ 2 นำหน้า OS2IP ด้วยการแยกส่วนเป็นแพ็กเก็ต ซึ่งขนาดแพ็กเก็ตขึ้นอยู่กับความยาวของคีย์และโหมดการเติม
Maarten Bodewes avatar
in flag
ไม่ โดยทั่วไป OS2IP จะไม่นำหน้าด้วยการแยกส่วนเป็นแพ็กเก็ต สำหรับ RSA คุณไม่ได้ใช้โหมด CBC หรือแม้แต่โหมด ECB คุณเพียงแค่เข้ารหัสข้อความที่มีขนาดเดียว ฉันได้เพิ่มรายละเอียดบางอย่างในคำตอบ
us flag
เข้าใจ. นั่นเป็นเหตุผลที่ห้องสมุดบางแห่งเช่น JCE ไม่ได้สะท้อนถึงขนาดสูงสุดที่คุณสามารถส่งผ่านไปยังวิธีการเข้ารหัสได้ เนื่องจากคุณไม่จำเป็นต้องใช้
Maarten Bodewes avatar
in flag
Meh JCA จะไม่ส่งคืนข้อมูลเมตาทั้งหมด ฉันไม่แน่ใจว่าทำไม มันง่ายพอที่จะคำนวณค่าโสหุ้ยเมื่อเทียบกับโมดูลัส เช่น เพียง 11 ไบต์ (สำหรับการรักษาความปลอดภัยขั้นต่ำ) สำหรับ PKCSv1 1.5 และ [มันแตกต่างกันสำหรับ OAEP](https://crypto.stackexchange.com/a/42100/1172)
us flag
อ๊ะ เห็นสองความคิดเห็นของฉันถูกเซ็นเซอร์ ใช้สิ่งนี้เป็นการยืนยัน ใช่ วิธีที่ง่ายที่สุดในการค้นหาเพย์โหลดสูงสุดคือการใส่ข้อความความยาวโมดูลัสและแยกวิเคราะห์ข้อยกเว้นที่เกิดขึ้น อย่างถูกต้องตาม PKCSv1/OS2IP
cn flag
ฉันจะไม่แนะนำการเติม PKCS#1 v1.5 เนื่องจากการโจมตีของ Bleichenbacher หลายครั้ง (การโจมตีของ ROBOT เป็นการโจมตีล่าสุดที่ฉันทราบ) เวอร์ชัน 1.5 เปิดตัวและเลิกใช้งาน (โดยเวอร์ชัน 2.0) ในปีเดียวกันทั้งหมดในปี 1998 เนื่องจากช่องว่างภายในนี้เสียหายในปีเดียวกันนั้น แม้ว่าจะยังใช้งานได้จริง ช่องว่างภายในนี้ควรมาพร้อมกับคำเตือนเช่น "ห้ามใช้สิ่งนี้ ไม่ใช่สำหรับการเข้ารหัส การแลกเปลี่ยนคีย์ หรือลายเซ็น"
us flag
@tylo OS2IP ไม่สัมผัสช่องว่างภายใน เกี่ยวกับ Bleichenbacher ให้พิจารณาแนวคิดที่ว่าช่องว่างภายในปลอมบางส่วนที่มีค่าคงที่ในเอาต์พุตถูกตั้งค่าโดยเจตนา
cn flag
@SamGinrich ฉันไม่ได้หมายความว่ามันเป็น คำตอบระบุว่า ตามข้อกำหนดเฉพาะของ PKCS#1 จะมีการใช้ช่องว่างภายใน V1.5 และในความคิดของฉัน สิ่งนี้ควรมาพร้อมกับคำเตือนเช่น "อย่าใช้สิ่งนี้" เสมอ แม้ว่าจะมีกรณีการใช้งานเฉพาะบางกรณี การเสริม V1.5 ก็ใช้ได้ - ซึ่งจะต้องได้รับการพิสูจน์ ซึ่งต้องอาศัยความรู้เชิงลึกเกี่ยวกับหัวข้อนี้ และมีโอกาสเกิดข้อผิดพลาดจากมนุษย์ได้ คำแนะนำที่มีความเสี่ยงโดยรวมน้อยที่สุดคืออย่าใช้ / อนุญาตช่องว่างภายในนั้นเลย
us flag
@tylo เห็นด้วยกับคำแนะนำของคุณ มีชุมชนที่เกี่ยวข้องกับความปลอดภัย ซึ่งควรให้ความสำคัญด้านนี้เป็นอันดับ 1 ที่นี่ใน Cryptography ฉันคาดว่าจะมีการอภิปรายเกี่ยวกับแนวคิดที่ไม่สมบูรณ์ของอัลกอริทึมและปราศจากการไตร่ตรองที่ดี แม้ว่าฉันจะยอมรับในรายละเอียดของอัลกอริทึมบางรูปแบบ แต่ฉันไม่คาดหวังให้คุณรับคำแนะนำใดๆ จากฉัน โดยไม่ส่งคำอธิบายที่ตรวจสอบย้อนกลับได้หรืออย่างน้อยก็มีการอ้างอิงถึงสิ่งนั้น
Maarten Bodewes avatar
in flag
คุณไม่สามารถใช้โหมดเข้ารหัสบล็อกอื่นที่ไม่ใช่ ECB กับ RSA *ด้วยการเติมที่ปลอดภัย* - อย่างน้อยที่สุดก็ไม่ได้ทำการเปลี่ยนแปลง และมันจะนำไปสู่ค่าใช้จ่ายอย่างอื่นเสมอ เห็นได้ชัดว่ายังมีประสิทธิภาพน้อยกว่ามาก โดยเฉพาะระหว่างการถอดรหัส การขาดประสิทธิภาพและการขยายข้อความเป็นข้อเสียเชิงวัตถุประสงค์มากกว่าเรื่องการเมืองหากคุณถามฉัน
us flag
ฉันคิดว่าผู้ใช้ส่วนใหญ่อยู่ที่นี่เพื่อช่วยเหลือผู้คน และฉันก็เป็นหนึ่งในนั้น

โพสต์คำตอบ

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