Score:0

SHA-256 ไม่เป็นไปตามการกระจายแบบสม่ำเสมอ?

ธง vn
Bob

ฉันได้เล่นกับ SHA-2-256 ใน Julia และฉันสังเกตเห็นว่าแฮชที่สร้างขึ้นไม่เป็นไปตามการกระจายที่สม่ำเสมอ ความเข้าใจของฉันเกี่ยวกับอัลกอริธึมการแฮชที่ปลอดภัยคือควรประมาณการแจกแจงที่สม่ำเสมอ ดังนั้นจึงไม่สามารถคาดเดาได้

นี่คือรหัส Julia ที่ฉันใช้:

ใช้ BitIntegers, Distributions, HypothesisTests, Random, SHA

ฟังก์ชัน sha256_rounds()
    รอบ::Array{Array{UInt8,1}} = Array{Array{UInt8,1}}(undef, 10000) # 10,000 ตัวอย่าง
    แฮช::Array{UInt8} = Array{UInt8}(undef, 64) # อาร์เรย์ 64 ไบต์

    สำหรับฉัน = 1:10,000
        hash = sha2_256(string(rand(UInt64), base = 16)) # เลขสุ่ม แปลงเป็น hex string แล้ว seed
        รอบ [i] = แฮช
    จบ

    กลับรอบ
จบ

sha256_str_vals = [join([string(x, base = 16) for x in y]) for y in sha256_rounds()] # ต่อไบต์เข้าด้วยกันเป็นสตริง
sha256_num_vals_control = [parse(UInt256, x, base = 16) for x in sha256_str_vals] # รับค่าตัวเลขจากสตริง

OneSampleADTest(sha256_num_vals, Uniform()) # หนึ่งตัวอย่างการทดสอบ Anderson-Darling

และผลการทดสอบ:

หนึ่งตัวอย่างการทดสอบ Anderson-Darling
--------------------------------
รายละเอียดประชากร:
    พารามิเตอร์ที่น่าสนใจ: ยังไม่ได้ดำเนินการ
    ค่าภายใต้ h_0: NaN
    ประมาณการจุด: NaN

สรุปการทดสอบ:
    ผลลัพธ์ที่มีความมั่นใจ 95%: ปฏิเสธ h_0
    ค่า p ด้านเดียว: <1e-7

รายละเอียด:
    จำนวนการสังเกต: 10,000
    ค่าเฉลี่ยตัวอย่าง: 8.73991847621225e75
    ตัวอย่าง SD: 2.2742656031884893e76
    สถิติ A²: Inf

สำหรับฉันสิ่งนี้บอกว่าแฮชที่ผลิตไม่สอดคล้องกับการแจกแจงแบบสม่ำเสมอ ฉันใช้การทดสอบอย่างไม่ถูกต้อง หรือตัวอย่างของฉันผิดพลาดหรือไม่? ขอบคุณสำหรับความคิดของคุณ

kelalaka avatar
in flag
ค่าแฮชของคุณเก็บ $64*8 = 512$ บิต อย่างไรก็ตาม SHA-256 มี 256 บิต ให้กำหนดเป็น `hash::Array{UInt8} = Array{UInt8}(undef, 32) # 32-byte array`
fgrieu avatar
ng flag
ฉันจำคำอ้างที่คล้ายกันก่อนหน้านี้ได้ว่าผลลัพธ์ของ [a hash](http://eprint.iacr.org/2002/099) หรือ [a block cipher](http://eprint.iacr.org/2003/003) ไม่สุ่ม พวกเขา [กลายเป็นผิด](https://eprint.iacr.org/2003/022) เอาต์พุตของ SHA-256 (สำหรับอินพุตที่แตกต่างกันซึ่งจัดทำขึ้นโดยไม่ขึ้นกับค่าคงที่ใน SHA-256) สามารถใช้ตรวจสอบการทดสอบทางสถิติได้ เป็นอิสระ: การอ้างสิทธิ์ต้องแสดงโดยไม่ขึ้นกับรหัส Julia และรวมถึงคำอธิบายของการทดสอบทางสถิติที่ดำเนินการ
kelalaka avatar
in flag
ดูในทำนองเดียวกัน [วิธีรับเอาต์พุตของ SHA-1 ด้วย 2 บิตแรกเป็นศูนย์?](https://crypto.stackexchange.com/q/83224/18298)
Meir Maor avatar
in flag
ฉันโหวตให้เปิดอีกครั้งแม้ว่าจะไม่มีการปรับปรุงที่แนะนำ SHA256 จะไม่ล้มเหลวในการทดสอบทางสถิติง่ายๆ ฉันจะพยายามทดสอบแต่ละบิตและคู่บิต เพื่อให้มั่นใจว่ามีความสม่ำเสมอใกล้เคียงกัน หากคุณยืนยันในการทดสอบที่คุณใช้ ให้ดูว่าคุณกำลังแปลงเป็นตัวเลขอย่างไร ข้อบกพร่องน่าจะอยู่ที่นั่นมาก
Paul Uszak avatar
cn flag
นี่เป็นเรื่องง่ายจริงๆ สร้างเนื้อหา 1GB ในโหมดตัวนับและเรียกใช้ `ent' กับมัน ถ้าผ่านก็ช่างมัน หากล้มเหลวรหัสของคุณก็เช่นกัน ...
Score:2
ธง ng

ขอย้ำอีกครั้งว่า เราไม่ใช่ไซต์ตรวจสอบโค้ด โดยเฉพาะอย่างยิ่งสำหรับโค้ดในภาษาที่ไม่ค่อยใช้สำหรับการเข้ารหัส และมีปัญหาที่ชัดเจนเกี่ยวกับรหัส:

  • sha256_num_vals_control มีการคำนวณแต่ไม่ได้ใช้ เมื่อสันนิษฐานได้ว่าเจตนาเป็นเช่นนั้น
  • ฉันไม่เห็นความพยายามที่จะทำให้เนื้อหาที่สร้างขึ้นเป็นปกติตามช่วงเวลา $[0,1)$หรือการป้อนข้อมูล OneSampleADTest การระบุช่วง

ฉันสรุปตัวอย่างสำหรับ OneSampleADTest ไม่ได้จัดรูปแบบตามที่คาดไว้สำหรับการทดสอบนี้ ผิดรูปแบบในขยะออก

แม้ว่าตัวอย่างจะถูกจัดรูปแบบอย่างถูกต้อง การเข้ารหัสจะไม่สนใจจุดบกพร่องใน OneSampleADTest ใน Julia และไลบรารีที่ใช้บางเวอร์ชัน มันจะดูแลการอ้างสิทธิ์ที่ถูกต้องว่าเอาต์พุต SHA-256 สำหรับอินพุตที่แตกต่างกันซึ่งเตรียมขึ้นอย่างเป็นอิสระจากค่าคงที่ใน SHA-256 สามารถแยกความแตกต่างจากการสุ่ม แต่การกล่าวอ้างที่ไม่ธรรมดาเช่นนี้ย่อมต้องการหลักฐานที่ไม่ธรรมดา และในเบื้องต้น คำอธิบายจะไม่ขึ้นกับภาษาและห้องสมุด

โพสต์คำตอบ

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