Điểm:3

Sự cố với điểm cộng về [n-1]+[2]G và [n-1]+G bật trên Secp256k1

lá cờ cn

Tôi xin lỗi trước cho câu hỏi của tôi. Tôi đang cố gắng tạo máy tính Secp256k1 đơn giản của riêng mình, chỉ cộng và trừ, và có một điều khiến tôi bối rối. Khi tôi cộng 2 điểm và tôi biết kết quả của phép cộng phải lớn hơn số nào $n$, và theo như tôi hiểu, kết quả sẽ là 0, vì nó là điểm ở vô cực.

Tuy nhiên, máy tính của tôi cho thấy một kết quả khác. Ví dụ, tôi thêm:

115792089237316195423570985008687907852837564279074904382605163141518161494336 + 2

và lấy 1 kết quả là Điều tương tự cũng xảy ra với các điểm khác có tổng lớn hơn $n$.

Nhưng khi tôi thêm

115792089237316195423570985008687907852837564279074904382605163141518161494336 + 1

tính toán cho tôi thấy 0.

Tôi không thể hiểu, nó có hoạt động đúng không và đó là sự hiểu lầm của tôi trong ECC? Hoặc đó là một lỗi trong mã của tôi? Kết quả sẽ như thế nào khi tôi cộng hai điểm với tổng lớn hơn $n$?

