Đây là một kết quả thực nghiệm để bổ sung cho câu trả lời của Poncho;
Lấy Curve25519 có đồng sáng lập $8$ như đơn đặt hàng $n$ của các yếu tố nhóm như
$\small{n = 2^3 * 7237005577332262213973186563042994240857116359379907606001950938285454250989}$
Chúng tôi sử dụng SageMath và SageMath random_element
chức năng trong đó nó có thể trả lại phần tử nhận dạng $\mathcal{O}$ của đường cong (cơ hội nhận được nó là không đáng kể), trên Curve25519 $\mathcal{O}
= (0:1:0)$ trên mẫu Weierstrass.
thời gian nhập khẩu
def RandomBasePointByCofactor(E,identity,cofactor):
s = thời gian.thời gian()
ci = 0
n = E.order()
cho tôi trong phạm vi (1,10000):
P = E.random_element()
nếu đồng sáng lập*P != danh tính:
ci = ci +1
e = thời gian.thời gian()
print("thời gian trôi qua trên RandomBasePointByCofactor", e-s)
trả lại (ci)
def RandomBasePointByOrder(E,identity,cofactor):
s = thời gian.thời gian()
ci = 0
n = Số nguyên(E.order() / cofactor)
cho tôi trong phạm vi (1,10000):
P = E.random_element()
nếu n*P == danh tính:
ci = ci +1
e = thời gian.thời gian()
print("thời gian trôi qua trên RandomBasePointByOrder", e-s)
trả lại (ci)
p = 0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
K = GF(p)
A = K(0x76d06)
B = K(0x01)
E = EllipticCurve(K, ((3 - A^2)/(3 * B^2), (2 * A^3 - 9 * A)/(27 * B^3)))
IP = E((0,1,0))
Giới hạn = 10000
print(" số lượng trình tạo được tìm thấy = ", randomBasePointByCofactor(E,IP,8), "/", Giới hạn)
print("số lượng trình tạo được tìm thấy =",randomBasePointByOrder(E,IP,8),"/", Giới hạn)
Một kết quả mẫu là
thời gian đã trôi qua trên RandomBasePointByCofactor 1.9164307117462158
số lượng máy phát điện được tìm thấy = 9999/10000
thời gian đã trôi qua trên RandomBasePointByOrder 64.77565383911133
số lượng máy phát điện được tìm thấy = 1267/10000
Vì vậy
phương pháp đồng sáng lập nhanh hơn ~32 lần trong các thử nghiệm.
Chúng ta có thể giải thích điều này một cách đơn giản như; $8$ yêu cầu 4 lần nhân đôi và 1 lần bổ sung, trong khi $n$ yêu cầu nhân đôi 251 và bổ sung 125 với ngây thơ thuật toán nhân đôi. Điều này cho phép tính toán nhiều hơn ~75 lần nếu chúng ta giả sử nhân đôi và bổ sung có cùng tốc độ mà chúng không có.
phương thức cofactor tạo ra nhiều trình tạo hơn so với phương thức đặt hàng vì $1/8$ của các yếu tố ngẫu nhiên từ $8\cdot q$ rơi vào số nguyên tố lớn $q$ của Curve25519.
Do đó, phương pháp đồng sáng lập là thích hợp hơn.