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

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

gRPC-интерфейс ноды предусматривает возможность зашифровать произвольные данные при помощи алгоритмов шифрования, применяемых в блокчейн-платформе Waves Enterprise, а также дешифровать их. Для этого предусмотрен набор запросов, описанных в файле contract_crypto_service.proto:

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

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

  • Decrypt – дешифровка данных.

Важно

Типы данных полей для запросов и ответов указаны в protobuf-файлах.

Подсказка

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

Запросы и ответы шифрования

Запросы EncryptSeparate и EncryptCommon требуют ввода следующих данных:

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

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

  • encryption_data – шифруемые данные (в виде массива байт в кодировке base64);

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

  • crypto_algo – используемый алгоритм шифрования. Доступные значения:

    • 1 – ГОСТ 28147-89;

    • 2 – ГОСТ 34.12-2015;

    • 3 – AES.

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

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

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

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

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

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

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

Запрос и ответ дешифровки

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

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

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

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

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

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

  • crypto_algo – используемый алгоритм шифрования. Доступные значения:

    • 0 – алгоритм неизвестен;

    • 1 – ГОСТ 28147-89;

    • 2 – ГОСТ 34.12-2015;

    • 3 – AES.

В ответ на запрос Decrypt поступает поле decrypted_data, содержащая расшифрованные данные в виде массива байт в кодировке base64.

Смотрите также