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 ответ

Открытый ключ можно сгенерировать следующим образом.

  1. Создать закрытый ключ X25519: 32 байта случайным образом

  2. закрытый ключ * точка генератора = открытый ключ

Одноразовый номер должен быть случайным байтом, преобразованным в кодировку base64.

Насчет подписи, я не знаю, что это за подпись.

Другие вопросы по тегам