Операции шифрования данных

Для операций шифрования/расшифрования данных применяются симметричные ключи CEK и KEK. CEK (Content Encryption Key) используется для шифрования текстовых данных, KEK (Key Encryption Key) используется для шифрования CEK. Ключ CEK формируется блокчейн-узлом случайным образом с применением соответствующих алгоритмов хеширования. Ключ KEK формируется нодой на базе алгоритма Диффи-Хелмана, используя публичные и приватные ключи отправителя и получателей, и применяется для шифрования ключа CEK.

Симметричный ключ СЕК недоступен для прочтения и не отображается в процессе шифрования. От отправителя к получателю он передается в зашифрованном виде (wrappedKey) по открытым каналам связи вместе с зашифрованным сообщением. Одним из таких каналов может являться запись в блокчейн - DataTransaction или стейт смарт-контракта. Ключ КЕК от отправителя к получателю не передается, он восстанавливается получателем на основе своего закрытого ключа и известного публичного ключа отправителя (алгоритм Diffie-Hellman key exchange).

Процедура шифрования текстовых данных на базе алгоритма Диффи-Хелмана

Процедура шифрования текстовых данных на базе алгоритма Диффи-Хелмана

Процесс шифрования/расшифрования данных включает в себя следующие действия:

  1. Для шифрования данных для каждого получателя отдельно используется метод POST /crypto/encryptSeparate. Параметры в объекте запроса:

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

  • password - пароль от ключевой пары отправителя, создаваемый вместе с аккаунтом;

  • encryptionText - текст для шифрования;

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

  1. Для шифрования данных для всех получателей единым ключом CEK используется метод POST /crypto/encryptCommon.

  2. Для расшифровывания данных используется метод POST /crypto/decrypt. Параметры в объекте запроса:

  • recipient - адрес получателя;

  • password - пароль от ключевой пары получателя, создаваемый вместе с аккаунтом;

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

  • wrappedKey - обёрнутый ключ, полученный при шифровании данных;

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