การเข้ารหัส SHACAL-2 คำนวณอย่างไร

Jan 12 2021

ฉันพยายามเรียนรู้เกี่ยวกับฟังก์ชันการทำงานพื้นฐานของฟังก์ชันแฮชที่แตกต่างกัน (ปัจจุบันคือ SHA) และฉันค่อนข้างติดขัดแม้หลังจากดูวิดีโอของสแตนฟอร์ดเกี่ยวกับเรื่องนี้

วิธีการแฮชวิธีหนึ่งคือการใช้โครงสร้าง Merkel-Damgårdด้วยฟังก์ชัน David Meyers และ SHACAL-2 block ciphers

เท่าที่ฉันเข้าใจ MD คือข้อความที่แบ่งออกเป็นห่วงโซ่ของบล็อก 64 บิตที่มีค่าบล็อกก่อนหน้าหรือ IV (เวกเตอร์เริ่มต้นที่กำหนดโดยฟังก์ชันแฮชหรือคีย์เกลือที่กำหนดเอง) ค่าบล็อกหรือ IV พร้อมกับค่าบล็อกปัจจุบันและคีย์ x บิตบางส่วนคือหลังจากผ่านฟังก์ชัน SHACAL-2 แล้วจึงเข้ารหัสใหม่

เข้าใจถูกหรือเปล่า ถ้าเป็น: จะเกิดอะไรขึ้นภายในฟังก์ชัน SHACAL คณิตศาสตร์คืออะไร?

ฉันพบสิ่งนี้ แต่ไม่ค่อยตอบคำถามของฉัน: SHACAL ใน SHA-256

คำตอบ

2 kelalaka Jan 12 2021 at 18:13

โครงสร้าง 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 รอบ