Điểm:1

Một số câu hỏi về chức năng của đường cong elliptic

lá cờ tv

Tôi đã tìm hiểu về các đường cong elip và cách chúng hoạt động cũng như cách sử dụng chúng trong mật mã và tôi đang cố gắng tìm ra cách sử dụng chúng bằng Go.

  1. Đâu là tham số 'a' từ phương trình ECC của tôi y^2 = x^3 + a*x + b, trong cấu trúc CurveParams này? https://golang.org/pkg/crypto/elliptic/#CurveParams Để xác minh rằng tôi hiểu rõ, vui lòng sửa cho tôi nếu tôi sai:
  • Tham số 'P' biểu thị thứ tự của trường hữu hạn
  • 'N' là số nguyên tố nhỏ nhất sao cho kết quả N*G là điểm vô cực
  • 'B' là hằng số 'b' trong phương trình ECC của tôi
  • 'Gx','Gy' đại diện cho điểm cơ sở (ví dụ: được sử dụng để tính các khóa chung bằng cách sử dụng khóa riêng bạn đã chọn và nhân nó với G hoặc trong ví dụ trên, N*G được sử dụng để tính điểm vô cực)
  • 'BitSize' đây là nơi tôi không chắc điều này thực sự đại diện cho điều gì.Tôi hiểu rằng trong đường cong P256 (secp256k1 BTC), giá trị này bằng 256 và do đó, nó biểu thị độ dài của khóa riêng tư. Điều tôi không hiểu là con số này thực sự xuất hiện từ đâu trong toán học? Hay nó thực sự chỉ là độ dài nhị phân của 'P'?
  • Câu hỏi lớn nhất ở đây là tham số 'a' từ phương trình đường cong elip ở đâu? Làm thế nào các đường cong elip thực sự có thể được xác định nếu tôi không quyết định tham số này?
  1. Điều gì xảy ra nếu bạn sử dụng hàm Double() bằng cách sử dụng một điểm không nằm trên đường cong hoặc sử dụng điểm vô cực? Tôi đã cố gắng tìm kiếm một số điểm không tìm thấy trên đường cong để gọi hàm với nó nhưng không tìm thấy (đối với đường cong P256, tôi đã tìm kiếm trên google) https://golang.org/pkg/crypto/elliptic/#CurveParams.Double

  2. Điều gì xảy ra nếu bạn sử dụng hàm Add() bằng cách sử dụng các điểm không nằm trên đường cong hoặc sử dụng điểm vô cực + trên điểm đường cong hoặc điểm vô cực + không nằm trên điểm đường cong? https://golang.org/pkg/crypto/elliptic/#CurveParams.Add

  3. Tại sao các khóa riêng được trả về theo kiểu byte? Thỏa thuận với loại byte là gì? Tôi thấy nó được sử dụng ở rất nhiều nơi. Tại sao chúng ta không sử dụng kiểu int lớn? Tôi thấy chúng được sử dụng trong GenerateKey(), Marshal(), MarshalCompressed(), UnmarshalCompressed(), ScalarBaseMult(), ScalarMult().

Đối với tất cả các câu hỏi trên, tôi cũng quan tâm đến quan điểm toán học và lập trình, nhưng đặc biệt là lập trình. Nếu bạn không có câu trả lời cho tất cả chúng, vui lòng cung cấp bất kỳ câu trả lời nào cho bất kỳ câu hỏi nào bạn có câu trả lời.

CHỈNH SỬA:

  • câu hỏi 1 đã được trả lời một phần. BitSize vẫn cần được giải thích
Ievgeni avatar
lá cờ cn
Theo tôi hiểu, [] byte có thể biểu thị số nguyên có kích thước dài tùy ý. Sự lựa chọn ở đây dường như không hạn chế kích thước của số nguyên trong ScalarMult, bởi vì nó được xác định rõ cho bất kỳ số nguyên dương nào. Và về mặt lý thuyết, đối với một số đường cong cụ thể; thứ tự của nhóm có thể lớn hơn thứ tự của trường cơ sở, thì có thể big_int sẽ không đủ lớn để biểu thị khóa riêng.
thebalkandude avatar
lá cờ tv
@levegni ok nó có ý nghĩa.
President James K. Polk avatar
lá cờ sh
không, loại big.Int cũng có thể biểu thị một số nguyên có kích thước tùy ý. Lý do sử dụng byte để biểu thị các giá trị được nêu rõ trong tài liệu về Marshall, v.v. Có các định dạng chuẩn để trao đổi được định nghĩa theo byte, vì byte (thực ra 'octet' chính xác hơn) là đơn vị chuẩn của lưu trữ và truyền mạng. Về lý do tại sao ScalarMult và tương tự sử dụng biểu mẫu []byte, bạn phải hỏi lập trình viên, nhưng họ có thể nghĩ rằng nó sẽ thuận tiện hơn. Loại big.Int có các phương thức để chuyển đổi sang và từ []byte nên trên thực tế, đây không phải là vấn đề.
kelalaka avatar
lá cờ in
Bạn có vẻ lo sợ về [cuộc tấn công điểm không hợp lệ](https://crypto.stackexchange.com/q/87709/18298). Việc xác nhận là cần thiết. Khóa riêng là một số nguyên lớn được lưu trữ dưới dạng đối tượng byte.Đừng lo lắng, thư viện sẽ xử lý việc đó cho bạn và [việc chuyển đổi rất dễ dàng](https://stackoverflow.com/questions/24757814/golang-convert-byte-array-to-big-int).
Điểm:1
lá cờ cn

Bởi vì bạn biết một điểm của đường cong (điểm cơ sở). bạn có thể tính toán $a$ :

$$a = \frac{(Gy)^2 -(Gx)^3 -b}{Gx} \mod p$$

Lưu ý rằng tính toán này yêu cầu $Gx \neq 0 \mod p$.

Về điểm vô cực: Điểm vô cực được coi là phần tử trung tính, sau đó theo định nghĩa của phần tử trung lập: $(x,y)+\mathcal{O}=\mathcal{O}+(x,y) = (x,y)$, nó ngụ ý rằng $2\mathcal{O}=\mathcal{O}$

Và do đó, Double($\mathcal{O}$) sẽ trả lại cho bạn cùng một điểm $\mathcal{O}$. Và vì lý do tương tự, Thêm$(\mathcal{O}, \cdot)$, Cộng$(\cdot, \mathcal{O})$ đều là hàm đồng nhất cho tập hợp các điểm của đường cong.

Bạn không được sử dụng các hàm trên các điểm không nằm trong đường cong, do đó tôi cho rằng nó sẽ trả về lỗi, nếu bạn làm điều đó (nếu không thì nên như vậy).

thebalkandude avatar
lá cờ tv
ok vì vậy điều này trả lời một phần 3 câu hỏi đầu tiên của tôi
poncho avatar
lá cờ my
"Bạn không được phép sử dụng các chức năng trên các điểm không nằm trong đường cong, do đó tôi cho rằng nó sẽ trả về lỗi" - thường trình ECC thường không. Có, họ *có thể* kiểm tra; tuy nhiên, thời gian sẽ chiếm một phần đáng kể thời gian cộng điểm, do đó chúng thường không bận tâm đến kết quả trung gian. Họ thực sự nên kiểm tra khi bạn nhập các giá trị ban đầu (và khi họ biết các giá trị ban đầu nằm trên đường cong, thì tất cả các giá trị trung gian cũng sẽ như vậy); theo kinh nghiệm của tôi, thậm chí đó không phải là phổ quát

Đă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.