B2BB2CH2H

Шифрование TXT RSA-сертификатом

Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту alfa_api@alfabank.ru. При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).

Подписание и шифрование TXT
1

Подготовить сообщение в формате TXT

Пример сообщения
1sub=1234567890
2name=John Doe
3admin=true
4iat=1657882689
5exp=1657886289
2

Подписать запрос

Выполните операцию подписания так, чтобы в результате получился отсоединённый от подписываемого контента PKCS7-контейнер, содержащий значение подписи.

Стандарт: RFC 2315

Алгоритм: RS256

Сформированный PKCS7-контейнер со значением подписи необходимо передать в заголовке X-Signature.

Пример PKCS7-контейнера с подписью
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
3

Зашифровать запрос

1. Выполните шифрование исходного тела запроса, сформированного на шаге 1, симметричным алгоритмом:

Параметры шифрования:

  • •
    алгоритм блочного шифрования: AES;
  • •
    режим сцепления блоков: CBC ;
  • •
    схема дополнения контента (padding): PKCS5 .

Шаги:

  1. 1.

    Сгенерируйте секретный ключ AES (Symmetric Key) . Размер ключа - 128 бит.

  2. 2.

    Сгенерируйте вектор инициализации режима CBC (Initialization Vector) . Размер - 128 бит.

    Если размер данных не кратен размеру блока AES - 128 бит, используйте PKCS5 для дополнения данных до нужного размера.

  3. 3.

    Зашифруйте сообщение, используя Symmetric Key и Initialization Vector в режиме CBC .

  4. 4.

    Передайте полученное зашифрованное сообщение в теле запроса.

Пример зашифрованного тела запроса
1lpAFdCdfut04uCkJWZ9Vcwt10sufYh3EEd1fMVWAEfbA6d++7i4syHytmBCaAMvCAkL1hc6rKLdIpQ5WDoEML4ePC3XY7ubFPXtRogqeS9g=

2. Выполните шифрование симметричного секретного ключа и вектора инициализации асимметричным алгоритмом:

Параметры шифрования:

  • •
    алгоритм шифрования: RSA;
  • •
    режим сцепления блоков: NONE (не использовать) ;
  • •
    схема дополнения контента (padding): OAEP .

Шаги:

  1. 1.
    Зашифруйте с помощью открытого ключа сертификата Банка секретный ключ Symmetric Key , используя алгоритм RSA c механизмом OAEP .
  2. 2.
    Аналогичным образом зашифруйте вектор инициализации Initialization Vector .
  3. 3.
    Передайте полученный зашифрованный секретный ключ Symmetric Key в заголовке запроса X-SymmetricKey .
  4. 4.
    Передайте полученный зашифрованный вектор инициализации Initialization Vector в заголовке запроса X-InitializationVector .
Пример заголовков
1X-SymmetricKey: igGgA4ztpFJzvmZLZK0sI2qKF3csjcA3KiBrfAr5xXTY+vz+7r3Cpp1ijpfVWpva+C2TXcJDvU4Te8aReHKpKlXPP4wHX9MLRvc/wjeVGo+bWEEdEO9A1frCcb/rGIqgxNGE4kqfHMFlG08Hw6sFoP8thX7+x4FUkHs1Shps1Cl5aGI4o6nBBuIQFuOpNAVtENEKMaL9vr2vPzae6B/x5zURrBkji8lhryuEUOSGBVB2lyYPp/Y13YgQpZbaVwgt3y+rXQTWhsMOL2Aa6bIziGSNcQaC2G1K0P5tfffMIEQ7cWZpc7EdRSwsfGSuJx79RORLoa+U1s0hIftX3POtwQ==
2X-InitializationVector: btds4TgsUMdY23nav7ZulbNdfEvREyahN3Z+xccXijfdyus1TAPeqi8SR+X8b8QniJhZsRZFzI+hZg3WbiRliT6XyIaur0EXFSxxojTNDY+qrsq5+E79y07R0+NQLGGvGal81ssBSYe0tUeAy8Z4BbJ6dWLx6N8T9ABacKvVI+6ZE1iE1jazRqDOpqXtppY2Jl5SY0ibmSc03ydvId2Io5MC8MncxX29xcsR+ZMSh95qRo/xIFxUc/Lpbc2/gL2m/1ZyIfVsuc8/87sfUMhTY6V5r3g9otX76QWGp66uaXBMjSmUtIXZv1BPN85BL2shsYJ1GIfCwOpqQg8jXqwXTA==
4

