ความช้าของการคูณเป็นปัญหาใหญ่ที่การคูณไม่พบการใช้งานอย่างแพร่หลายในอัลกอริทึมการเข้ารหัสที่รวดเร็วและน้ำหนักเบาใช่หรือไม่ อาจเป็นปัญหาบนอุปกรณ์ IOT หรือชิป RFID แต่เมื่อพูดถึงคอมพิวเตอร์และสมาร์ทโฟน อัลกอริทึมการเข้ารหัสที่อิงตามการคูณจะไม่เป็นปัญหาใช่ไหม
ส่วนหนึ่งของปัญหาดูเหมือนจะเป็นคำจำกัดความของคำว่า 'lightweight' และแพลตฟอร์มที่ตั้งใจให้เป็นเป้าหมาย ซีพียูบนสมาร์ทโฟนมีความสามารถจริง ฉันจะไม่อธิบายลักษณะแพลตฟอร์มเหล่านั้น (หรือคอมพิวเตอร์แล็ปท็อป) ว่าจำเป็นต้อง 'เบา' โดยทั่วไป crypto ที่มีน้ำหนักเบาได้รับการออกแบบโดยคำนึงถึงไมโครคอนโทรลเลอร์ โดยทั่วไปแล้วไมโครคอนโทรลเลอร์เหล่านั้นไม่มีคำสั่งการคูณแบบ 64x64 บิตในตัว
ตอนนี้ การคูณแบบโมดูลาร์ (สำหรับโมดูลัสยกกำลัง 2) สามารถดำเนินการได้โดยชุดของการเปลี่ยนแปลงและการเพิ่มเงื่อนไข ทำได้แน่นอน แต่มีราคาแพงกว่าการดำเนินการเพิ่มเติม
ปัญหาอื่น ๆ ดูเหมือนจะเป็นการคูณแบบแยกส่วนไม่ได้ยอดเยี่ยมอย่างที่คุณคาดหวัง สำหรับการสนทนานี้ ฉันจะจำกัดการสนทนาของฉันไว้ที่การคูณโมดูโล a ยกกำลัง 2 (หลายโมดูโล a ไพรม์ไม่มีปัญหาเหล่านี้ พวกเขามีปัญหาเกี่ยวกับช่วงที่ไม่เป็นยกกำลัง 2)
การคูณแบบแยกส่วนไม่มีการเผยแพร่ 'คำที่ถูกต้อง' ตัวอย่างเช่น การพลิกบิตสูงของหนึ่งในอินพุตจะส่งผลต่อบิตสูงของเอาต์พุตเท่านั้น บิตอื่น ๆ จะไม่ได้รับผลกระทบ แน่นอนว่าการเพิ่มโมดูลาร์ก็มีปัญหาเช่นเดียวกัน แต่ก็ยังถูกกว่า
การคูณแบบแยกส่วนมีความแตกต่างอย่างมาก ความแข็งแกร่งขึ้นอยู่กับตัวตน $(-x)*y = -(x*y)$ (และการทำงานของโมดูลัสไม่ได้ทำให้สิ่งนี้แตกสลาย)
ประเด็นทั้งสองนี้สามารถออกแบบได้อย่างเหมาะสม อย่างไรก็ตาม ข้อเท็จจริงที่คุณต้องทำเช่นนั้นทำให้ความน่าสนใจลดลง นอกจากนี้ยังทำให้เกิดคำถาม: ทำไมไม่ใช้การคูณ $GF(2^k)$ แทน? หากเรากำลังดำเนินการแบบ shift/add การปรับใช้การคูณแบบ Galois แบบ double/xor นั้นไม่ได้มีราคาแพงกว่ามากนัก และเป็นการหลีกเลี่ยงสองประเด็นข้างต้น...