ECDHE Curve25519 Поля для подписи обмена ключами и ключевых значений
У меня есть API, в котором мне нужно передать "KeyMaterial", который, согласно API Docs, предназначен для:
Contains the cryptographic parameters that are required to perform End-to-End encryption for sharing the information between the producer and the consumer in a secure manner.
Вот пример, которым они поделились
"KeyMaterial": {
"cryptoAlg": "ECDHE",
"curve": "Curve25519",
"params": "string",
"DHPublicKey": {
"expiry": "2018-12-23T11:39:57.153Z",
"Parameters": "string",
"KeyValue": "683938505ec529a700fcceab66273d1aa78d494208a4769930f0818872159265"
},
"Nonce": "R4s6vNI7I/JfdeA3/6dMMQ==",
"Signature": "jFJcYCOTVV6iiLPlM7qY+Zz+3PF8oUPFg1byb1GNr+k="
}
Они также упоминают, что
Поле "Подпись": ссылка на стандарт подписи для получения дополнительной информации: https://www.w3.org/TR/xmldsig-core1/
"KeyValue": содержит значение эфемерного открытого ключа.
Однако я не понял, как именно заполнять эти параметры. Я не смог найти эталонных реализаций для ECDHE + Curve25519. Кто-нибудь может объяснить, как именно заполнить эти параметры? Как создать поле подписи? и поле KeyValue в "DHPublicKey"
1 ответ
Открытый ключ можно сгенерировать следующим образом.
Создать закрытый ключ X25519: 32 байта случайным образом
закрытый ключ * точка генератора = открытый ключ
Одноразовый номер должен быть случайным байтом, преобразованным в кодировку base64.
Насчет подписи, я не знаю, что это за подпись.