Điểm:2

Curve448 - Tài liệu chính của Ed448 có thể được sử dụng lại cho X448 không?

lá cờ in

Hiện tại, tôi đang gặp phải tình huống có sẵn các cặp khóa Ed448 (khóa riêng + khóa chung) và hệ thống phải được mở rộng bằng thao tác Diffie-Hellman (ECDH). Trước tiên hãy để tôi tóm tắt những gì tôi đã hiểu cho đến nay.

Ed448: Là thuật toán chữ ký số trên edwards448.

X448: Là hàm Diffie-Hellman build cho Curve448.

đường cong448: Là một đường cong elip ở định dạng Montgomery như được chỉ định trong RFC7748.

edwards448: Là một đường cong elip có liên quan đến Curve448 bằng bản đồ như được chỉ định trong RFC7748.

Đối với Curve25519 tôi đọc Curve25519 trên Ed25519 để trao đổi khóa? Tại sao? và đối với tôi, có vẻ như có thể chuyển đổi khóa công khai Ed25519 hiện có thành khóa X25519 bằng cách áp dụng bản đồ đã xác định. Bằng cách nào đó, tôi không quen thuộc với tất cả các phép toán được sử dụng ở đây. Sau đó, sau khi đọc thêm tôi tìm thấy "Tương đương hai bên" có nghĩa là gì trong bối cảnh mật mã? đã cung cấp thêm một số thông tin chi tiết cho tôi. Sau đó tôi đọc RFC7748 một lần nữa và thấy rằng tính tương đương song lý cũng đúng với Curve448. Ngoài ra, còn có định nghĩa "edwards448" cũng cung cấp bản đồ giữa các điểm đường cong Montgomery và Edwards. Bản đồ để sử dụng được định nghĩa là:

$$ (u, v) = (\frac{y^2}{x^2}, \frac{(2 - x^2 - y^2)*y}{x^3}) $$

Nếu tôi hiểu chính xác các tài liệu tham khảo ở trên, người ta có thể chuyển đổi khóa chung thành tọa độ để sử dụng trong hàm X448. Ngoại lệ là trong trường hợp $x$ từ phương trình trên bằng 0 thì không thể áp dụng ánh xạ và không thể có phép biến đổi. Ngoài ra, chương liên quan đến Curve448 trong Mật mã đường cong elipx Ecc dẫn tôi đến cùng một hướng có thể biến đổi vật liệu chính hiện có và tái sử dụng nó sau đó cho X448. Nếu tôi hiểu chính xác thì khóa riêng trong ECC là một số nguyên thay vì "điểm đường cong".

Bây giờ tôi tò mò liệu có thực sự có thể chuyển đổi một cặp khóa hiện có để nó có thể được sử dụng lại cho ECDH hay không và bằng cách nào.Hoặc nếu cần "giới thiệu" cặp khóa thứ hai chỉ dành cho ECDH. Vì vậy, tôi vui lòng yêu cầu một số trợ giúp vì tôi chưa quen với chủ đề này.

Điểm:4
lá cờ es
  1. Bạn không cần phải chuyển đổi khóa công khai Edwards448 thành khóa công khai Curve448 tương đương song lý để thực hiện ECDH. Bạn chỉ có thể dính vào Edwards448. Sẽ có mức tăng hiệu suất nếu bạn sử dụng Curve448, nhưng tùy thuộc vào việc triển khai của bạn, mức tăng hiệu suất này có thể bị bù đắp phần lớn bởi chuyển đổi mà trình xác minh sẽ phải thực hiện để lấy khóa công khai Curve448 từ khóa chung Edwards448 của bạn. Bạn sẽ sử dụng chức năng "nhân vô hướng" của thư viện Edwards448 EC để thực hiện thao tác ECDH.

  2. Khóa riêng của EC là "số vô hướng", có nghĩa là một số nguyên dương nhỏ hơn kích thước nhóm của điểm tạo trên đường cong đó. Khóa công khai là các điểm trên đường cong và là các cặp tọa độ "phần tử trường". Một phần tử trường là một số nguyên dương nhỏ hơn số nguyên tố $p = 2^{448} - 2^{224} - 1$.

  3. Nếu bạn quyết định chuyển đổi từ Edwards448 sang Curve448, thì những điểm đó sẽ chia sẻ cùng một khóa riêng vô hướng.Lưu ý rằng do cách X448 chỉ sử dụng tọa độ x Curve448 trong thỏa thuận khóa biến-cơ-số-vô hướng-nhân, ánh xạ sẽ sao cho cả hai điểm Edwards448 $P$$I-P$ sẽ ánh xạ tới cùng một điểm Curve448 thỏa thuận khóa X448 (trong đó $I$ là điểm Edwards448 ở vô cực). Thật may mắn cho bạn, bạn đang ánh xạ từ Edwards448 sang Curve448, điều đó có nghĩa là bạn không thấy mình có sự mơ hồ.

  4. Việc chuyển đổi từ Edwards448 sang Curve448 chỉ đơn giản là: $$\texttt{curve448}_{x-coord} = \left(\frac{\texttt{ed448}_{y-coord}}{\texttt{ed448}_{x-coord}}\right)^2 $$ Lưu ý rằng "phép chia" đạt được thông qua phép nhân với nghịch đảo phép nhân mô đun. Thư viện EC của bạn sẽ cung cấp cho bạn chức năng này. Các thao tác được thực hiện $ mod\ p$.

  5. Lưu ý rằng Ed448 sẽ bắt đầu bằng khóa riêng 57 byte 'thô', băm nó bằng SHAKE256, xóa byte quan trọng nhất, buộc bit quan trọng nhất của byte quan trọng thứ hai thành 1 và xóa bit quan trọng nhất của byte thứ hai bit ít quan trọng nhất. Do đó, đây là phiên bản được băm và thay đổi của khóa riêng Ed448 thô mà bạn cần sử dụng giống hệt với Curve448. Các khóa Curve448 có kích thước 56 byte và sẽ an toàn khi cắt bỏ byte quan trọng nhất của khóa Edwards448 được băm và thay đổi 57 byte, vì khóa Edwards448 đó sẽ luôn chứa các số 0 trong byte quan trọng nhất. Lưu ý rằng vì tất cả các phần tử trường đều là little-endian, nên "byte quan trọng nhất" là byte cuối cùng trong mảng byte.

  6. Thật thú vị khi quan sát thấy triển khai BouncyCastle X448 thực hiện phép nhân vô hướng với điểm cơ sở Curve448 bằng cách yêu cầu triển khai BouncyCastle Ed448 thực hiện phép nhân vô hướng của cùng một đại lượng vô hướng với điểm cơ sở Ed448. BouncyCastle sau đó chuyển đổi kết quả trở lại điểm Curve448 tương đương bằng cách sử dụng cùng một công thức được chỉ định ở điểm 4 ở trên. xem mã đây.

