"ฟังก์ชันเส้นโค้งวงรี" และ "ฟังก์ชันแฮช" เหมือน SHA256 ต่างกันอย่างไร
ไม่มีบริบทที่แท้จริงให้ไว้ แต่เราสามารถเข้าใจได้
ฟังก์ชัน SHA-256:
ใช่ มันคือฟังก์ชัน ในทางที่ค่อนข้างแม่นยำ: ฟังก์ชันแฮชการเข้ารหัสลับ (แฮชที่ทนต่อการชน);
$$\operatorname{SHA256}:\{0,1\}^* \to \{0,1\}^{256}$$
- ทางเดียว: แทบจะเป็นไปไม่ได้เลยที่จะกลับรายการย่อยแฮชที่กำหนด (หรือฝ่ายตรงข้ามที่ล้อมรอบด้วยพหุนามไม่สามารถเปลี่ยนกลับได้)
- มุ่งมั่น: อินพุตเดียวกันต้องให้เอาต์พุตเดียวกัน
- สุ่ม: เราไม่ควรรู้แฮชของอินพุตก่อนที่จะทำการแฮช เราสามารถอ่านสิ่งนี้ได้เนื่องจากฟังก์ชันแฮชเป็นตัวเลือกสำหรับ Random Oracles (RO) และ SHA256 ไม่ใช่เนื่องจากมีการโจมตีแบบขยายความยาว SHA3 และ Blake2 จึงใกล้เคียงกับ RO มากกว่า
- มี ความต้านทานต่อภาพล่วงหน้า: ใกล้วันเวย์; กำหนดค่าแฮช $h$ ฝ่ายตรงข้ามเวลาพหุนามจะต้องเป็นไปไม่ได้ที่จะหาข้อมูล $m$ ดังนั้น $\operatorname{SHA256}(m) = h$.
- ความต้านทานต่อภาพล่วงหน้าที่สอง: ได้รับข้อความ $m$ และมันคือค่าแฮช $h$ค้นหาข้อความอื่น $m'$ ดังนั้น $\operatorname{SHA256}(m) = h = \operatorname{SHA256}(m')$.
- และ ความต้านทานการชน; ค้นหาข้อความอินพุตที่แตกต่างกัน $m_1 \neq m_2$ ดังนั้น $\operatorname{SHA256}(m_1) = \operatorname{SHA256}(m_2)$.
Bitcoin ใช้ SHA256 สองเท่า (SHA256d) และ SHA256d ปลอดภัยจากการโจมตีส่วนขยายความยาว.
ฟังก์ชัน Elliptic Curve:
นี่เป็นชื่อที่แปลก มันเป็นฟังก์ชัน L ของ Elliptic curves หรืออะไร? เนื่องจากคำถามกำลังพูดถึง Bitcoin จึงน่าจะเป็นชุดของฟังก์ชันที่ Elliptic curves มีให้มากกว่าฟังก์ชันด้านล่าง:
ส่วนที่เพิ่มเข้าไป เป็นการดำเนินการกลุ่ม (บวก ลบ ผกผัน สับเปลี่ยน และสมาคม)
การคูณสเกลาร์: ให้จุดฐาน $G$ และเพิ่ม $t$ ครั้ง:
$$[t]G : = \underbrace{G + G + \cdots + G}_{t-ครั้ง}
$$
การสร้างคีย์สาธารณะ: เลือกแบบสุ่ม $k$ และคำนวณ $[k]G$.
ECDSA การสร้างลายเซ็น
ECDSA การตรวจสอบลายเซ็น
ตอนนี้คำตอบสำหรับคำถามอื่นของคุณชัดเจนแล้ว
พวกเขามีคุณสมบัติเหมือนกันหรือไม่?
ไม่ พวกเขาไม่! แม้แต่อันหนึ่งก็เป็นฟังก์ชันอีกอันหนึ่งก็เป็นชุดของฟังก์ชัน
สามารถใช้ทั้งคู่เพื่อสร้างคู่คีย์ส่วนตัวและคีย์สาธารณะได้หรือไม่
เลขที่
อย่างไรก็ตาม เราสามารถใช้ SHA256 เพื่อย่อยแหล่งที่มาของเอนโทรปีเพื่อเลือกการสุ่ม $k$ สำหรับคีย์ส่วนตัวและค้นหาคีย์สาธารณะ $K = [k]G$ โดยใช้การคูณสเกลาร์ของ Elliptic Curves
และที่อยู่ Bitcoin จะคำนวณเป็น;
$$\text{ที่อยู่ Bitcoin} = \operatorname{RIPEMD160(SHA256(}K))$$ เป็นที่อยู่ 20 ไบต์ (RIPEMD).
หมายเหตุพิเศษ: หนังสือ/เว็บไซต์บล็อกเชนบางเล่มใช้การคูณ EC สำหรับการคูณ EC แบบสเกลาร์ เช่น หนังสือของ Antonolopus การเรียนรู้ Bitcoin, หน้า 68 สิ่งนี้สร้างความสับสนให้กับหลาย ๆ คน เนื่องจากพวกเขาเริ่มคิดว่า $P\cdot Q$ มีอยู่ ไม่! EC สร้างกลุ่มอาเบลเลียนแบบบวก และด้วยการคูณแบบสเกลาร์ (วิธีปกติในการกำหนดกลุ่มแบบบวก) พวกมันจะสร้าง Z-โมดูลไม่มีอะไรเพิ่มเติม