Score:1

OPENSSL: คำสั่ง enc และคำสั่ง enc ของ cms แตกต่างกันอย่างไร

ธง cn

ฉันพบสิ่งแปลกปลอมขณะตรวจสอบข้อมูลภายในซองจดหมาย

ฉันมีข้อความธรรมดา "plaintextplant" - ความยาวคือ $15$ (รวม lf(0x0A))`. ฉันสร้างไฟล์ .ber ที่เข้ารหัสโดย AES256 และเข้ารหัส DER ผ่าน:

openssl cms - เข้ารหัส - ในธรรมดา -aes256 -recip certificate.pem -outform DER -out enveloped-data.ber

จากนั้นฉันตรวจสอบข้อมูลที่เข้ารหัสผ่าน berReader ฉันคิดว่าข้อมูลที่เข้ารหัสมีความยาว 16 ไบต์เนื่องจากความยาวของข้อความธรรมดาคือ $15$. อย่างไรก็ตามความยาวของผลลัพธ์คือ $32$ ไบต์

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉันจึงพิมพ์:

opensl enc -aes-256-cbc -in ธรรมดา -out enc -k 123 เพื่อรับข้อมูลที่เข้ารหัส

จากนั้นฉันตรวจสอบความยาวของข้อมูลที่เข้ารหัสคือ $16$ ไบต์ในข้อมูลเอาต์พุต

ฉันให้ภาพผลลัพธ์แก่คุณ:

ป้อนคำอธิบายรูปภาพที่นี่

เหตุใดขนาดของข้อมูลที่เข้ารหัส cms จึงเป็น 32 ไบต์

แถมยังแนบรูปด้วยว่าความยาวของข้อความธรรมดาคือ 13 ไบต์ ขนาดข้อมูลที่เข้ารหัสคือ 16 ไบต์ ป้อนคำอธิบายรูปภาพที่นี่

Score:1
ธง in

AES เป็นรหัสลับและต้องการรหัสที่เหมาะสม โหมดการทำงาน เช่น CBC, CTR เป็นต้น

ในขณะที่โหมดการสตรีม เช่น CFB, OFB และ CTR ไม่ต้องการการเติม การดำเนินการโหมด CBC และ ECB นั้นต้องการการเติม

ในโหมด CBC การเติมตามปกติคือ พีเคซีเอส#7 การขยายความ. สำหรับการเข้ารหัส CBC ข้อความจะถูกแบ่งออกเป็นบล็อก 128 บิตและช่องว่างภายในจะถูกนำไปใช้ในบล็อกสุดท้าย อาจมีได้สองกรณี

  1. ข้อความหายไปบางไบต์ ในกรณีนี้ให้ $n$ คือจำนวนไบต์ที่ขาดหายไป จากนั้นจึงเป็นจำนวน $n$ จะเพิ่ม $n$ ครั้งเป็นไบต์

    [ไบต์ข้อความ ][01] // หายไป 1 ไบต์
    [ไบต์ข้อความ ][0202] // หายไป 2 ไบต์ 
    [ไบต์ข้อความ][030303] // ขาดหายไป 3 ไบต์
    ....
    [MB][0F0F0F...0F0F0F0F] // หายไป 15 ไบต์
    
  2. ข้อความมีหลายขนาด 16 ไบต์ หมายความว่าบล็อกสุดท้ายเต็ม ในกรณีนี้ เพื่อแยกแยะกรณีนี้จากกรณีแรก เราได้เพิ่มบล็อกใหม่ที่เต็มไปด้วย 10ส. ดังนั้นเราจึงสามารถย้อนกลับของช่องว่างภายในได้ เราสามารถดูเหตุผลได้ว่าถ้าบล็อกสุดท้ายมีอะไร 01 เป็นไบต์สุดท้าย มันเป็นช่องว่างภายในหรือไม่? ดังนั้นการเพิ่ม 01 ขจัดความคลุมเครือนี้

ข้อมูลข้างต้นสามารถอธิบายได้ว่าเหตุใดข้อความจึงกลายเป็นทวีคูณของ 16 ไบต์หลังจากการเข้ารหัส CBC ที่เหมาะสม

ในกรณีของคำถาม 15 ไบต์สามารถกลายเป็น 16 ไบต์ได้โดยการเพิ่ม 01 เป็นไบต์สุดท้าย แล้ว 16 ไบต์ที่เหลือล่ะ?

โหมดการทำงาน CBC ต้องการ 16 ไบต์ สุ่ม และ คาดการณ์ไม่ได้ เวกเตอร์การเริ่มต้น (IV) เพื่อให้ได้ความปลอดภัย Ind-CPA

IV เป็นหนึ่งในข้อกำหนดสำหรับการถอดรหัสบล็อกแรกนอกเหนือจากคีย์ ( คีย์ IV และ $C_0$ ต้องระบุ);

$$P_0 = \operatorname{AES-DEC}(คีย์,C_0) \oplus IV$$

ดังนั้นจึงต้องเพิ่ม / โอน IV ด้วย ในทางปฏิบัติทั่วไป IV จะถูกต่อท้ายด้วยไซเฟอร์เท็กซ์


จะเกิดอะไรขึ้นถ้า IV ไม่ได้ถูกจัดเก็บ/ถ่ายโอน? คุณจะสูญเสียเฉพาะบล็อกแรกของข้อความ ส่วนที่เหลือสามารถถอดรหัสได้อย่างถูกต้องเนื่องจาก;

$$P_i = \operatorname{AES-DEC}(key,C_i) \oplus C_{i-1}, \quad i \geq 1$$


ซ.ม

เดอะ CMS ต้องใช้

ต้องมีช่องพารามิเตอร์ AlgorithmIdentifier และ ช่องพารามิเตอร์ต้องมี AES-IV:

  AES-IV ::= สตริง OCTET (ขนาด (16))

IV ถูกเก็บไว้ใน ตัวระบุอัลกอริทึม สนามไม่ได้อยู่ใน เนื้อหาที่เข้ารหัส เนื่องจาก เดฟ เขียนว่ามันคือ -ไบนารี่ ปัญหา.


  • ตัวเลือก OpenSSL -k

    IV และคีย์ได้มาจากวิธีการรับคีย์โดยใช้รหัสผ่านของผู้ใช้และเกลือสุ่ม 8 ไบต์ IV ไม่ได้ต่อท้าย

    OpenSSL แสดงผลคำวิเศษก่อน เค็ม__ จากนั้นเกลือ 8 ไบต์ตามด้วยไซเฟอร์เท็กซ์ลงในไฟล์ ตอนนี้ขนาดเอาต์พุตคือขนาดเวทย์มนตร์ของคุณ + ขนาดเกลือ + ขนาดไซเฟอร์เท็กซ์

dave_thompson_085 avatar
cn flag
ฉันไม่คิดว่าการยิงเป็นเรื่องชอบธรรม แต่คุณคิดผิด ตามที่ระบุไว้ในสองบรรทัดแรกของคำพูดของคุณ IV อยู่ในส่วนพารามิเตอร์ของ AlgorithmIdentifier ไม่ได้ต่อท้าย (หรือต่อท้าย) กับข้อความเข้ารหัสใน encryptedContent
kelalaka avatar
in flag
ฉันเข้าใจแล้ว ฉันได้อัปเดตเล็กน้อยเพื่อลบส่วนนำที่ไม่ถูกต้องออก ขอบคุณ.
kelalaka avatar
in flag
ยิงฉันถ้าฉันผิดเกี่ยวกับ CMS ..
cn flag
ขอบคุณ ฉันได้เรียนรู้เกี่ยวกับฟิลด์ AES-IV ใน CMS
kelalaka avatar
in flag
FYI เมื่อคุณได้รับ 15 ชื่อเสียง คุณสามารถโหวตได้เช่นกัน ใน SO โหวตหากคำตอบเป็นประโยชน์กับคุณ ยอมรับหากแก้ปัญหาได้
Score:1
ธง cn

openssl cms -เข้ารหัส/เซ็น ตามค่าเริ่มต้นจะใช้การกำหนดรูปแบบมาตรฐาน SMIME แม้ว่ารูปแบบเอาต์พุตจะไม่ใช่ SMIME สิ่งนี้จะเปลี่ยน LF เป็น CRLF ทำให้ข้อมูลมีขนาด 16 ไบต์, เสริมเป็น 32 หากต้องการดูลักษณะนี้

 openssl cms -decrypt -in yourcmsder -inform der -recip cert -inkey privkey | od -tx1

เพื่อป้องกันสิ่งนี้ ให้เพิ่ม -ไบนารี่ ในการเข้ารหัส ดูหน้าคนในระบบของคุณหรือ บนเว็บ.

ดังที่เกลากะกล่าวไว้ว่า เข้ารหัส -k (และนอกจากนี้ยังมี -kfile -ผ่าน หรือไม่มีตัวเลือกที่แจ้ง) ทำการเข้ารหัสด้วยรหัสผ่านที่ได้รับคีย์และ IV จากรหัสผ่านและเกลือ (ซึ่งโดยปกติจะเป็นแบบสุ่ม แต่สามารถระบุได้ด้วย -ส หรือระงับด้วย -จมูก). คุณจะได้ผลลัพธ์ที่ใกล้เคียงกับข้อมูลมากขึ้น cms - เข้ารหัสแต่ไม่มีการทำให้เป็นมาตรฐานด้วยสิ่งที่ต้องการ

opensl enc -aes-cbc-256 -in ธรรมดา -K (hexupto64) -iv (hexupto32) -out เข้ารหัส
# หมายเหตุตัวพิมพ์ใหญ่ K ไม่ใช่ตัวพิมพ์เล็ก
# คีย์ iv จะบุนวมหากจำเป็น ดังนั้นเพียง 00 สำหรับแต่ละอันก็ใช้ได้สำหรับการทดสอบ

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

โพสต์คำตอบ

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