Score:1

คำถามเกี่ยวกับการได้มาของ Harden และ Normal Key

ธง vn

ฉันกำลังอ่านเกี่ยวกับคีย์ลูกที่แข็งและปกติในบทที่ 5 ของหนังสือ "Mastering Bitcoin" โดย Andreas พร้อมกับสิ่งนี้ ด้ายรายละเอียด และ บีไอพี-32. นี่คือความเข้าใจบางส่วนของฉันเกี่ยวกับขั้นตอนทั้งสองนี้:

เค: รหัสส่วนตัว // เค: กุญแจสาธารณะ // ผม ดัชนี // รหัสลูกโซ่ // ชม ผลการแฮช HMAC // ซ้าย 32 บิตแรกของผลลัพธ์แฮช // คำสั่งของ Elliptic Curve // จุดเริ่มต้นของ Elliptic Curve

ที่มาของคีย์ปกติ

กรณีที่ 1: parPrivkey -> childPrivkey (และจากนั้น childPubkey)

H = HMAC(cpar, Kpar || ichild) 
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n)]

กรณีที่ 2: parPubkey -> childPubkey

H = HMAC(cpar, Kpar || ichild)
=> Kchild = G*Hleft + Kpar

ที่มาของคีย์แข็ง `

กรณีที่ 3: parPrivkey -> childPrivkey (และจาก childPubkey นั้น)

H = HMAC(cpar, kpar || ichild)
=> kchild = (kpar + Hleft) mod n
=> Kchild = G*kchild = G*[ (kpar + Hleft) mod n]

ด้วย 3 วิธีเหล่านี้ฉันค่อนข้างสับสน:

  1. ความแตกต่างในสมการการสร้างระหว่างกรณีที่ 1 และ 2 นั้นค่อนข้างละเอียด ดังนั้นเราต้องคูณเท่านั้น kchild = (kpar + Hleft) mod n โดย G จะได้ในกรณีที่ 2 อย่างไรก็ตาม เนื่องจากมีปัจจัย สมัย ในตอนท้ายฉันไม่สามารถบอกได้ว่า เคชิลด์ ของกรณีที่ 1 จะเกี่ยวข้องกับกรณีที่ 2 หากไม่เป็นเช่นนั้น จุดประสงค์ของการสร้างเพียงรหัสสาธารณะโดยที่ไม่สามารถใช้จ่ายเงินที่ส่งไปนั้นคืออะไร
  1. สิ่งนี้ไม่เกี่ยวข้องกับคำถามข้างต้น แต่เกี่ยวกับการสร้างคีย์ส่วนตัวหลัก: ฉันได้อ่านแล้วว่าหลังจากได้รับ Root seed แล้ว Seed จะถูกใส่ลงในฟังก์ชัน HMAC-SHA512 เพื่อรับแฮช 512 บิต 32 บิตแรก ไบต์ซึ่งทำหน้าที่เป็นมาสเตอร์คีย์ส่วนตัว ดังนั้นคำถามของฉันคือเนื่องจากฟังก์ชัน HMAC รับ 2 อินพุตคือ กุญแจ และ ข้อความอะไรคือ "กุญแจ" ในกรณีนี้? หากไม่มี "คีย์" ทำไมไม่ใช้แค่ฟังก์ชันแฮช SHA-512

ขอบคุณล่วงหน้า.

Score:1
ธง gb

อย่างไรก็ตาม เนื่องจากมีตัวประกอบ mod n ในตอนท้าย ฉันจึงบอกไม่ได้ว่า Kchild ของ Case 1 จะเกี่ยวข้องกับ Case 2 หรือไม่

ใช่ คีย์ส่วนตัวย่อยจากกรณีที่ 1 เป็นคีย์ลับสำหรับคีย์สาธารณะที่ได้รับในกรณีที่ 2 $n$ เป็นลำดับของจุดกำเนิด $G$ จึงไม่กระทบต่อความถูกต้องของรหัสลับ

เนื่องจากฟังก์ชัน HMAC รับ 2 อินพุตซึ่งเป็นคีย์และข้อความ ในกรณีนี้ "คีย์" คืออะไร หากไม่มี "คีย์" ทำไมไม่ใช้แค่ฟังก์ชันแฮช SHA-512

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

ในการใช้งานอื่นๆ ของ HMAC ใน BIP 32 คีย์คือ "รหัสลูกโซ่" ในขณะที่ข้อความ/ข้อมูลเป็นไปตามที่คุณเขียนไว้ข้างต้นในคำถามของคุณรหัสลูกโซ่นี้ช่วยให้แน่ใจว่าคีย์ลูกไม่ได้มาจากคีย์หลักเท่านั้น แต่ยังใช้เอนโทรปีพิเศษบางอย่างซึ่งต้องรู้เพื่อให้ได้มาซึ่งลูก คุณจึงสามารถเลือกที่จะให้รหัสลูกโซ่ได้ หากคุณต้องการให้คนอื่นสามารถรับรหัสลูกได้ หรือเก็บเป็นความลับเพื่อที่พวกเขาจะไม่สามารถทำได้

John Pham avatar
vn flag
สำหรับคำตอบของคำถามที่สอง คุณไม่ได้ใช้ *bitcoin seed* เป็นพารามิเตอร์ "ข้อความ" สำหรับฟังก์ชัน HMAC ใช่หรือไม่ หรือรูปแบบของฟังก์ชันแฮชสำหรับคีย์ส่วนตัวหลักคือ HMAC(seed, seed) ?
meshcollider avatar
gb flag
@JohnPham กุญแจสำคัญคือสตริง "Bitcoin seed" ไม่ใช่เมล็ด มันเป็นสตริงคงที่
John Pham avatar
vn flag
โอเค ฉันเข้าใจแล้ว ไม่คิดว่าจะง่ายขนาดนั้น :)) ขอบคุณมาก Btw ฉันดีใจที่ได้พบคุณอีกครั้งจากหนึ่งใน [กระทู้คำถามก่อนหน้า](https://crypto.stackexchange.com/questions/98362/elliptic-curve-how-to-calculate-y-value)

โพสต์คำตอบ

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