Установка и использование платформы

REST API: реализация методов шифрования

https://img.shields.io/badge/auth-required-orange.svg

Для реализации методов шифрования предусмотрены методы REST API группы crypto.

Принцип работы этой группы методов аналогичен набору gRPC-методов contract_crypto_service.proto.

POST /crypto/encryptSeparate

Шифрование данных, переданных в запросе, уникальными ключами CEK отдельно для каждого получателя, каждый CEK шифруется (оборачивается) отдельным ключом KEK.

В запросе подаются следующие данные:

  • sender - адрес отправителя данных;

  • password - пароль к зашифрованным данным;

  • encryptionText - шифруемые данные (в виде строки);

  • recipientsPublicKeys - публичные ключи получателей-участников сети;

  • crypto_algo - используемый алгоритм шифрования. Доступные значения: gost-28147 - ГОСТ 28147-89; gost-3412-2015-k - ГОСТ 34.12-2015; aes - AES.

Если в вашей сети используется шифрование по ГОСТ, вам будут доступны только алгоритмы gost-28147 и gost-3412-2015-k. При отключенном шифровании по ГОСТ доступен только алгоритм шифрования aes.

Пример запроса:

POST /crypto/encryptSeparate:
{
  "sender": "3MsHHc8LvyjPCKeSst9vsYcsHeQVzH6YJkL",
  "password": "",
  "encryptionText": "some string to encrypt",
  "recipientsPublicKeys": [
    "3MuNFC1Z8Tuy73pMzVUT6yowk4anWA8MNNE"
  ],
  "cryptoAlgo": "aes"
}

В ответе метода поступают следующие данные для каждого получателя:

  • encrypted_data - зашифрованные данные;

  • public_key - публичный ключ получателя;

  • wrapped_key - результат шифрования ключа для получателя.

Пример ответа:

POST /crypto/encryptSeparate:
{
 "encryptedText": "IZ5Kk5YNspMWl/jmlTizVxD6Nik=",
 "publicKey": "5R65oLxp3iwPekwirA4VwwUXaySz6W6YKXBKBRL352pwwcpsFcjRHJ1VVHLp63LkrkxsNod64V1pffeiZz5i2qXc",
 "wrappedKey": "uWVoxJAzruwTDDSbphDS31TjSQX6CSWXivp3x34uE3XtnMqqK9swoaZ3LyAgFDR7o6CfkgzFkWmTen4qAZewPfBbwR"
},

POST /crypto/encryptCommon

Шифрование данных, переданных в запросе, единым ключом CEK для всех получателей, каждый ключ CEK шифруется (оборачивается) отдельным ключом KEK для каждого получателя.

В запросе POST /crypto/encryptCommon подаются данные, аналогичные запросу POST /crypto/encryptSeparate.

В ответе метода поступают следующие данные:

  • encrypted_data - зашифрованные данные;

  • recipient_to_wrapped_structure - структура в формате «ключ : значение», содержащая публичные ключи получателей с соответствующими результатами шифрования ключей для каждого из них.

Пример ответа:

POST /crypto/encryptCommon:
{
  "encryptedText": "NpCCig2i3jzo0xBnfqjfedbti8Y=",
  "recipientToWrappedStructure": {
    "5R65oLxp3iwPekwirA4VwwUXaySz6W6YKXBKBRL352pwwcpsFcjRHJ1VVHLp63LkrkxsNod64V1pffeiZz5i2qXc":
  "M8pAe8HnKiWLE1HsC1ML5t8b7giWxiHfvagh7Y3F7rZL8q1tqMCJMYJo4qz4b3xjcuuUiV57tY3k7oSig53Aw1Dkkw",
    "9LopMj2GqWxBYgnZ2gxaNxwXqxXHuWd6ZAdVqkprR1fFMNvDUHYUCwFxsB79B9sefgxNdqwNtqzuDS8Zmn48w3S":
  "Doqn6gPvBBeSu2vdwgFYMbDHM4knEGMbqPn8Np76mNRRoZXLDioofyVbSSaTTEr4cvXwzEwVMugiy2wuzFWk3zCiT3"
   }
  }

POST /crypto/decrypt

Дешифровка данных, зашифрованных при помощи криптографического алгоритма, используемого сетью. Дешифровка возможна, если ключ получателя сообщения находится в keystore ноды.

В запросе подаются следующие данные:

  • recipient - публичный ключ получателя из keystore ноды;

  • password - пароль к зашифрованным данным;

  • encryptedText - зашифрованная строка;

  • wrappedKey результат шифрования ключа для указанного получателя;

  • senderPublicKey - публичный ключ отправителя данных;

  • cryptAlgo - используемый алгоритм шифрования. Доступные значения: * gost-28147 - ГОСТ 28147-89; * gost-3412-2015-k - ГОСТ 34.12-2015; * aes - AES.

Если в вашей сети используется шифрование по ГОСТ, для дешифровки будут доступны только алгоритмы gost-28147 и gost-3412-2015-k. При отключенном шифровании по ГОСТ доступен только алгоритм шифрования aes.

Пример запроса:

POST /crypto/decrypt:
{
  "recipient": "3NkZd8Xd4KsuPiNVsuphRNCZE3SqJycqv8d",
  "password": "12345qwert",
  "encryptedText": "t859AE7idnjPpn3lUiorfzSGwcGPMVdOhQe1HAhoI0MOXOQPBc8TUhn+8pKRCL8evH2Ra9Vc",
  "wrappedKey": "2nfob2yW76xj2rQBWZkzFD2UjYymWqQUCpFqbSWQiSYnuaw6DZoAde8KsTCMxPFVHA",
  "senderPublicKey": "CgqRPcPnexY533gCh2SSvBXh5bca1qMs7KFGntawHGww",
  "cryptoAlgo": "aes"
}

В ответ на запрос поступает поле decryptedText, содержащее расшифрованную строку.

Пример ответа:

POST /crypto/decrypt:
{
"decryptedText": "some string for encryption",
}
Смотрите также