Điểm:2

Sử dụng cùng một khóa riêng cho cả X25519 và ECDSA (sử dụng curve25519)

lá cờ ru
jjd

Tôi đang viết một ứng dụng cần cả mã hóa/giải mã và ký/xác minh và tôi chọn X25519 làm thuật toán thỏa thuận khóa sẽ tạo khóa để mã hóa và ECDSA để ký tin nhắn.

Tạo khóa: Tôi tạo khóa riêng curve25519 từ một thuật ghi nhớ (vì vậy tôi có một loại khóa riêng 32 byte ngẫu nhiên).

Bây giờ tôi có mảng 32 byte, tôi muốn sử dụng mảng byte mảng này cho cả mã hóa và ký, vấn đề mà tôi gặp phải là, đối với X25519, tôi cần áp dụng tính năng kẹp khóa để khóa riêng này có hiệu lực, giống như sau:

privateKey[0] &= 248; // hủy đặt 3 bit ít quan trọng nhất
privateKey[31] &= 127 // bỏ đặt bit quan trọng nhất
privateKey[31] |= 64 // đặt bit quan trọng thứ hai

Nhưng đối với ECDSA, khóa cần nằm trong phạm vi $[1, N]$, trong đó N (đối với đường cong25519) bằng $2^{252}$ + một yếu tố nhỏ và vì vậy tôi cần chuyển đổi mảng 32 byte của mình thành một số phù hợp với phạm vi này.

Tôi có một vài câu hỏi:

  • Tại sao khóa riêng X25519 không cần phải vừa với phạm vi $[1, N]$?
  • Ngoài ra, tại sao việc áp dụng chức năng kẹp phím được sử dụng trong X25519 cho phím được sử dụng cho ECDSA lại không quan trọng?
knaccc avatar
lá cờ es
Không sử dụng trực tiếp cùng một khóa riêng để ký và mã hóa. Sử dụng HKDF-Mở rộng trên khóa chính 32 byte ngẫu nhiên thống nhất của bạn để tạo các khóa ký và mã hóa riêng biệt. Sau đó, hãy để thư viện của bạn kẹp hoặc giảm mod N theo bất kỳ cách nào họ cho là cần thiết.
Maarten Bodewes avatar
lá cờ in
Xin chào jjd & chào mừng. Tôi đã xóa phần triển khai/lâu đài Bouncy; cái đó dành cho [so] hoặc có thể là [codereview.se]; nó lạc đề ở đây. Vui lòng đọc lại và xóa câu hỏi của bạn trước khi đăng, người dùng không cần phải thực hiện, ví dụ:. viết hoa cho bạn.
jjd avatar
lá cờ ru
jjd
cảm ơn knaccc câu trả lời của bạn rất hữu ích!
jjd avatar
lá cờ ru
jjd
Tôi sẽ đảm bảo tuân theo các quy tắc vào lần tới khi tôi mắc lỗi.
kelalaka avatar
lá cờ in
Điều này có trả lời câu hỏi của bạn không? 1) [Tạo khóa công khai cho Ed25519 so với X25519](https://crypto.stackexchange.com/questions/76156/public-key-generation-for-ed25519-vs-x25519) 2) [Sử dụng một khóa Ed25519 duy nhất để mã hóa và chữ ký](https://crypto.stackexchange.com/q/37896/18298) 3) [Sử dụng cùng một khóa riêng cho cả X25519 và ECDSA (sử dụng đường cong25519)](https://crypto.stackexchange.com/q/ 63732/18298)
jjd avatar
lá cờ ru
jjd
nó làm, cảm ơn!
Điểm:3
lá cờ gb

Tại sao khóa riêng X25519 không cần phải vừa với phạm vi $[1,N]$?

Bằng cách bỏ cài đặt bit quan trọng nhất và ba bit ít quan trọng nhất, bạn giới hạn khóa thực sự chỉ còn 252 bit. Khi bạn nói $N$$2^{252}$ + một yếu tố nhỏ, bạn đang nói về thứ tự của phân nhóm được sử dụng bởi x25519, không phải thứ tự đầy đủ của nhóm đường cong. Nhóm con này có chỉ số (hoặc đồng sáng lập) 8. Việc bỏ cài đặt ba bit thấp hơn buộc bí mật phải là bội số của 8, nghĩa là nó sẽ nằm trong nhóm con có thứ tự nguyên tố lớn này.

Ngoài ra, tại sao việc áp dụng chức năng kẹp phím được sử dụng trong X25519 cho phím được sử dụng cho ECDSA lại không quan trọng?

Theo hiểu biết tốt nhất của tôi, Curve25519 không được sử dụng cho ECDSA. Ý bạn là EdDSA (cụ thể là ed25519)?

jjd avatar
lá cờ ru
jjd
Cảm ơn câu trả lời của bạn! bạn nói đúng, tôi nghĩ rằng đường cong25519 cho ECDSA là một lựa chọn tồi từ phía tôi, hiện tôi đang nghĩ về việc sử dụng EdDSA, tôi biết rằng EdDSA và X25519 sử dụng các đường cong khác nhau, nhưng chúng đang sử dụng cùng một chức năng kẹp phím phải không? có an toàn khi sử dụng cùng một khóa riêng (nhưng các khóa chung khác nhau) cho cả EdDSA và X25519 hay sẽ an toàn hơn nếu tôi lấy hai khóa khác nhau bằng cách sử dụng 32 byte ngẫu nhiên của mình?
meshcollider avatar
lá cờ gb
Bạn chắc chắn nên lấy hai khóa riêng biệt. Việc sử dụng lại các khóa hầu như luôn tiềm ẩn những rắc rối về bảo mật không lường trước được. Btw, hãy nhớ chấp nhận và nêu lên câu trả lời nếu nó hữu ích!
jjd avatar
lá cờ ru
jjd
vừa mới làm, tôi cần ít nhất 15 danh tiếng để upvote tho, cảm ơn vì câu trả lời!
dave_thompson_085 avatar
lá cờ cn
@jjd: thực ra Ed25519 (một phiên bản phổ biến của EdDSA) và X25519 sử dụng cùng _curve_ về mặt toán học, nhưng cách biểu diễn khác nhau -- X25519 sử dụng biểu mẫu Montgomery và Ed25519 sử dụng biểu mẫu Edwards và các biểu mẫu này có các hệ số và phép tính khác nhau, nhưng chúng là những gì các nhà toán học gọi tương đương hai chiều.Xem https://datatracker.ietf.org/doc/html/rfc7748.

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