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