จุดสองเท่า (ลิงก์ Wiki) ต้องการ Z^4
และเมื่อใช้กับอัลกอริทึม double-and-add (จำเป็นสำหรับการคำนวณจุดสาธารณะ, ECDH และลายเซ็นตาม EC) โดยใช้ $Z=1$ ทำให้การคำนวณง่ายขึ้น Z^4
มิฉะนั้นอาจต้องเพิ่มเป็น 3 เท่า วิธี double-and-add โดยที่ ความละเอียด
ไม่ได้รับการแก้ไขเพื่อประหยัดเวลา วิกิพีเดียแบบดับเบิลและเพิ่ม รุ่น;
ให้ bits = bit_representation(s) # เวกเตอร์ของบิต (จาก MSB ถึง LSB) แทน s
ให้ res = O # ชี้ที่ระยะอนันต์
สำหรับบิตในบิต:
res = res + res # สองเท่า
ถ้าบิต == 1:
res = res + P # เพิ่ม
ผม = ผม - 1
คืนความละเอียด
นี่คือจุดเริ่มต้นของเรื่องยาว เดอะ "m-fold สองเท่า" (ทำซ้ำสองเท่า) คำนวณ $[2^m]P$ และคำนวณเท่านั้น Z^4
ครั้งหนึ่ง. เมื่อคุณต้องการ $[k]P$คุณอาจต้องเป็นตัวแทน $k$ ในรูปแบบไบนารี จากนั้นใช้ m-fold สองเท่าเมื่อจำเป็น เพื่อให้ได้ประโยชน์จากสิ่งนี้ เราต้องคำนวณต้นทุนก่อนที่จะตัดสินใจใช้ m-fold double หรือไม่
คำตอบนั้นไม่ง่ายและสมบูรณ์เนื่องจาก อันนี้ ต้องใช้ Z1=Z2
กับ 5M+2S
สำหรับรุ่น Wiki เพิ่มเติมมี 12M+4S
ค่าใช้จ่าย. เดอะ 5M+2S
ยังคงมี Z1
การคูณและถ้า Z1=1
ที่มีต้นทุนเป็นศูนย์
ในประโยคสั้น ๆ โดยทั่วไป Z1=1
ลดความซับซ้อนของสมการ
เนื่องจาก $(X_1:Y_1:Z_1)$ แสดงถึง $(Z/Z^2,Y/Z^3)$ และ $(X_1:Y_1:Z_1)$ เป็นความสัมพันธ์สมมูลนั่นคือ $$(X_1:Y_1:Z_1) \sim (\lambda X_1:\lambda Y_1:\lambda Z_1)$$ เราสามารถแปลงไฟล์ $Z_1 = 1$ กับ $$(X_1/Z_1:Y_1/Z_1:1)$$
โปรดจำไว้ว่า 1/Z1
ไม่ใช่การหาร แต่เป็นการผกผันของ Z1
บนฟิลด์ที่กำหนด
เดอะ Z1
ในทางกลับกันไม่ได้อยู่ที่นั่นด้วย Z1=1
ภายใต้การดำเนินงาน. เพื่อให้ได้ประโยชน์จากสิ่งนี้ เราต้องหาค่าผกผันและดำเนินการคูณสอง ในทางกลับกัน การหาค่าผกผันเป็นสิ่งที่เราไม่ต้องการเพราะมันมีราคาแพง
อย่างน้อยก็มีประโยชน์ที่จุดเริ่มต้นของการคูณสเกลาร์