Score:2

จะสร้างวงจรสำหรับ SHA-256 ได้อย่างไร?

ธง ie

ใน "วงจรบูลีนสำหรับ SHA-256" โดย Steven Goldfederผู้เขียนให้วงจรบูลีนสำหรับ SHA-256 ฉันพบว่าวิธีนี้ซับซ้อนมาก

ฉันขอวิธีสร้างวงจรบูลีนสำหรับฟังก์ชันแฮชได้ไหม ฉันหมายถึง ด้วยอัลกอริทึมของฟังก์ชันแฮช วิธีแปลงเป็นวงจรเหมือนในบทความ

fgrieu avatar
ng flag
คำถามเน้นที่ SHA-256 (ตามชื่อเรื่อง) หรือถามทั่วๆ ไป (เหมือนประโยคสุดท้ายของเนื้อหา) ต้องการนิพจน์บูลีนอย่างเคร่งครัดหรือไม่ (ตามต้องการเช่นการพิสูจน์ความรู้เรื่องคุณค่าด้วยแฮชที่กำหนด) หรือบางอย่างสำหรับการออกแบบซิลิกอน (ซึ่งมีแนวโน้มว่าจะเป็นลำดับตามลำดับ) การบอกความยาวอินพุตที่เป็นเป้าหมายอาจเป็นประโยชน์ และเหตุใดจึงคิดว่านิพจน์ที่ลิงก์นั้น "ซับซ้อนมาก" จาก[ข้อมูลจำเพาะของ SHA-256](https://nvlpubs.nist.gov/nistpubs/FIPS/ นศ.FIPS.180-4.pdf#page=6).
user77340 avatar
ie flag
@fgrieu ใช่จริง ๆ แล้วฉันกำลังถามโดยทั่วไป
Score:2
ธง ng

ด้วยอัลกอริทึมของฟังก์ชันแฮช จะแปลงเป็นวงจรได้อย่างไร

สิ่งสำคัญที่สุดคือเราต้องการระบุปัญหาให้ดีขึ้นก่อน

  • ฟังก์ชันแฮชอะไร
  • เราต้องการวงจรสำหรับฟังก์ชันแฮชแบบเต็มและอินพุตความยาวคงที่ [ซึ่งดูเหมือนจะตรงกับคำถามที่สุด] หรือสำหรับบางส่วนของแฮช [เช่น รอบของฟังก์ชันแฮชที่มีอินพุตหนึ่งบล็อกข้อความบุนวมใน วัสดุที่เชื่อมโยง, ถ้าฉันอ่านไม่ผิด]?
  • ทำไมเราถึงต้องการ "วงจร"? สิ่งนี้จะส่งผลกระทบต่อธรรมชาติของสิ่งที่เราผลิต
    • หลักฐานที่ไม่มีความรู้ที่เกี่ยวข้องกับแฮชตามตัวอย่างที่เชื่อมโยงหรือไม่ ที่จะนำไปสู่การแสดงออกเป็นโซ่ยาวของประตู จำกัด เฉพาะบางพันธุ์ (ที่นี่ เอ็กซ์ออร์, และ, และ INV)
    • ทดสอบว่าบริสุทธิ์แค่ไหน โปรแกรมแก้ปัญหา SAT จัดการกับปัญหาที่เกี่ยวข้องกับแฮช (เช่น ภาพพรีอิมเมจ) ได้หรือไม่ โดยทั่วไป นิพจน์จะถูกจำกัดมากยิ่งขึ้น (ไม่มี XOR) ในทางกลับกัน การปฏิเสธมักจะไม่มีค่าใช้จ่าย
    • การปรับให้เหมาะสมในซิลิคอนหรือ FPGA? โดยปกติจะลึกเกินไปอย่างหมดจด นิพจน์บูลีน จะไร้ประโยชน์ เราจะต้องมีสลักตัวกลาง และเว้นแต่ว่าสิ่งทั้งหมดนั้นถูกวางท่อลึกหรือมีการแฮชที่ผิดปกติอย่างมาก เราจะใช้ตรรกะบางอย่างซ้ำในรอบต่างๆ ฉันจะไม่ครอบคลุมเรื่องนั้น
  • เราต้องการผลลัพธ์ในรูปแบบใด สำหรับวงจรบูลีนล้วน รูปแบบส่วนใหญ่จะเป็นตัวแปรตัวเลข ฉันเดาว่า ตัวอย่าง มี 512 อินพุตที่มีหมายเลขตั้งแต่ 0 ถึง 511, 116246 เกท (หนึ่งรายการต่อบรรทัด) แต่ละอันสร้างตัวแปรใหม่หนึ่งตัวสำหรับตัวแปรทั้งหมด 116,758 ตัวและเอาต์พุต 256 ตัว (อาจเป็นตัวแปร 116502 ถึง 116757 ฉันไม่แน่ใจ) ด้วยคำอธิบายนี้ ในสองบรรทัดแรกตามข้อตกลงง่ายๆ ด้านล่างนี้คือหนึ่งประตูต่อหนึ่งบรรทัด โดยฉันเดาว่าสำหรับแต่ละประตู
    • จำนวนอินพุต [1 สำหรับ NOT และ 2 สำหรับอื่นๆ ในตัวอย่าง]
    • จำนวนเอาต์พุต [1 ในตัวอย่าง]
    • รายการอินพุต
    • รายการของเอาต์พุต [หนึ่ง] รายการ
    • ชื่อของเกต [XOR, AND, INV ในตัวอย่าง]

ส่วนที่เหลือเป็นไปตามเทคนิคของมนุษย์ถ้ำในการกินแมมมอธ (ทีละชิ้น) และความคืบหน้าจากที่นั่น (เครื่องมือ)

เราใช้อัลกอริทึมทีละขั้นตอน คลี่แต่ละลูป และแสดงแต่ละขั้นตอนเป็นสมการบูลีน ตัวอย่างเช่น หากตัวแปรทั้งหมดเป็นแบบ 32 บิต (เช่นใน SHA-256):

  • คำสั่งเช่น C = A^B สามารถแปลเป็นตัวแปรใหม่ 32 ตัวสำหรับ C เอาต์พุตโดยเกต 32 XOR ซึ่งต้องใช้ 32 บรรทัด เราจำเป็นต้องติดตามตัวเลขที่กำหนดตัวแปรใหม่ที่กำหนดให้ .
  • E = C + D ต้องใช้ตัวแปรกลาง บรรทัดจึงมากขึ้น เราต้องการ 30 บวกเต็มและจากนั้นสองตัวที่เรียบง่าย (ไม่มีการดำเนินการสำหรับบิตอื่น ๆ ที่สูงซึ่งจะลดเหลือ XOR หนึ่งตัว ไม่มีการพกพาสำหรับตัวแรกซึ่งลดเป็นหนึ่ง XOR และหนึ่ง AND)
  • F = (E<<3)|(E>>29) ไม่จำเป็นต้องมีบรรทัด เพียงกำหนดตัวแปรใหม่สำหรับ อี.

มีเคล็ดลับเล็กน้อยที่บางครั้งสามารถแสดงนิพจน์ที่ง่ายขึ้นได้ แต่สำหรับแฮชที่สนใจในการเข้ารหัส นิพจน์จะยังคงยาว ถ้าไม่ใช่แฮชก็จะอ่อนแอ

เป็นเรื่องง่ายพอสมควรที่จะสร้างโปรแกรมที่ทำสิ่งนี้ตั้งแต่เริ่มต้น และจากประสบการณ์ของฉันนั้นง่ายกว่าการค้นหาและเชี่ยวชาญในสิ่งที่เพียงพอ เครื่องมือที่มีอยู่อาจมีประโยชน์ในการลดความซับซ้อนของนิพจน์โดยอัตโนมัติ แต่สำหรับแฮชการเข้ารหัสส่วนใหญ่ การวิเคราะห์สมการแฮชเพียงเล็กน้อยจะทำให้การทำให้นิพจน์ง่ายขึ้นมากที่สุดเท่าที่จะเป็นไปได้ และอาจให้ผลลัพธ์ที่ดีกว่าเครื่องมืออัตโนมัติ

user77340 avatar
ie flag
ขอบคุณสำหรับคำตอบ! ใช่ ฉันต้องการใช้มันสำหรับการใช้งาน MPC หรืออย่างเป็นรูปธรรม ฉันกำลังออกแบบโปรโตคอลการคำนวณที่ปลอดภัยของสองฝ่าย ซึ่งผู้พิสูจน์จะต้องพิสูจน์ภาพล่วงหน้าของ SHA256 ดังนั้นไฟล์ใน "A Boolean Circuit for SHA-256" by Steven Goldfeder" จึงเป็นสิ่งที่ฉันต้องการ อย่างไรก็ตาม วงจรที่พวกเขาออกแบบสำหรับอินพุตความยาวคงที่ในขณะที่ฉันต้องการวงจรสำหรับอินพุตความยาวตามอำเภอใจ ฉันยังคงดิ้นรนต่อไป ขอบคุณมาก!
fgrieu avatar
ng flag
@user77340: สำหรับ SHA-256 และอินพุต $b$ บิตสูงสุด $512-64-1=447$-bit ($55$-byte) มีบล็อกเดียวและได้มาจากการเพิ่ม $512-b ต่อท้ายอินพุต $ บิตขึ้นอยู่กับ $b$ เท่านั้น จากนั้นจึงใช้สมการแบบกลม (เป็นคำแนะนำในการหาค่าเหล่านี้ และขาดไม่ได้ในการตรวจสอบ นอกจากนี้ บิต $55$ ของ $512-b$ บิตจะอยู่ที่ $0$ เสมอ และเพิ่มขึ้นเป็น $65$ สำหรับ อินพุตแบบเรียงตามไบต์ช่วยให้สามารถแก้ไขได้ง่ายเล็กน้อย สำหรับความยาวตามอำเภอใจ คุณต้องต่อท้าย $(-65-b\bmod512)+65$ บิต และใช้ $\lceil (b+65)/512\rceil$ คูณสมการรอบ .

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา