Đường cong STARK dường như là một lựa chọn hợp lý cho ECDSA.
Các đường cong STARK xác định hơn $\mathbb{F}_p$ với $p = 2^{251} + 17*2^{192} +1$ với phương trình Weierstrass ngắn
$$y^2 = x^3 + A x + B$$
với
- $A = 1$, và
- $B = 3141592653589793238462643383279502884197169399375105820974944592307816406665$
Chi tiết từ các tham số đã cho |
Thứ tự của nhóm đường cong (số điểm) là $n = \#E(\mathbf{F}_p )$ Là $n= 3618502788666131213697322783095070105526743751716087489154079457884512865583$
Và đây là một dấu hiệu số nguyên tố rằng
Mọi phần tử ngoại trừ danh tính ( $\mathcal{O})$ có thể là một máy phát điện.Con số vô nghĩa của đường cong này (cảm ơn Aria đã chỉ), đến từ $\pi$.
Cho nên Starks có hơi cứng nhắc ít nhất là cho đến bây giờ.
Cuối cùng, con số không có gì trong tay áo của tôi khá sinh lý.
đồng nhân tố là $h=1$ điều này có nghĩa là không có biểu diễn Montgomery của đường cong, do đó, không có thang Montgomery nhanh (yêu cầu một yếu tố bậc 2, tức là 2|đồng yếu tố), thang Joyce vẫn có thể với hiệu suất chậm hơn. Trong ECDSA, điều này rất hữu ích trong việc tính toán $[k]G$ chỉ vì $x$ tọa độ được sử dụng.
Không có cuộc tấn công nhóm nhỏ nào để xem xét, mặc dù đây không phải là vấn đề đối với người dùng hợp pháp của ECDSA. Nếu người dùng không hợp pháp thì họ có thể sử dụng điều này để chi tiêu gấp đôi tiền như đã làm trong cong25519 tuy nhiên đây không phải là trường hợp của đường cong STARK.
Nhóm đường cong đẳng cấu với $\mathbb{Z_n}$
Các $n$ có biểu diễn nhị phân 252-bit và điều này có nghĩa là nó có khoảng $126$-bit bảo mật chống lại các vấn đề logarit rời rạc cổ điển tốt nhất.
Kích thước của đường cong không cho va chạm của $k$ nếu một trình tạo số ngẫu nhiên tốt được sử dụng. Nếu vẫn lo sợ điều này, người ta có thể sử dụng ECDSA xác định được đưa ra trong rfc-6979.
Bảo mật xoắn (không liên quan đến ECDSA); độ xoắn bậc hai của đường cong này là $$y^2 = x^3 + 5^2*x +B*5^3$$ *
- Lực lượng của vòng xoắn = "618502788666131213697322783095070105623107215331596699973092056135872020481"
- Các yếu tố của nhóm xoắn = "499669 * 26023817775804638430931 * 278275836047110893120702478691334736277272165979" và điều này mang lại bảo mật khoảng 158 bit. Mức độ vừa phải.
Và chúng ta có $2*p+2 = Thứ tự(E) + Thứ tự(\text{E_quaratic_twist})$
$n \neq p$ do đó nó không phải là một đường cong bất thường nơi nhật ký rời rạc có thể được giải quyết nhanh chóng.
một = 1
b = 3141592653589793238462643383279502884197169399375105820974944592307816406665
p = 2^251 + 17*2^192 +1
E = EllipticCurve(GF(p), [0,0,0,a,b])
in(E)
Et = E.quadratic_twist()
in(và)
print("E abelian =", E.abelian_group())
print("E xoắn a = ", Et.abelian_group())
thẻ = E.cardinality()
cardEt = Et.cardinality()
in ("cardinality E =",thẻ)
print("độ xoắn E =",thẻ)
print("thừa số E ",thừa số(thẻ))
in ("thừa số Et ",hệ số (thẻEt))
Phần #Generator không dành cho xoắn bậc hai.
#G = E (8747394510780077766457464989774322083649278607533249481
#n = G.order()
#print("Thứ tự máy phát =", n)
in(log(thẻ,2).n()+1)
khẳng định(2*p+2 == thẻ + thẻEt)
*Thật không may, vòng xoắn bậc hai được hình thành với QNR 5, nó không hoạt động như mong muốn. Nhờ Poncho chỉ ra điều này. Tôi giữ phương trình để người ta có thể nhìn thấy vấn đề. Thay vào đó, tôi đã sử dụng bậc hai_twist
chức năng của SageMath khá chậm.