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

อัลกอริทึมแฮชที่ปลอดภัยทำงานอย่างไร


Secure Hash Algorithm (SHA) ได้รับการคิดค้นโดย National Security Agency (NSA) และเผยแพร่ในปี 1993 ผ่านสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) ในฐานะมาตรฐานการประมวลผลข้อมูลแห่งสหพันธรัฐของสหรัฐอเมริกา (FIPS PUB 180)

SHA ขึ้นอยู่กับและแบ่งปันหน่วยการสร้างที่คล้ายคลึงกันกับอัลกอริธึม MD4 การออกแบบ SHA ได้แนะนำกระบวนการใหม่ที่พัฒนาอินพุตบล็อกข้อความ 16 คำให้กับฟังก์ชันการบีบอัดเป็นบล็อก 80 คำระหว่างสิ่งอื่น

การประมวลผลของ SHA ทำงานดังนี้ -

ขั้นตอนที่ 1ต่อท้าย padding bits − ข้อความต้นฉบับถูกเสริมและระยะเวลาของข้อความนั้นเท่ากันกับ 448 โมดูโล 512 ช่องว่างภายในจะถูกแทรกอย่างต่อเนื่องแม้ว่าข้อความจะมีความยาวตามที่ต้องการอยู่แล้ว ช่องว่างภายในประกอบด้วย 1 ตัวเดียวตามด้วยจำนวนที่จำเป็นของ 0 บิต

ขั้นตอนที่ 2ต่อท้ายความยาว บล็อก 64 บิตที่ถือว่าเป็นจำนวนเต็ม 64 บิตที่ไม่ได้ลงนาม (ไบต์ที่สำคัญที่สุดก่อน) และการกำหนดความยาวของข้อความต้นฉบับ (ก่อนการเติมในขั้นตอนที่ 1) จะถูกเพิ่มลงในข้อความ ความยาวของข้อความทั้งหมดเป็นทวีคูณของ 512

ขั้นตอนที่ 3เริ่มต้นบัฟเฟอร์ บัฟเฟอร์ประกอบด้วยรีจิสเตอร์ห้า (5) รีจิสเตอร์ 32 บิตแต่ละตัวระบุโดย A, B, C, D และ E บัฟเฟอร์ 160 บิตนี้สามารถใช้เพื่อส่งผลต่อผลลัพธ์ชั่วคราวและขั้นสุดท้ายของฟังก์ชันการบีบอัด รีจิสเตอร์ทั้งห้านี้เริ่มต้นเป็นจำนวนเต็ม 32 บิตต่อไปนี้ (ในรูปแบบเลขฐานสิบหก)

A =67 45 23 01

B =ef cd ab 89

C =98 ba dc fe

D =10 32 54 76

E =c3 d2 e1 f0

รีจิสเตอร์ A, B, C และ D จริง ๆ แล้วเหมือนกับรีจิสเตอร์สี่ตัวที่ใช้ในอัลกอริธึม MD5 แต่ใน SHA-1 ค่าเหล่านี้จะถูกบันทึกในรูปแบบ big-endian ซึ่งกำหนดว่าไบต์ที่สำคัญที่สุดของคำจะอยู่ในตำแหน่งไบต์ที่อยู่ต่ำ ดังนั้นค่าเริ่มต้น (ในรูปแบบเลขฐานสิบหก) จึงเกิดขึ้นดังนี้ −

word A =67 45 23 01

word B =ef cd ab 89

word C =98 ba dc fe

word D =10 32 54 76

คำ E =c3 d2 e1 f0

ขั้นตอนที่ 4ประมวลผลข้อความในบล็อก 512 บิต − ฟังก์ชันการบีบอัดแบ่งออกเป็น 20 ขั้นตอนตามลำดับ รวมถึงการประมวลผลสี่รอบโดยแต่ละรอบประกอบด้วย 20 ขั้นตอน

สี่รอบมีโครงสร้างเหมือนกันโดยมีความแตกต่างเพียงอย่างเดียวที่แต่ละรอบต้องการฟังก์ชันบูลีนที่แตกต่างกัน ซึ่งสามารถกำหนดเป็น f1, f2, f3, f4 และหนึ่งในสี่ค่าคงที่การเติม Kt (0 ≤t ≤79) เป็นไปตามขั้นตอนที่พิจารณา

ขั้นตอนที่ 5ผลลัพธ์ − หลังจากประมวลผลบล็อกข้อความ 512 บิตสุดท้าย t (โดยพิจารณาว่าข้อความถูกแบ่งออกเป็น t บล็อก 512 บิต) และสามารถรับข้อความไดเจสต์ขนาด 160 บิตได้