มีความสับสนเกี่ยวกับคำศัพท์เกี่ยวกับเส้นโค้งวงรีในคำถามนี้ ให้จัดการบางส่วนของพวกเขา
เส้นโค้งวงรี
เส้นโค้งวงรีในทางพีชคณิตคือ
$$E(\mathbb{K}) := \{ (x, y) \in \mathbb{K}^2 \กลาง y^2+a_1xy+a_3y = x^3+a_2x^2+a_4x+a_6\ } \cup \{\mathcal O\}$$
$\{\mathcal O\}$ เป็น จุดที่ไม่มีที่สิ้นสุด เพิ่มเป็นพิเศษที่ไม่มีการแสดงในรูปเรขาคณิตของเส้นโค้ง
ประเด็นคือ $(x,y)$ ทูเพิลนั้น ตอบสนอง สมการเส้นโค้งจึงไม่ใช่จำนวนเต็ม!
การเพิ่มจุด
การบวกจุดมีความหมายทางเรขาคณิตที่ดีมาก ในภาพด้านล่าง $P,Q,R$ แสดงถึงจุดบนเส้นโค้งและ $\{\mathcal O\}$ แสดงเป็น $0$
และเราดึงเอา สมการเลขคณิต จากนี้ ( กฎคอร์ดสัมผัส). สำหรับรายละเอียดการสกัดดูที่ บทที่ 2 ของหนังสือของวอชิงตัน.
จุดของเส้นโค้งก่อตัวเป็น กลุ่มอาเบลเลียน ภายใต้ตัวดำเนินการบวกจุดที่มีองค์ประกอบเอกลักษณ์ $\{\mathcal O\}$.
การคูณสเกลาร์
เมื่อเราเพิ่มจุด $พี$ สำหรับตัวมันเอง เราพูดว่า สองเท่า บางคนเขียนเป็น $2P$อย่างไรก็ตาม วิธีทั่วไปและดีกว่าในการเขียนคือ $[2]P$. ดังนั้น $[2]P = P + P$.
ในทำนองเดียวกัน เราสามารถพูดถึงการเพิ่มสามครั้ง สี่ครั้ง หรือ $t$ ครั้ง.
$$[t]P : = \underbrace{P + P + \cdots + P}_{t-times}$$
นี่คือสิ่งที่เราเรียกว่า การคูณสเกลาร์ (จริง ๆ แล้วเป็น Z-Module สำหรับกลุ่ม Abelian)
เครื่องกำเนิดไฟฟ้า
เครื่องกำเนิดของกลุ่มวัฏจักรเป็นองค์ประกอบ $G$ เช่นนั้นเมื่อ $G$ เพิ่มตัวเองครั้งแล้วครั้งเล่า มันจะสร้างองค์ประกอบทั้งหมดของกลุ่ม (ขออภัยสำหรับนักทฤษฎีกลุ่ม ตัวพิมพ์ใหญ่ชนกันที่นี่ - องค์ประกอบ $g$ ของกลุ่ม $G$ เป็นเครื่องกำเนิดไฟฟ้าถ้า $\langle g \rangle = G$).
คำสั่ง
คำสั่งมีสองประเพณีใน ECC
ลำดับของเส้นโค้งวงรี $|\#E(\mathbb{K})|$ หมายถึงจำนวนองค์ประกอบของเส้นโค้ง
ลำดับขององค์ประกอบ
เมื่อเส้นโค้งมีลำดับเฉพาะเช่นเดียวกับใน Secp256k1 ทุกองค์ประกอบจะมีลำดับเดียวกันกับลำดับของเส้นโค้ง และนี่หมายความว่าทุกองค์ประกอบเป็นตัวสร้าง
กลับไปที่คำถามของคุณ
ใน Secp256k1 จุดฐาน
G = (55066263022277343669578718895168534326250603453777594175500187360389116729240,
83121579216557378445487899878180864668798711284981320763518679672151497189239 )
และลำดับของฐาน $n$ เป็น
n = 115792089237316195423570985008687907852837564279074904382605163141518161494337
คำสั่งหมายความตามนั้น $[n]G = \mathcal{O}$ และเราสามารถใช้สิ่งนี้เพื่อหาสมการด้านล่าง
$$[k]P = [ k \bmod n]P$$
ดังนั้นสิ่งที่คุณทำคือ $+2$ เป็น
$$[n-1]G + [2]G = [n-1+2]G = [n+1]G = [1]G = G$$
ดังนั้นสิ่งที่คุณทำคือ $+1$ เป็น
$$[n-1]G + [1]G = [n-1]G = [n]G = \mathcal{O}$$
เรามาสิ้นสุดการตรวจสอบด้วย SageMath กัน
#secp256k1
p = จำนวนเต็ม ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2F")
a = จำนวนเต็ม("0x000000000000000000000000000000000000000000000000000000000000000")
b = จำนวนเต็ม("0x0000000000000000000000000000000000000000000000000000000000000007")
K = GF(พี)
E = EllipticCurve(K,[a,b])
พิมพ์(อี)
G = E(จำนวนเต็ม("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),
จำนวนเต็ม ("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"))
พิมพ์("\nG =",G)
n = G.คำสั่ง()
พิมพ์ ("\n คำสั่งของ G =",n)
G2 = 2*G
Q = (n-1)*G + 2*G
พิมพ์("\n[n-1]G+[2]G =",Q)
ยืนยัน (Q == G)
R = (n-1)*G +G
พิมพ์("\n[n-1]G+G =",Q)
พิมพ์(R)
และผลลัพธ์คือ
Elliptic Curve กำหนดโดย y^2 = x^3 + 7 บน Finite Field ขนาด 115792089237316195423570985008687907853269984665640564039457584007908834671663
G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)
คำสั่งของ G = 115792089237316195423570985008687907852837564279074904382605163141518161494337
[n-1]G+[2]G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)
[n-1]G+G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)
(0 : 1 : 0)