หน้าที่ระบุไว้พูดถึงการเข้ารหัส AES-128-CBC ด้วย Encrypt-then-MAC Mac ด้วย HMAC
เดอะ ภาระผูกพันของผู้ใช้ คือการจัดเตรียมข้อความ คีย์สุ่มแบบ 256 บิต และการประทับเวลา
Fernet แบ่งคีย์ 256 บิตออกเป็นสองส่วนที่มีขนาดเท่ากันขั้นแรก ส่วนหนึ่งใช้ในการเข้ารหัสข้อความด้วย AES-128-CBC จากนั้นจึงใช้แท็กการรับรองความถูกต้อง $t$
$$ t = \operatorname{HMAC-SHA-256}( เวอร์ชัน â เวลาประทับ â IV â Ciphertext)$$ คำนวณด้วยส่วนอื่นของคีย์
จะเกิดอะไรขึ้นหากฉันใช้กุญแจซ้ำกับ Fernet
การเข้ารหัสของ ข้อความมากเกินไป ด้วยคีย์เดียวกันอาจทำให้เกิดการชนกันของ IV ภายใต้คีย์เดียวกัน
สิ่งนี้สามารถรั่วไหลได้ว่าจุดเริ่มต้นของข้อความเหมือนกัน หากคุณแก้ไขไฟล์และไม่ได้เข้ารหัสด้วย IV อื่น จะทำให้คำนำหน้าไฟล์เดียวกันรั่วไหล
หนึ่งต้องเข้ารหัส $2^{64}$ ข้อความที่จะมีการชนกันของ IV ภายใต้คีย์เดียวกัน 50% นั้นสูงเกินไปสำหรับข้อได้เปรียบของผู้โจมตี เราควรพิจารณาความเป็นไปได้ที่ต่ำกว่า
การเข้ารหัสของ บล็อกข้อมูลมากเกินไป
สามารถทำให้เกิดการชนกันของไซเฟอร์เท็กซ์ที่ใช้ สวีท32 จู่โจม. สามารถรับ X-หรือบล็อกข้อความได้หาก $c_i = c_j$ กับ $i \neq j$ $$m_i \oplus m_j = c_{1-1} \oplus c_{j-1}.$$
อีกครั้ง 50% นั้นสูงเกินไปสำหรับข้อได้เปรียบของผู้โจมตี เราควรพิจารณาความน่าจะเป็นที่ต่ำกว่า
ปัญหาทั้งสองนี้ขึ้นอยู่กับจำนวนไฟล์ที่คุณมีและขนาดไฟล์ที่มี
ไม่ปลอดภัยโดยสิ้นเชิง การใช้คีย์และ IV ที่แตกต่างกันต่อไฟล์จะดีกว่า ที่จริงแล้ว Fernet's API เปิดใช้งานสิ่งนี้
แนวทางอื่นของฉัน หากการใช้คีย์ซ้ำไม่ปลอดภัย คือการเข้ารหัสไฟล์ดังต่อไปนี้:
- เลือกเกลือแบบสุ่ม
- ใช้ KDF เพื่อคำนวณแต่ละคีย์จากคีย์ที่ใช้ร่วมกันและเกลือ
- เข้ารหัสไฟล์ด้วยคีย์ส่วนตัว และเพิ่มเกลือ
แต่ดูเหมือนว่าจะผิด (salt ใช้สำหรับรหัสผ่านเท่านั้น ไม่ใช่กับข้อมูลสุ่ม...) และที่สำคัญกว่านั้น กำหนดให้ฉันใช้วิทยาการเข้ารหัสลับระดับต่ำซึ่งไม่สามารถพิสูจน์ได้ว่าเป็นคนงี่เง่าอย่างชัดเจน
นี่คือสิ่งที่เราทำ มีคีย์และ IV ที่แตกต่างกันต่อไฟล์. คุณสามารถใช้ได้ HKDF แม้เพียง ขยาย ส่วนที่จะได้รับคีย์และ IVs
พูดตรงๆฉันถามเสมอว่าทำไมบางคนถึงต้องการสิ่งที่ซับซ้อน ในขณะที่คอนเทนเนอร์เข้ารหัสของเวราคริปต์จัดการเรื่องนี้ได้ดีกว่าผู้เชี่ยวชาญเสียอีกไม่จำเป็นต้องคำนึงถึงการเข้ารหัสเลย เพียงแค่เรียนรู้ที่จะมีรหัสผ่านที่ดีเช่นพิมพ์ dicewire และคุณทำเสร็จแล้ว