lá cờ tr
Tôi không nghĩ (4) là đúng; đó sẽ là "bản đồ thông thường" nhưng edwards448 là 4 đồng phân, Như OP đã đề cập, nó phải là $u=y^2/x^2$
knaccc avatar
lá cờ es
@Conrado cảm ơn, bạn nói đúng, tôi đã đọc nhầm RFC7748. Chính xác như bạn đã lưu ý, biến thể Edwards của Curve448 mà công thức cũ của tôi áp dụng không giống với ánh xạ cần thiết cho Edwards448. Tôi đã sửa câu trả lời và viết một số mã để kiểm tra kỹ câu trả lời.
lá cờ in
@knacc cảm ơn bạn đã phản hồi. Tôi có một câu hỏi liên quan đến (5). Hiểu biết của tôi có đúng không khi người ta không thể trực tiếp sử dụng khóa riêng của cặp khóa hiện có cho X448. Nhưng thay vào đó, thuật toán được đề cập trong [RFC8032](https://datatracker.ietf.org/doc/html/rfc8032#section-5.2.5) cho đến và bao gồm cả bước 3 (loại trừ phép nhân) cần được áp dụng để lấy bí mật vô hướng s? Đối với tôi, các bước đầu tiên giống như trong [RFC7748](https://datatracker.ietf.org/doc/html/rfc7748#section-5). Bạn có muốn nói điều này trong (5) không?
knaccc avatar
lá cờ es
@dbog Đúng vậy, những gì tôi mô tả ở điểm 5 là những gì được mô tả trong các bước 1-3 của phần 5.2.5 của RFC8032. Đó là khóa riêng mà bạn sử dụng cho X448. Tôi không hiểu cụ thể những gì bạn đang đề cập đến trong RFC7748 - bạn có thể làm rõ không?
lá cờ in
@knacc cảm ơn vì phản hồi nhanh. Trong RFC7748, phần sau được nêu trong phần 5: "Các vô hướng được coi là các byte được tạo ngẫu nhiên.... Tương tự như vậy, đối với X448, hãy đặt hai bit có ý nghĩa nhỏ nhất của byte đầu tiên thành 0 và bit có ý nghĩa lớn nhất của byte cuối cùng thành 1. Điều này có nghĩa là số nguyên thu được là có dạng 2^447 cộng bốn lần giá trị trong khoảng từ 0 đến 2^445 - 1 (đã bao gồm)."
knaccc avatar
lá cờ es
Có, thỏa thuận khóa X448 lấy khóa riêng tư thô mà bạn cung cấp và thực hiện `&= 0xFC` trên byte đầu tiên và `|= 0x80` trên byte cuối cùng. Vì điều này đã được thực hiện với khóa riêng Ed448 thô trong các bước 1-3 của 5.2.5 của RFC8032 như được mô tả trong điểm 5 của tôi ở trên, nên khóa Ed448 đã được băm và thay đổi mà bạn sử dụng cho X448 sẽ không bị thay đổi bởi X448 kẹp, và sẽ tương thích.
lá cờ in
@knaccc cảm ơn rất nhiều! Điều này đã trả lời câu hỏi của tôi :)

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