Block-cipher ใช้การผกผันตัวเอง ($f(ฉ(x)) = x $) การดำเนินการที่จะนำไปใช้กับข้อความธรรมดาและมักจะมีค่าคงที่บางอย่างซึ่งสามารถอิงตามคีย์ได้
เพื่อให้ได้รับความปลอดภัย การดำเนินการดังกล่าวซึ่งตีความอินพุตในลักษณะต่างๆ กันจะสอดคล้องกัน
กระบวนการนี้ทำซ้ำหลายรอบด้วยคีย์ที่แตกต่างกัน
ในกรณีที่เหมาะสมที่สุด อินพุตแบบสุ่มจะอยู่ภายในวงจรปิด (หากใช้รหัสบล็อกซ้ำแล้วซ้ำอีก) โดยมีขนาดรอบแบบสุ่ม (สม่ำเสมอ คีย์สุ่มที่กำหนด)
จากการทดสอบรอบ ๆ ฉันสังเกตเห็นว่าสิ่งนี้สามารถเกิดขึ้นได้ด้วยการดำเนินการง่าย ๆ ของ XOR, Bit-Rotation และการเพิ่ม (เรียกว่า ARX)
เช่น: สำหรับหนึ่งรอบที่มีการป้อนข้อมูล $m$:
$$
ม = XOR(ม., R_i) \
ม = หมุนบิต(m,5) \
ม = ม + K_i
$$
$R_i, K_i$ เป็นแป้นกลมสำหรับกลม $i$.
XOR เพียงอย่างเดียวไม่ปลอดภัยเนื่องจากการดำเนินการนั้นเป็นเพียงบิตเดียวโดยไม่มีผลกระทบซึ่งกันและกัน
เพิ่มการหมุนบิตเพื่อเพิ่มผลกระทบของบิตเดียวไปยังบิตอื่น ๆ ตัวมันเองยังไม่ปลอดภัยเพราะมันมีผลกระทบเพียงบิตเดียวเท่านั้น
การบวกถูกเพิ่มเป็นการตีความอินพุตประเภทที่ 2 (เป็นตัวเลขแทนบิต) ที่นี่บิตสามารถกระทบกัน
ด้วยวิธีนี้ฉันจึงมีการกระจายแบบสม่ำเสมอที่ดี (แต่ไม่สมบูรณ์แบบ) ของความยาวรอบที่แตกต่างกัน (ให้คีย์สุ่มและอินพุต)
คำถามคือต้องสมัครกี่รอบถึงจะปลอดภัย? ต้องมีขนาดบิตรวมเป็นอย่างน้อย เพื่อให้ทุกบิตสามารถเข้าถึงตำแหน่งอื่นๆ ได้ทุกตำแหน่งเนื่องจากการหมุนบิต
นี่คือบางส่วนที่เกี่ยวข้อง เกลียว สำหรับเออีเอส
แต่ในฐานะที่เป็นเมตริกทั่วไป (สำหรับบล็อกรหัสที่กำหนดเอง) ความปลอดภัยสามารถวัดได้ด้วยผลกระทบของการเปลี่ยนแปลงบิตในอินพุตไปยังทุกบิตของเอาต์พุตหรือไม่
ในกรณีที่ดีที่สุด การเปลี่ยนแปลงบิตที่เป็นไปได้ของทุกอินพุตที่เป็นไปได้ควรนำไปสู่บิตที่แตกต่างกัน 50% ที่เอาต์พุต (โดยที่แต่ละบิตจะแตกต่างกันในจำนวนที่เท่ากัน)
จำนวนรอบสามารถเพิ่มได้จนกว่าจะถึงระดับความปลอดภัยที่เหมาะสม