kelalaka avatar
lá cờ in
Chào mừng bạn đến với Cryptography.SE. Câu hỏi của bạn không rõ ràng. Bạn có sử dụng [luật nhóm cộng điểm](https://crypto.stackexchange.com/a/66296/18298) không?
Franko avatar
lá cờ cn
Vâng, tôi cho là vậy.
kelalaka avatar
lá cờ in
Đọc lại câu hỏi của bạn, có vẻ như bạn có vấn đề về số học điểm ECC. Bạn có thể chỉnh sửa câu hỏi của mình để cho biết cách bạn thêm điểm? Về mặt toán học hoặc lập trình, trong trường hợp sau, điều đó phải là tối thiểu!
Franko avatar
lá cờ cn
Tôi đã sử dụng mã từ https://onyb.gitbook.io/secp256k1-python/point-addition-in-python. When i add coordinates for 15792089237316195423570985008687907852837564279074904382605163141518161494336 point 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777 and add to this point 2 with coordinates c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a, i get coordinates of 1 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 as result.
kelalaka avatar
lá cờ in
Tôi thực sự không nhận được nó. $P=(Px,Py)$ và $Q=(Qx,Qy)$ là gì
Franko avatar
lá cờ cn
Hãy làm cho nó đơn giản hơn một chút. Câu trả lời đúng nào để cộng điểm cho hai điểm:115792089237316195423570985008687907852837564279074904382605163141518161494336 và 2?
kelalaka avatar
lá cờ in
Một điểm trong ECC trong tọa độ affine có hai tọa độ. Bạn có chắc chắn đã nhận được điều này? Có một điểm $$(2, 69211104694897500952317515077652022726490027694212560352756646854116994689233)$$ với $x=2$ và y được tính...
Franko avatar
lá cờ cn
Tôi xin lỗi. Point 115792089237316195423570985008687907852837564279074904382605163141518161494336 G with coordinates x: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 y: b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777 and point 2G x: c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 y :1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
kelalaka avatar
lá cờ in
Tôi nghĩ rằng bạn đang thiếu các khái niệm. Điểm bạn đã gọi phải là khóa riêng và bạn muốn tính khóa chung. Khóa riêng là một số nguyên và khóa chung là một điểm thông qua [phép nhân vô hướng](https://crypto.stackexchange.com/q/68593/18298) $[k]G$
PrincePolka avatar
lá cờ cn
secp256k1 là một đường cong có thứ tự nguyên tố N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 , bạn đang thêm (N-1)G + 2G và lấy G là chính xác, nguyên tắc tương tự như nếu bạn thêm 1 giờ vào 1' giờ cái đồng hồ
Franko avatar
lá cờ cn
Cảm ơn!!! Điều này có nghĩa là tất cả các công việc chính xác. Nhưng có thể bằng cách nào đó để tránh thêm điểm vòng thứ hai này? Đối với rpoint thêm kết quả lớn hơn n. Rốt cuộc, kết quả của phép cộng, bằng n (115792089237316195423570985008687907852837564279074904382605163141518161494337) tính đúng bằng 0. Có thể có kết quả khác, lớn hơn n?
kelalaka avatar
lá cờ in
Tôi hiểu rồi. Bạn đang hoàn toàn sử dụng thuật ngữ không chính xác. Bạn đang thực hiện phép nhân vô hướng. Trong trường hợp này, bạn có thể sử dụng danh tính này. $[k]P = [ k \mod n]P$
Franko avatar
lá cờ cn
Cảm ơn, sẽ cố gắng.
kelalaka avatar
lá cờ in
Và đừng quên rằng cách thức của StackExchange là nâng cao câu trả lời nếu nó hữu ích cho bạn và chấp nhận nó nếu nó đáp ứng câu hỏi của bạn. Chúc vui vẻ.
Điểm:4
lá cờ in

Có sự nhầm lẫn về thuật ngữ đường cong Elliptic trong câu hỏi này. Hãy giải quyết một số trong số họ;

Đường cong elip

Về mặt đại số, một đường cong elliptic là

$$E(\mathbb{K}) := \{ (x, y) \in \mathbb{K}^2 \mid y^2+a_1xy+a_3y = x^3+a_2x^2+a_4x+a_6\ } \cup \{\mathcal O\}$$

$\{\mathcal O\}$điểm ở vô cực được thêm vào dưới dạng bổ sung mà không có biểu diễn nào trong hình dạng hình học của đường cong.

Các điểm là $(x,y)$ tuple mà thỏa mãn phương trình đường cong nên chúng không phải là số nguyên!

cộng điểm

Việc bổ sung điểm có một ý nghĩa hình học rất tốt. Trong hình bên dưới $P,Q,R$ đại diện cho các điểm trên đường cong và $\{\mathcal O\}$ được đại diện như $0$

Diễn giải hình học của phép cộng trên đường cong Weierstrass

và chúng tôi trích xuất phương trình số học từ điều này (quy tắc hợp âm tiếp tuyến). Để biết chi tiết về việc trích xuất, hãy xem Chương 2 cuốn sách của Washington.

Các điểm của một đường cong tạo thành một nhóm Abelian dưới toán tử cộng điểm với phần tử nhận dạng $\{\mathcal O\}$.

Nhân bản vô tính

Khi chúng ta thêm một điểm $P$ với chính nó, chúng tôi nói nhân đôi một số người viết như $2P$, tuy nhiên, cách phổ biến và tốt hơn để viết nó là $[2]P$. Cho nên $[2]P = P + P$.

Tương tự, chúng ta có thể nói về việc thêm ba lần, bốn lần hoặc $t$ lần.

$$[t]P : = \underbrace{P + P + \cdots + P}_{t-times}$$

Đây là những gì chúng tôi gọi là nhân bản vô tính (thực ra là Mô-đun Z cho các nhóm Abelian)

Máy phát điện

Một trình tạo của một nhóm tuần hoàn là một phần tử $G$ như vậy khi $G$ được thêm vào chính nó nhiều lần, nó sẽ tạo ra tất cả các phần tử của nhóm (Xin lỗi vì lý thuyết gia của nhóm, các chữ in hoa xung đột ở đây - một phần tử $g$ của một nhóm $G$ là máy phát điện nếu $\langle g \rangle = G$).

Trật tự

Lệnh có hai cách sử dụng trong ECC

  1. Thứ tự của đường cong Elliptic $|\#E(\mathbb{K})|$ có nghĩa là số phần tử của đường cong

  2. Thứ tự của một phần tử.

    Khi đường cong có thứ tự nguyên tố như trong Secp256k1 thì mọi phần tử có cùng thứ tự với thứ tự đường cong và điều này có nghĩa là mọi phần tử đều là trình tạo.

Quay lại câu hỏi của bạn

Trong Secp256k1, điểm cơ sở

G = (55066263022277343669578718895168534326250603453777594175500187360389116729240,
83121579216557378445487899878180864668798711284981320763518679672151497189239 )

và thứ tự của điểm cơ sở $n$

n = 115792089237316195423570985008687907852837564279074904382605163141518161494337

Thứ tự có nghĩa là $[n]G = \mathcal{O}$ và chúng ta có thể sử dụng điều này để rút ra phương trình dưới đây

$$[k]P = [ k \bmod n]P$$

  • Vì vậy, những gì bạn làm là với $+2$

    $$[n-1]G + [2]G = [n-1+2]G = [n+1]G = [1]G = G$$

  • Vì vậy, những gì bạn làm là với $+1$

    $$[n-1]G + [1]G = [n-1]G = [n]G = \mathcal{O}$$


Hãy kết thúc với xác minh SageMath;

#secp256k1
p = Số nguyên("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2F")
a = Số nguyên("0x00000000000000000000000000000000000000000000000000000000000000000")
b = Số nguyên("0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007")

K = GF(p)
E = EllipticCurve(K,[a,b])
in(E)

G = E(Số nguyên("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),
      Số nguyên("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"))
in("\nG =",G)

n = G.order()

print("\nLệnh của G =",n)

G2 = 2*G
Q = (n-1)*G + 2*G
in("\n[n-1]G+[2]G =",Q)
khẳng định (Q == G)

R = (n-1)*G +G
in("\n[n-1]G+G =",Q)
in(R)

và đầu ra là

Đường cong elip được xác định bởi y^2 = x^3 + 7 trên Trường hữu hạn có kích thước 115792089237316195423570985008687907853269984665640564039457584007908834671663

G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)

Đơn hàng của G = 115792089237316195423570985008687907852837564279074904382605163141518161494337

[n-1]G+[2]G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)

[n-1]G+G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)
(0 : 1 : 0)
kelalaka avatar
lá cờ in
Có, bạn có thể nói về điểm dưới dạng một số nguyên trong đó số nguyên biểu thị vô hướng cần nhân với $G$. Tuy nhiên, điều ngược lại là logarit rời rạc, tức là cho $P$ tìm $t \in Z$ sao cho $P = [t]G$, và đây là cốt lõi bảo mật của nhiều ECC và là một vấn đề khó. Thông thường, chúng ta có thể giữ các chỉ mục (các $t$ cho mỗi $P$) để tăng tốc độ, tuy nhiên, hầu hết thời gian bạn được cấp $P$ mà không có chỉ mục như trong Khóa Diffie-Hellman Đường cong Elliptic Trao đổi (ECDH).
Franko avatar
lá cờ cn
Cảm ơn bạn rất nhiều vì câu trả lời chi tiết như vậy. Xin lỗi vì đã mô tả sai điểm của tôi, tôi hiểu điểm là tọa độ x y, không phải số nguyên, nhưng đối với tôi, việc mô tả điểm dưới dạng số nguyên dễ dàng hơn vì nó hiển thị số nằm sau điểm này. Và cảm ơn vì đã tính toán, bây giờ tôi thấy rõ điều gì sẽ xảy ra khi tôi thêm điểm này. Nhưng tôi có một câu hỏi mới. Có cách nào để theo dõi kết quả cộng điểm nào lớn hơn n và điểm kết quả nằm trong "vòng thứ hai" không? Có thể không?
kelalaka avatar
lá cờ in
Nếu bạn đưa cho tôi $P$ và $Q$ cùng với tọa độ của chúng thì không có cách nào cho tôi, như tôi đã đề cập trong nhận xét trước, đó là người ta cần giải logarit rời rạc trên Seckp256k1. Lưu ý rằng, không có cách làm tròn như vậy khi bạn xem xét $P+Q$ vì công thức cộng không cần sử dụng chỉ số và điểm cơ sở.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.