บีบอัดแล้วเข้ารหัสหรือในทางกลับกัน


88

ฉันกำลังเขียนระบบ VPN ที่เข้ารหัส (AES256) ทราฟฟิกข้ามเน็ต (ทำไมเขียนของฉันเองเมื่อมีคนอื่น ๆ 1,000,001 คนออกมาแล้วล่ะทีนี้ฉันเป็นคนพิเศษสำหรับงานเฉพาะที่คนอื่นไม่มี

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

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

ดังนั้นความคิดของฉันคือฉันควรบีบอัดแพ็กเก็ตก่อนทำการเข้ารหัสเนื่องจากแพ็กเก็ตที่ไม่เข้ารหัสจะบีบอัดได้ดีกว่าที่เข้ารหัส หรือวิธีอื่น ๆ

ฉันอาจจะใช้ zlib สำหรับการบีบอัด

อ่านเพิ่มเติมในบล็อกผู้ใช้ซูเปอร์


4
กำลังเขียนเป็น "โปรแกรม" หรือไม่ น่าจะเหมาะกว่าสำหรับ Stack Overflow แล้ว
Suma

4
ถ้าฉันถูกถามเกี่ยวกับการเขียนโปรแกรมของมันใช่ แต่ฉันไม่ได้ นี่คือการบีบอัดทั่วไปจากนั้นเข้ารหัสหรือเข้ารหัสแล้วบีบอัดคำถามที่สามารถนำไปใช้กับการทำงานกับไฟล์ธรรมดาได้หากคุณต้องการ ด้านการเขียนโปรแกรมเป็นเพียงบริบทสำหรับสาเหตุที่ฉันถามคำถาม
Majenko


อาจเป็นคำถามที่ดีที่สุดสำหรับsecurity.stackexchange.com
Jeff Ferland

1
พวกเขารู้เกี่ยวกับการบีบอัดที่นั่นหรือไม่?
Majenko

คำตอบ:


176

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

บีบอัดก่อนที่คุณจะเข้ารหัส


41
สำคัญกว่า: การบีบอัดเพิ่มเอนโทรปี การเพิ่มเอนโทรปีเป็นสิ่งที่ดีสำหรับการเข้ารหัสของคุณ (ยากที่จะทำลายด้วยการโจมตีที่รู้ทัน)
Olli

8
นอกจากนี้การเข้ารหัสทรัพยากรต้นทุนการเข้ารหัสไฟล์ที่มีขนาดเล็กลงจะใช้ทรัพยากรน้อยลง ดังนั้นบีบอัดก่อนเข้ารหัส
GAThrawn

9
@Olli - ไม่จำเป็นว่ารูปแบบการบีบอัดจะเพิ่มข้อความที่รู้จัก ในกรณีที่เลวร้ายที่สุดลองจินตนาการว่ามันใส่ส่วนหัวที่มีขนาด 512 ไบต์ที่ด้านหน้าของข้อมูลและคุณกำลังใช้การเข้ารหัสโหมดบล็อก
Martin Beckett

26
ฉันไม่แน่ใจว่าทำไมความคิดเห็นของ @ Olli ถึงได้ถูกยกระดับเนื่องจากไม่ถูกต้อง ไม่เพียงมีความสำคัญน้อยกว่าสำหรับการเข้ารหัสแบบครึ่งเดียวเท่านั้น แต่ก็ไม่ควรมีความสำคัญเลย นั่นคือความแข็งแกร่งของการเข้ารหัสควรไม่เกี่ยวข้องกับเอนโทรปีของข้อความอย่างสมบูรณ์
BlueRaja - Danny Pflughoeft

8
หากคุณบีบอัดเลยสามารถทำได้จริง ๆ ก่อนที่จะเข้ารหัสข้อความ แต่โปรดจำไว้ว่านี่อาจรั่วไหลข้อมูลเกี่ยวกับ 'การบีบอัด' ของข้อความต้นฉบับดังนั้นคุณจะต้องพิจารณาว่ามีผลกระทบต่อด้านนี้หรือไม่ ช่อง พิจารณาไฟล์ที่มีขนาดคงที่ซึ่งเป็น 0 หรือข้อความทั้งหมด ไฟล์ 0 ทั้งหมดจะทำให้เพย์โหลดเล็กลงภายใต้รูปแบบการบีบอัดที่สมเหตุสมผล ไม่น่าจะมีปัญหาในกรณีการใช้งานนี้โดยเฉพาะว่า
Edward KMETT

22

บีบอัดก่อนการเข้ารหัส ข้อมูลที่บีบอัดอาจแตกต่างกันมากสำหรับการเปลี่ยนแปลงเล็กน้อยในแหล่งข้อมูลดังนั้นจึงเป็นการยากที่จะทำการเข้ารหัสแบบแยกส่วน

และถ้ามิสเตอร์ Alpha ชี้ให้เห็นถ้าคุณเข้ารหัสก่อนผลลัพธ์จะบีบอัดได้ยากมาก


12
ถูกต้อง แต่ถูกโพสต์เมื่อ 2 ชั่วโมงก่อนที่คุณจะโพสต์ ... เอนโทรปี
Konerak

3

แม้ว่ามันจะขึ้นอยู่กับกรณีการใช้งานเฉพาะผมก็จะแนะนำ Encrypt-then-Compress มิฉะนั้นผู้โจมตีอาจรั่วไหลข้อมูลจากจำนวนบล็อกที่เข้ารหัส

เราถือว่าผู้ใช้ส่งข้อความไปยังเซิร์ฟเวอร์และผู้โจมตีที่มีความเป็นไปได้ที่จะเพิ่มข้อความต่อท้ายข้อความผู้ใช้ก่อนที่จะส่ง (ผ่าน javascript เช่น) ผู้ใช้ต้องการส่งข้อมูลที่เหมาะสมไปยังเซิร์ฟเวอร์และผู้โจมตีต้องการรับข้อมูลนี้ เพื่อให้เขาสามารถลองต่อท้ายข้อความต่าง ๆ กับข้อมูลที่ผู้ใช้ส่งไปยังเซิร์ฟเวอร์ จากนั้นผู้ใช้บีบอัดข้อความของเขาและข้อความต่อท้ายจากผู้โจมตี เราถือว่าการบีบอัด DEFLATE LZ77 ดังนั้นฟังก์ชั่นจะแทนที่ข้อมูลเดียวกันด้วยตัวชี้ไปที่การปรากฏตัวครั้งแรก ดังนั้นหากผู้โจมตีสามารถสร้างข้อความธรรมดาที่น่าเบื่อได้รูฟังก์ชั่นการบีบอัดจะลดขนาดของข้อความธรรมดาให้เป็นขนาดดั้งเดิมและตัวชี้ และหลังจากการเข้ารหัสผู้โจมตีสามารถนับจำนวนของบล็อกตัวเลขดังนั้นเขาจึงสามารถดูได้ว่าข้อมูลต่อท้ายของเขาเหมือนกับข้อมูลที่ผู้ใช้ส่งไปยังเซิร์ฟเวอร์หรือไม่ แม้ว่ากรณีนี้ฟังดูจะสร้างขึ้นเล็กน้อย แต่เป็นปัญหาด้านความปลอดภัยที่ร้ายแรงใน TLS แนวคิดนี้ถูกใช้โดยการโจมตีที่เรียกว่า CRIME เพื่อรั่วไหลคุกกี้ในการเชื่อมต่อ TLS เพื่อขโมยเซสชัน

แหล่งที่มา: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf


2

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


1

ควรทำการบีบอัดข้อมูลก่อนทำการเข้ารหัส ผู้ใช้ไม่ต้องการใช้เวลารอการถ่ายโอนข้อมูล แต่เขา / เธอต้องการให้ทำทันทีโดยไม่ต้องเสียเวลา


1

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


สิ่งนี้ดูเหมือนจะเป็นการทำซ้ำของคำตอบที่ยอมรับและสอง คำตอบแต่ละข้อควรมีส่วนร่วมในการแก้ปัญหาใหม่อย่างมีนัยสำคัญ
fixer1234

0

การบีบอัดช่วยลดข้อมูลเอนโทรปี การบีบอัดสูงสุดทำให้เอนโทรปีต่ำสุด สำหรับข้อมูลที่เข้ารหัสอย่างสมบูรณ์แบบ (เสียงรบกวน) สูงสุดและเอนโทรปีต่ำสุดเหมือนกัน


2
เดี๋ยวก่อนคุณไม่มีที่ถอยหลัง ฉันคิดว่าเอนโทรปีเพิ่มขึ้นเมื่อความซ้ำซ้อนลดลง ดังนั้นการบีบอัดควรเพิ่มเอนโทรปี
Zan Lynx

Nop, entropy น้อย = รูปแบบมากขึ้น การสุ่มมีเอนโทรปีมากที่สุด
AbiusX

1
แต่มันเป็นข้อมูลข่าวสารดังนั้นมันจึงเป็นเรื่องของความหมาย การสุ่มไม่ได้มีความหมายอะไรเลยดังนั้นมันจึงไม่มีผล ประโยคภาษาอังกฤษสามารถมีการเปลี่ยนแปลงตัวอักษรและยังหมายถึงสิ่งเดียวกันดังนั้นจึงมีเอนโทรปีต่ำ ประโยคภาษาอังกฤษที่ถูกบีบอัดอาจไม่สามารถอ่านได้หากมีการเปลี่ยนแปลงเพียงเล็กน้อย หรืออย่างนั้นฉันก็คิดว่า
Zan Lynx

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

1
@AbiusX: ถูกต้อง รูปแบบ และรูปแบบที่น้อยลง ซึ่งหมายความว่าการบีบอัดที่แทนที่รูปแบบที่ซ้ำกันทั้งหมดด้วยการคัดลอกหนึ่งครั้งจะเพิ่มเอนโทรปี
Zan Lynx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.