Выполнить запрос

Если добавить заголовки Content-Type: text/plain + X-Request-ChannelSecurity: NO и отправить запрос, то запрос не будет расшифрован и подпись запроса не будет проверяться.

Если добавить заголовки Content-Type: text/plain + X-Request-ChannelSecurity: ENCRYPTION и отправить запрос, то запрос будет расшифрован и подпись будет проверяться.

Банк дешифрует запрос и проверяет подпись. Если подпись валидна - запрос обрабатывается, если невалидна - Банк определяет запрос как неподлинный и возвращает ошибку. В случае ошибки с дешифровкой запроса будет возращена ошибка. Возвращаемая ошибка будет подписана и зашифрована.

Дешифрование и проверка подписи TXT
1

Дешифровать ответ

Если добавить заголовки Accept: text/plain + X-Response-ChannelSecurity: NO , то ответ не будет подписан и зашифрован.

Если добавить заголовки Accept: text/plain + X-Response-ChannelSecurity: ENCRYPTION , то полученный ответ (в том числе ошибки) будет подписан и зашифрован.

  1. 1.
    Получите в ответе заголовок X-SymmetricKey - зашифрованный симметричный ключ AES (Symmetric Key) .
  2. 2.
    Получите в ответе заголовок X-InitializationVector - зашифрованный вектор инициализации режима CBC (Initialization Vector) .
  3. 3.
    Дешифруйте каждый из этих заголовков с помощью закрытого ключа, сгенерированного на первом шаге для выпуска RSA-сертификата сервиса "Электронная подпись":
    • •
      алгоритм шифрования: RSA;
    • •
      режим сцепления блоков: NONE (не используется) ;
    • •
      схема дополнения контента (padding): OAEP .
  4. 4.
    Дешифруйте тело ответа с помощью полученных симметричного ключа и вектора инициализации:
    • •
      алгоритм блочного шифрования: AES;
    • •
      режим сцепления блоков: CBC ;
    • •
      схема дополнения контента (padding): PKCS5 .
Пример заголовков
1X-SymmetricKey: igGgA4ztpFJzvmZLZK0sI2qKF3csjcA3KiBrfAr5xXTY+vz+7r3Cpp1ijpfVWpva+C2TXcJDvU4Te8aReHKpKlXPP4wHX9MLRvc/wjeVGo+bWEEdEO9A1frCcb/rGIqgxNGE4kqfHMFlG08Hw6sFoP8thX7+x4FUkHs1Shps1Cl5aGI4o6nBBuIQFuOpNAVtENEKMaL9vr2vPzae6B/x5zURrBkji8lhryuEUOSGBVB2lyYPp/Y13YgQpZbaVwgt3y+rXQTWhsMOL2Aa6bIziGSNcQaC2G1K0P5tfffMIEQ7cWZpc7EdRSwsfGSuJx79RORLoa+U1s0hIftX3POtwQ==
2X-InitializationVector: btds4TgsUMdY23nav7ZulbNdfEvREyahN3Z+xccXijfdyus1TAPeqi8SR+X8b8QniJhZsRZFzI+hZg3WbiRliT6XyIaur0EXFSxxojTNDY+qrsq5+E79y07R0+NQLGGvGal81ssBSYe0tUeAy8Z4BbJ6dWLx6N8T9ABacKvVI+6ZE1iE1jazRqDOpqXtppY2Jl5SY0ibmSc03ydvId2Io5MC8MncxX29xcsR+ZMSh95qRo/xIFxUc/Lpbc2/gL2m/1ZyIfVsuc8/87sfUMhTY6V5r3g9otX76QWGp66uaXBMjSmUtIXZv1BPN85BL2shsYJ1GIfCwOpqQg8jXqwXTA==
2

Проверить подпись ответа от Банка

Ответ будет представлен в виде исходного тела ответа. Необходимо проверить подпись с помощью открытого ключа сертификата Банка.

Стандарт - RFC 2315

Алгоритм - RS256

В заголовке ответа X-Signature будет передано значение подписи PKCS7.

3

Обработать ответ в формате TXT

Пример ответа
1sub=1234567890
2name=John Doe
3admin=true
4iat=1657882689
5exp=1657886289