Điểm:1

Bí mật dùng chung ECDH được thể hiện như thế nào trong SoftHSM

lá cờ ve

Tôi đang làm việc để triển khai ECDH với một số HSM. Theo lý thuyết đằng sau ECDH, bí mật được chia sẻ được tạo là một điểm trên đường cong elip (x, y), chính xác là điểm được trả về bởi HSM.

Nhưng khi tôi kiểm tra với SoftHSM qua thư viện PKCS#11, hàm ECDH trả về một khóa đối xứng trực tiếp ngay cả khi tham số KDF được đặt thành null. Tôi đã thực hiện một số nghiên cứu và thấy rằng một số byte của bí mật được chia sẻ được trả về dưới dạng giá trị của khóa đối xứng: https://github.com/google/boringssl/blob/master/include/openssl/ecdh.h#L82

Tuy nhiên, tôi không hiểu làm thế nào để thực hiện thao tác như vậy trên bí mật được chia sẻ nếu nó được biểu diễn dưới dạng điểm EC (x, y).

Có ai biết cách SoftHSM xử lý ECDH với tham số KDF là null không? Đặc biệt, bí mật được chia sẻ sau khi được tạo trong SoftHSM nhưng trước khi được xử lý và đưa vào đối tượng khóa ở dạng nào?

Cảm ơn

Maarten Bodewes avatar
lá cờ in
Thông thường các tọa độ X, Y được mã hóa dưới dạng các giá trị số nguyên lớn, có kích thước tĩnh, không dấu và sau đó được nối. Các byte sau đó được lấy từ phía bên tay trái. Nếu tôi phải đoán đó sẽ là những gì một thư viện làm, nhưng để chắc chắn bạn phải xem mã nguồn *hoặc* kiểm tra nó bằng một cặp khóa/thư viện khác.
lá cờ cn
Nhiều triển khai ECDH chỉ tính toán một tọa độ của bí mật được chia sẻ.
kelalaka avatar
lá cờ in
https://github.com/opendnssec/SoftHSMv2
Maarten Bodewes avatar
lá cờ in
@CodesInChaos Xin chào, rất vui vì bạn vẫn ở đây! Vâng, tôi tự hỏi liệu tôi có nên đề cập rằng đó là một tùy chọn khác, chỉ sử dụng tọa độ X hay không. Nhưng này, khi đến từ phía bên trái, hy vọng nó không tạo ra sự khác biệt lớn (tất nhiên có thể một bên chỉ sử dụng X để dẫn xuất khóa và X và Y còn lại).
Fan Zhang avatar
lá cờ ve
Cảm ơn @MaartenBodewes đã trả lời.Tôi đã xem xét mã của SoftHSM và nó giống như những gì bạn đã nói, lấy độ dài nhất định từ bí mật được tạo. Nhưng tôi bối rối làm thế nào bí mật được tạo ra được chuyển đổi từ điểm EC thành byte. Có phải x và y được chuyển đổi thành byte và được nối hoặc có một phương thức cụ thể không? Ví dụ, ECPublicKey được hình thành giống như thẻ + x + y. Cảm ơn!
Fan Zhang avatar
lá cờ ve
Cảm ơn @CodesInChaos đã trả lời. If I have a generated secret as (64830192060261760049283727294808668110354933976341491567578109548061246609139, 59423428101938593951845145007294894818095890801518227616691263742277914054172) and want an AES128 key, you mean most implementations take the x coordinate and convert it into a byte array and then extract the first 128 bits of it? Cảm ơn
Maarten Bodewes avatar
lá cờ in
Như đã chỉ ra trong nhận xét đầu tiên, thông thường chúng không được chuyển thành mã hóa DER mà được giữ thành số nguyên được ký tĩnh. Sẽ thật kỳ lạ khi mã hóa điểm bằng byte dữ liệu giả, vì bạn không muốn mã hóa thẻ và độ dài như một phần của khóa đối xứng, bạn muốn dữ liệu chủ yếu là ngẫu nhiên. Một KDF chắc chắn sẽ giúp ích. Lưu ý rằng tọa độ Y có thể được tính toán từ tọa độ X, vì vậy sẽ không có ý nghĩa gì nhiều nếu đưa tọa độ đó vào một khóa hoặc trong tài liệu tạo khóa đầu vào của KDF. Đây là lý do tại sao nhiều triển khai chỉ sử dụng X thay vì X và Y.

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