Score:2

ฉันจะสร้างกลุ่มฟังก์ชัน Fn ของ WOTS+ โดยใช้ SHA3 ได้อย่างไร

ธง ca

จาก วอทส์+ กระดาษ:

นอกจากนี้ W-OTS+ ยังใช้กลุ่มของฟังก์ชัน Fn : {f_k : {0, 1}^n â {0, 1}^n | k â Kn} พร้อมคีย์สเปซ Kn ผู้อ่านอาจคิดว่ามันเป็นตระกูลฟังก์ชันแฮชการเข้ารหัสที่ไม่มีการบีบอัด การใช้ Fn เรากำหนดฟังก์ชั่นการผูกมัดต่อไปนี้

ฉันไม่เข้าใจความหมายของย่อหน้านี้ การตีความของฉันคือฉันต้องการครอบครัวของ ฟังก์ชัน n-bit pseudorandom โดยที่ เป็นพารามิเตอร์ความปลอดภัย นั่นคือถ้าพารามิเตอร์ความปลอดภัยเป็น 128จากนั้นฉันต้องการฟังก์ชั่นสุ่มหลอก 128 บิตที่แตกต่างกัน 128 แบบ หากความเข้าใจนี้ถูกต้อง และสมมติว่า n=128 ฉันสามารถให้คำจำกัดความได้ ฉ(k) เป็นเพียงการ sha3 (ซึ่งต่อต้านการโจมตีแบบขยายความยาว) ของ เค ต่อท้ายข้อความ แล้วหั่นเป็น 128 บิต? นั่นคือสิ่งที่ต้องการ:

// สร้างฟังก์ชันสุ่มหลอก kth โดยที่ n=128
fn kth_random_function(k: uint8) -> (ไบต์ -> uint128):
  ส่งคืน λ(msg: ไบต์) => uint128(sha3(u8_to_byte(k) ++ msg)[0:16])
Maarten Bodewes avatar
in flag
เลขฐานสองไม่ใช่เลขฐานสิบหก คุณไม่ควรเข้ารหัส `k` อย่างแน่นอนก่อนที่จะใช้ (และโดยปกติจะไม่เข้ารหัสหลังจากนั้นหากอนุญาตให้ใช้ไบนารี) นอกจากนี้ หากคุณกำลังจะใช้คีย์แฮช คุณอาจใช้ KMAC ได้เช่นกัน โปรดทราบว่า KMAC มีตัวเลือกในการตั้งค่าขนาดเอาต์พุตด้วยเอาต์พุต 128 และ 256 บิตซึ่งเป็นตัวเลือกมาตรฐาน
ca flag
@MaartenBodewes นั่นเป็นเพียงความเรียบง่ายโดยสมมติว่า sha3 ทำงานบนฐานสิบหก ฉันได้แก้ไขเพื่อปรับปรุง pseudocode KMAC ที่มีเอาต์พุต 128 บิตเป็นสิ่งที่ฉันอธิบายไม่ใช่หรือ นั่นคือ รับ 128 บิตแรกของ `SHA3(k || m)`?
Maarten Bodewes avatar
in flag
มันเกือบจะแตกต่างกันเล็กน้อย แต่โดยทั่วไปแล้ว ฉันจะใช้อัลกอริทึมที่พวกเขาควรจะทำงาน สมมติว่าคุณมีฟังก์ชันนี้ในฮาร์ดแวร์ ในกรณีนั้น SHA-3 อาจไม่ยอมรับอ็อบเจกต์คีย์ ในขณะที่ KMAC ยอมรับ
ca flag
มีเหตุผล ขอบคุณ
Maarten Bodewes avatar
in flag
KMAC: 1. newX = bytepad(เข้ารหัส_สตริง(K), 168) || X || right_encode(L) 2. ส่งคืน cSHAKE128(newX, L, âKMACâ, S) ใช่ ไม่ใช่ SHA-3 ซะทีเดียว แต่ก็คล้ายกันมากถ้าคุณไปดูโครงสร้างฟองน้ำจริงๆ S มักจะว่างเปล่า แต่มีการเข้ารหัสเพิ่มเติมของขนาดเอาต์พุต L รวมอยู่ด้วย และตัวบ่งชี้ "KMAC" ฉันไม่รู้จัก W-OTS ดีพอที่จะตอบได้ ฉันเกรงว่าจะมองข้ามข้อกำหนดบางอย่างของ w.r.t. ส่วนที่ไม่บีบอัด
Score:1
ธง in

คุณต้องการตระกูลของฟังก์ชั่นทางเดียวที่ทนต่อพรีอิมเมจที่สอง ตรวจจับไม่ได้ โดยทั่วไป ฟังก์ชันแฮชการเข้ารหัสลับที่ปลอดภัย (SHA2, SHA3, ...) ควรทำงานด้วยการปรับแต่งเล็กน้อยเพื่อให้เป็นคีย์ คุณไม่จำเป็นต้องเป็น PRF และฟังก์ชันมีความยาวคงที่ ดังนั้น หากคุณกำหนดความยาวของคีย์ด้วย ให้ใช้

SHA3(K || ม)

ไม่เป็นไร (จากนั้นรับจำนวนบิตเอาต์พุตที่ต้องการ) สำหรับ SHA2 (หรือโครงสร้าง Merkle-Damgard ใดๆ) คุณจะได้รับอาร์กิวเมนต์ความปลอดภัยที่ดีกว่า หากคุณดูดซับคีย์ในการเรียกใช้ฟังก์ชันการบีบอัดก่อน จากนั้นตามด้วยข้อความ นั่นคือคุณทำ

SHA2-256(แผ่น(K, 512) || M ),

โดยที่ pad(K, 512) ใช้การเติมแบบฉีดเพื่อเปลี่ยน K เป็นสตริง 512 บิต สมมติว่าความยาวคงที่สำหรับ K การต่อท้าย 0 จำนวนมากเพียงพอก็ใช้ได้ ที่นี่ฉันพิจารณาว่าความยาวบล็อกของ SHA2-256 คือ 512 บิต สำหรับความยาวบล็อกที่แตกต่างกัน คุณต้องปรับความยาวให้เหมาะสม เนื่องจากการเสริมความแข็งแกร่งของ Merkle-Damgard (ซึ่งต้องใช้การเติมความยาว) สิ่งนี้จึงไม่เพิ่มจำนวนการเรียกใช้ฟังก์ชันการบีบอัด ในเวลาเดียวกัน คุณสามารถคิดเกี่ยวกับสิ่งนี้เป็นอันดับแรก คำนวณ pseudorandom IV จาก K ซึ่งจะใช้เพื่อแฮช M

โพสต์คำตอบ

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