Score:1

WinZip AES แตกต่างจาก AES ปกติอย่างไร

ธง co

ฉันกำลังพยายามเขียนฟังก์ชันใน dart ที่สามารถถอดรหัสไฟล์ภายใน zip ที่เข้ารหัสโดยใช้มาตรฐาน WinZip AES-256 ฉันพบเอกสารที่นี่: https://www.winzip.com/th/support/aes-encryption/. การใช้ 7-Zip ทำให้สามารถสร้างไฟล์ตัวอย่างได้ตามมาตรฐาน ฉันสามารถแยกคีย์เข้ารหัสและข้อความเข้ารหัสตามข้อมูลจำเพาะ:

encryptionKey: 9f2df21ad65ff7f33b817c5686042f1dc038f0290cbe0189f2ee2bb610bf033d
ข้อความเข้ารหัส: f88a3bd439b4aef91ebaa9
คาดว่า: 68656c6c6f20776f726c64 (สวัสดีชาวโลก)
เอาต์พุต: c5e7de168b7dd6f3b157d4

เครื่องมือหรือแพ็คเกจใดๆ ที่ฉันใช้ไม่สามารถถอดรหัสเป็นข้อความที่ถูกต้องได้ ดังนั้นฉันจึงดูที่ไลบรารี nodejs ที่ใช้การใช้งานแบบพิเศษสำหรับการถอดรหัส ซึ่งดูเหมือนจะไม่เท่ากับ AES มาตรฐานทุกประการ เรียกว่าเป็นการใช้งานเฉพาะของ Gladmann อย่างที่คุณเห็นที่นี่: https://github.com/gildas-lormeau/zip.js/blob/master/lib/core/codecs/sjcl.js#L590

ฉันได้ดาวน์โหลดแพ็คเกจ nodejs นี้แล้วและสามารถยืนยันได้ว่าข้อมูลอินพุตของฉันถูกต้อง ดังนั้นคำถามของฉันคือเหตุใดจึงมีการใช้งาน AES หลายครั้ง และอะไรคือแนวทางที่ดีที่สุดในการนำสิ่งนี้ไปใช้ในโผ?

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

น่าเสียดายที่เอกสารบนอินเทอร์เน็ตเกี่ยวกับการแยก WinZip AES นั้นหายาก ผู้นำอื่น ๆ ที่ฉันสามารถหาได้คือการนำไปใช้จาก Brian Gladmann ด้วยตัวเอง: https://github.com/BrianGladman/aes แต่มันขาดเอกสารและเกินความรู้ของฉันเล็กน้อย

ขอบคุณสำหรับความช่วยเหลือ :)

Swashbuckler avatar
mc flag
อีกสิ่งหนึ่งที่ต้องพิจารณา 7-Zip เวอร์ชันเก่าใช้เพียง 8 ไบต์ IV หากคุณใช้เวอร์ชันเก่าที่อาจมีปัญหา โปรดดู https://threadreaderapp.com/thread/1087848040583626753.html
Score:1
ธง in

ฉันจะถือว่าคุณได้ดำเนินการ PBKDF2 แล้วโดยมีการวนซ้ำคงที่ 1,000 ครั้งที่กำหนดไว้ (ซึ่งก็คือ เอ่อ ในระดับต่ำสุดของการรักษาความปลอดภัย) และการตรวจสอบคีย์สองไบต์ได้รับการตรวจสอบแล้ว

AES เองก็ไม่ต่างกัน และดูเหมือนว่า Winzip ก็ไม่ได้ใช้งานอะไรเป็นพิเศษ สิ่งเดียวที่ค่อนข้างแปลกคือเคาน์เตอร์อยู่ในลิตเติ้ลเอนเดียน นี่คือรหัส C ทั้งหมด ดังนั้นความเอนเดียนจึงถูกกำหนดโดยแพลตฟอร์ม และส่วนใหญ่หมายถึงเอนเดียนน้อย

ไม่มีสิ่งใดห้ามการใช้ตัวนับเอนเดียนเล็กน้อยสำหรับโหมด CTR แต่ใน 99% ของกรณี จะเป็นเอนเดียนขนาดใหญ่ คุณอาจต้องติดตั้ง CTR-LE ด้วยตัวเองบนรหัส AES (หรือ AES-ECB ซึ่งเหมือนกัน)

โปรดทราบว่ามาตรฐาน ZIP - เอ่อ - กำหนด ส่วนหัวที่เข้ารหัสดังนั้นจุดเริ่มต้นของข้อความธรรมดาที่ถอดรหัสแล้วจะไม่ใช่เนื้อหาของไฟล์

ในทำนองเดียวกัน แท็กการรับรองความถูกต้องเป็นเพียง HMAC-SHA1-80 บนข้อความเข้ารหัส HMAC-SHA1-80 เป็นเพียง HMAC-SHA-1 ซึ่งใช้เพียง 80 บิต กล่าวคือ ครึ่งหนึ่งของขนาดเอาต์พุตของ HMAC-SHA-1 โดยปกติจะเป็นบิตซ้ายสุด

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

Maarten Bodewes avatar
in flag
ความจริงที่ว่า WinZip 11 ขึ้นไปจัดเก็บ CRC32 ไว้บนข้อความธรรมดาสำหรับไฟล์ใด ๆ > 20 ไบต์เพียงแค่ใช้เค้ก "เนื่องจากไฟล์ขนาดเล็กมากบางไฟล์ CRC สามารถใช้เพื่อกำหนดเนื้อหาที่แน่นอนของไฟล์ได้" ไม่ คุณ *งี่เง่า* คุณสามารถระบุได้อย่างมั่นใจว่าไฟล์มีข้อมูลเฉพาะ โดยไม่คำนึงถึงขนาด หากคุณต้องการเข้ารหัสอะไรก็ตาม **อย่าใช้ WinZip เพื่อสิ่งนั้น**

โพสต์คำตอบ

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