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

อัลกอริธึม Blowfish ทำงานอย่างไร?


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

  • การสร้างคีย์ย่อย − กระบวนการนี้แปลงคีย์ที่มีความยาวไม่เกิน 448 บิตเป็นคีย์ย่อยที่เพิ่ม 4168 บิต

  • การเข้ารหัสข้อมูล − ในกระบวนการเข้ารหัสข้อมูล จะวนซ้ำ 16 ครั้งของเครือข่าย แต่ละรอบประกอบด้วยการเรียงสับเปลี่ยนที่ขึ้นกับคีย์ และการแทนที่ที่ขึ้นกับคีย์และข้อมูล การดำเนินการในอัลกอริทึมคือ XOR หรือเพิ่มเติมในคำแบบ 32 บิต การดำเนินการเพิ่มเติมเพียงอย่างเดียวคือการค้นหาข้อมูลอาร์เรย์ที่จัดทำดัชนีสี่รายการต่อรอบ

ให้เราพูดถึงสองส่วนนี้ดังนี้ −

  • การสร้างคีย์ย่อย − อัลกอริธึมการเข้ารหัสปักเป้าใช้คีย์ย่อยจำนวนมาก คีย์เหล่านี้กำลังสร้างก่อนการเข้ารหัสข้อมูลหรือการถอดรหัส

    p-array ประกอบด้วยคีย์ย่อย 18 บิต 32 บิต -

    P1,P2,………….,P18.

    S-Box แบบ 32 บิตมีสี่กล่อง แต่ละรายการมี 256 รายการ -

    S1,0, S1,1,……….. S1,255

    S2,0, S2,1,……….. S2,255

    S3,0, S3,1,……….. S3,255

    S4,0, S4,1,…………... S4,255

    ขั้นตอนในการสร้างคีย์ย่อย

    • เริ่มต้นก่อน นั่นคือ P-array และดังนั้น S-box สี่กล่อง ตามลำดับ ด้วยสตริงคงที่และสตริงนี้ยังมีเลขฐานสิบหกของ π ด้วย

      P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344 เป็นต้น

    • XOR P1 พร้อมคีย์ 32 บิตแรก XOR P2 พร้อมวินาทีซึ่งเป็นคีย์ 32 บิต ฯลฯ สำหรับบิตของคีย์ทั้งหมด (อาจสูงถึง P14) วนซ้ำขั้นตอนผ่านคีย์บิตจนกว่า P-array ทั้งหมดจะได้รับ XORed ด้วยคีย์บิต (สำหรับแต่ละคีย์ลัด จะมีคีย์ที่ยาวกว่าบางส่วนที่เทียบเท่ากันบางส่วน ตัวอย่างเช่น หากคีย์ A เป็นคีย์ 64 บิต คีย์ AA, AAA ฯลฯ จะเป็นคีย์เดียวกัน)

    • มันสามารถเข้ารหัสสตริงที่เป็นศูนย์ทั้งหมดด้วยอัลกอริธึม Blowfish โดยใช้คีย์ย่อยที่กำหนดไว้ในขั้นตอนที่ 1 และขั้นตอนที่ 2

    • สามารถกู้คืน P1 และ P2 ด้วยเอาต์พุต 64 บิตของขั้นตอนที่ (3)

    • สามารถเข้ารหัสเอาต์พุตของขั้นตอนที่ (3) โดยใช้อัลกอริทึมกับคีย์ย่อยที่เปลี่ยนแปลง

    • สามารถคืนค่า P3 และ P4 ด้วยผลลัพธ์ของขั้นตอนที่ (5)

    • สามารถใช้เพื่อดำเนินการตามขั้นตอน กู้คืนรายการทั้งหมดของอาร์เรย์ P และจากนั้นกล่อง S ทั้งสี่ตามลำดับด้วยเอาต์พุตของอัลกอริธึมที่เปลี่ยนแปลงอย่างต่อเนื่อง

  • จำเป็นต้องทำซ้ำทั้งหมด 521 ครั้งเพื่อสร้างคีย์ย่อยที่จำเป็นทั้งหมด แอปพลิเคชันสามารถบันทึกคีย์ย่อยแทนที่จะดำเนินการตามกระบวนการที่มานี้หลายครั้ง

  • การเข้ารหัสข้อมูล − ปักเป้าเป็นเครือข่าย Feistel รวม 16 รอบ

    อินพุตเป็นองค์ประกอบข้อมูล 64 บิต x.

    แบ่ง x ออกเป็นสองส่วน 32 บิต :xL , xR .

    จากนั้น สำหรับ i =1 ถึง 16;

    x =xL XOR Pผม

    xR =F(xL ) XOR xR

    สลับ xL และ xR

    หลังวันที่ 16 th รอบ สลับ xL และ xR อีกครั้งเพื่อเลิกทำการสลับครั้งล่าสุด

    จากนั้น ciphertext =การต่อกันของ xL และ xR , xR =xR XOR P17 และ xL =xL XOR P18 .

    สุดท้าย รวม xL . อีกครั้ง และ xR เพื่อรับรหัสลับ การถอดรหัสเทียบเท่ากับการเข้ารหัส ยกเว้น P1, P2,……P18 ถูกใช้ในลำดับที่กลับกัน