Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Feistel Cipher ในความปลอดภัยข้อมูลคืออะไร?

Feistel Cipher (ไซเฟอร์ไฟสเทล)

Feistel cipher เป็นแนวทางทางเข้ารหัสลับที่ใช้ในการสร้างอัลกอริทึมและโครงสร้างแบบบล็อกไซเฟอร์ (Block cipher) เครือข่ายไฟสเทล (Feistel network) นำไปใช้ลำดับของไซเฟอร์ซ้ำ (Iterative ciphers) บนบล็อกข้อมูล และมักออกแบบสำหรับบล็อกไซเฟอร์ที่เข้ารหัสปริมาณข้อมูลมาก

เครือข่ายไฟสเทลทำงานโดยการแบ่งบล็อกข้อมูลออกเป็น 2 ส่วนเท่ากัน และใช้การเข้ารหัสในหลายรอบ (Rounds) แต่ละรอบนำการเรียงเปลี่ยน (Permutation) และลำดับที่ได้จากฟังก์ชันหลักหรือคีย์ไปใช้ จำนวนรอบเปลี่ยนแปลงสำหรับแต่ละไซเฟอร์ที่นำเครือข่ายไฟสเทลไปใช้

Feistel cipher เป็นไซเฟอร์หลายรอบที่แบ่งสถานะส่วนตัวปัจจุบันของไซเฟอร์ออกเป็น 2 ส่วน และทำงาน רקบนส่วนเดียวในแต่ละรอบของการเข้ารหัสหรือถอดรหัส

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

แก่นของวิธีคือการสร้างบล็อกไซเฟอร์ด้วยความยาวคีย์ k บิต และความยาวบล็อก n บิต ทำให้มีการแปลงที่เป็นไปได้ทั้งหมด 2^k แทนที่จะเป็น 2^n! การแปลงที่มีอยู่กับบล็อกไซเฟอร์ที่สมบูรณ์แบบ

ไฟสเทลเสนอการใช้ไซเฟอร์ที่สลับระหว่างการแทนที่ (Substitution) และการเรียงเปลี่ยน (Permutation) โดยวิธีเหล่านี้ถูกกำหนดดังนี้:

  • Substitution (การแทนที่) - องค์ประกอบหรือกลุ่มองค์ประกอบของ Plaintext แต่ละตัวถูกแทนที่โดยองค์ประกอบหรือกลุ่มองค์ประกอบของ Ciphertext ที่สอดคล้องกันอย่างเฉพาะเจาะจง
  • Permutation (การเรียงเปลี่ยน) - ลำดับขององค์ประกอบ Plaintext ถูกแทนที่โดยการเรียงเปลี่ยนของลำดับนั้น ไม่มีองค์ประกอบใดถูกเพิ่ม ลบ หรือแทนที่ในลำดับ แต่ลำดับที่องค์ประกอบปรากฏในลำดับถูกเปลี่ยน

Feistel ciphers มีการจัดตารางคีย์ (Key schedule) ที่ทำหน้าที่เป็นอินพุทสำหรับแต่ละรอบของไซเฟอร์ มี 2 ตัวเลือกสำหรับตารางคีย์:

  • ตัวเลือกแรก: คีย์สำหรับแต่ละรอบของไซเฟอร์ (หรือ "Round key") อยู่ในคีย์ลับที่แบ่งปันโดยสองฝ่าย (ทำให้ได้คีย์ลับร่วมที่สูง)
  • ตัวเลือกที่สอง: คีย์ลับร่วมถูกใช้เป็นอินพุทสำหรับฟังก์ชัน "Key expansion" ซึ่งดำเนินการบน Round key ก่อนหน้าหรือสถานะภายในปัจจุบันของอัลกอริทึมสร้างคีย์ เพื่อสร้าง Round key ถัดไป

ฟังก์ชัน K แปลงคีย์ลับต้นฉบับเป็น Round keys สำหรับแต่ละรอบของการเข้ารหัส ฟังก์ชันนี้ควรเลือกเพื่อรองรับพื้นที่คีย์ (Key space) ของฟังก์ชันการเข้ารหัส

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