การเข้ารหัส SHACAL-2 คำนวณอย่างไร
ฉันพยายามเรียนรู้เกี่ยวกับฟังก์ชันการทำงานพื้นฐานของฟังก์ชันแฮชที่แตกต่างกัน (ปัจจุบันคือ SHA) และฉันค่อนข้างติดขัดแม้หลังจากดูวิดีโอของสแตนฟอร์ดเกี่ยวกับเรื่องนี้
วิธีการแฮชวิธีหนึ่งคือการใช้โครงสร้าง Merkel-Damgårdด้วยฟังก์ชัน David Meyers และ SHACAL-2 block ciphers
เท่าที่ฉันเข้าใจ MD คือข้อความที่แบ่งออกเป็นห่วงโซ่ของบล็อก 64 บิตที่มีค่าบล็อกก่อนหน้าหรือ IV (เวกเตอร์เริ่มต้นที่กำหนดโดยฟังก์ชันแฮชหรือคีย์เกลือที่กำหนดเอง) ค่าบล็อกหรือ IV พร้อมกับค่าบล็อกปัจจุบันและคีย์ x บิตบางส่วนคือหลังจากผ่านฟังก์ชัน SHACAL-2 แล้วจึงเข้ารหัสใหม่
เข้าใจถูกหรือเปล่า ถ้าเป็น: จะเกิดอะไรขึ้นภายในฟังก์ชัน SHACAL คณิตศาสตร์คืออะไร?
ฉันพบสิ่งนี้ แต่ไม่ค่อยตอบคำถามของฉัน: SHACAL ใน SHA-256
คำตอบ
โครงสร้าง MD ใช้ฟังก์ชันการบีบอัด $C$ ($F$ ในรูป) เพื่อให้มีสองอินพุต
$$h_i = C(h_{i-1},m_i)$$
และครั้งแรก $h_{-1} = IV$ และสุดท้าย $H = h_{2^k-1}$ คือค่าแฮช
ฟังก์ชันการบีบอัดสามารถใช้การเข้ารหัสบล็อกโดยที่ข้อความไปยังการเข้ารหัสบล็อกคือค่าแฮชก่อนหน้านี้และคีย์คือข้อความ $h_i = E_{m}(h_{i-1})$
คำอธิบายแรกของการใช้การเข้ารหัสบล็อกฟังก์ชั่นที่มีอยู่ในการบีบอัด Merkle ของวิทยานิพนธ์ในหน้า 11 โครงสร้างนี้ไม่ปลอดภัยโดยสิ้นเชิงเนื่องจากการเข้ารหัสบล็อกที่มีอยู่ถูกผูกมัดโดยตรงและสามารถแสดงได้ว่ามี$\mathcal{O}(2^{n/2})$ second-preimage resistance แทน $\mathcal{O}(2^{n})$.
เราไม่ต้องการให้มีการโจมตีหลักที่เกี่ยวข้องเช่นเดียวกับรหัสบล็อกบางตัวเช่น AES และ DES สิ่งนี้ไม่ได้สร้างปัญหาในการเข้ารหัสเนื่องจากคีย์จะถูกเลือกแบบสุ่มอย่างไรก็ตามสามารถใช้คีย์ที่เกี่ยวข้องเพื่อโจมตีฟังก์ชันแฮชได้ เรื่องนี้มีการพูดคุยกันอย่างกว้างขวางโดยMannik และ Preenel
เราต้องการอินพุตขนาดใหญ่เนื่องจากการโจมตีชนกันของฟังก์ชันการบีบอัด[1]จึงต้องประมวลผลรอบมากขึ้น ดังนั้นนักออกแบบจึงสร้างรหัสบล็อกใหม่สำหรับโครงสร้าง MD แทนที่จะใช้สิ่งที่มีอยู่ สำหรับ SHA-1 เรียกว่า SHACAL และสำหรับ SHA-2 เรียกว่า SHACAL-2
ค่าการหารขึ้นอยู่กับฟังก์ชันการบีบอัด MD5 SHA-1 และ SHA256 ใช้บล็อกข้อความ 512 บิต SHA512 ใช้บล็อกข้อความ 1024 บิต ข้อความจะถูกปรับให้มีขนาดบล็อกหลายขนาดโดยมีการเข้ารหัสขนาดข้อความที่ส่วนท้าย
ตัวอย่างเช่น SHA-512 padding บนNIST FIPS 180-4
สมมติว่าความยาวของข้อความ $M$, คือ $\ell$บิต ต่อท้าย
1
ข้อความตามด้วย$k$ ศูนย์บิตโดยที่ $k$ เป็นคำตอบที่เล็กที่สุดและไม่เป็นลบของสมการ $$\ell + 1 + k \equiv 896 \bmod 1024$$ จากนั้นต่อท้ายบล็อก 128 บิตที่มีค่าเท่ากับตัวเลข $\ell$ แสดงโดยใช้การแทนค่าไบนารี
เป็นทางการสำหรับขนาดบล็อกโดยพลการ $b$ และ $d$ขนาดข้อความที่เข้ารหัส -bit (64 สำหรับ SHA-1 และ SHA256, 128 สำหรับ SHA512
$$\ell + 1 + k \equiv b-d \bmod b$$
ดังนั้นเกณฑ์การออกแบบจึงมีการเข้ารหัสบล็อกที่มีหลายรอบ SHACAL มี 80, SHA-256 มี 64 และ SHA512 มี 80 รอบในขณะที่ทำให้ฟังก์ชัน Round นั้นเรียบง่าย
และรหัสบล็อกถูกใช้เป็นDavies-Meyerเพื่อสร้างฟังก์ชันการบีบอัดทางเดียว
ตัวอย่างเช่นคณิตศาสตร์สำหรับ SHA256 คือ
- $\operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)$
- $\operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)$
- $\Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)$
- $\Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)$
การหมุนแบบบิตใช้ค่าคงที่ต่างกันสำหรับ SHA-512 ตัวเลขที่ระบุใช้สำหรับ SHA-256
สีแดง$\boxplus$ ค่าเฉลี่ย $ c = a + b \mod 2^{32}$เช่นการเพิ่มโมดูโล
อย่างที่เราเห็นการใช้งานง่าย ๆ ที่ซีพียูสามารถจัดการได้ฟังก์ชั่นรอบเบาพร้อมโครงสร้าง Feistel ที่ไม่สมดุลที่ลดลงเล็กน้อย
และเราได้เรียนรู้จากอัลกอริธึม Tiny Encryptionว่าแม้แต่รอบง่ายๆก็ยังปลอดภัยได้หลังจาก 32 รอบ