B2BB2CH2H

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

Подписать и зашифровать XML

1

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

Пример сообщения
<?xml version="1.0" encoding="UTF-8"?>
<Request>
    <XmlElementName1>XmlElementValue1</XmlElementName1>
    <XmlElementName2>XmlElementValue2</XmlElementName2>
</Request>
2

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

Сформируйте электронную подпись в cоответствии с XMLDsig. Необходимо использовать:

Пример XMLDsig
<?xml version="1.0" encoding="UTF-8"?>
<Request>
    <XmlElementName1>XmlElementValue1</XmlElementName1>
    <XmlElementName2>XmlElementValue2</XmlElementName2>
    <ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            </ds:CanonicalizationMethod>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256">
            </ds:SignatureMethod>
            <ds:Reference URI="">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature">
                    </ds:Transform>
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                    </ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384">
                </ds:DigestMethod>
                <ds:DigestValue>PFofJkUS6p/00mh0rGBsixzt/IrT0VOQRD3kvQkD3TyPEle2o1Ba7NCMR/ATvzQF</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>wxBWAIhbSFENVHMdLJ051lZGlhEUbIPPo9W/4BrBjOtNo/cfu9MxCLv7GSqVz0Kr6g6L6+k9q+hu&#13;
CVAebijxjUmub3KUTx7GPq6SjQsrFo5sZmZg73eyLqiEM3LFux4PJEXeVSadzOpQGBg0ygDZ83gU&#13;
OXY/YJcwSRcBEQpNp+62ot1ua90QBJzNApZkWtxwSlBvGS0SYmh+6vg0yFbc60h231Q4bBSdWJcD&#13;
vaAIIayCwbt3oUm2simOGvc/adfz4vn6xiLQCAEDsyD0iK9m9WssqIZKepe8wI0kJCC9CwHx6Zxg&#13;
Geys+G77rQvskKmN13EX3sokbLAnzb4cWnwZVQ==
</ds:SignatureValue>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCG&#13;
SAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMC&#13;
UlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJ&#13;
c3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCB&#13;
pzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjEL&#13;
MAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQ&#13;
mNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIB&#13;
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx&#13;
6gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX&#13;
5HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hs&#13;
dng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUw&#13;
W3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA&#13;
1wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYD&#13;
VR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvp&#13;
c/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9k&#13;
aXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9p&#13;
bnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBv&#13;
aW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0&#13;
dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8&#13;
BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEu&#13;
Y3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0Fs&#13;
ZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZI&#13;
hvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfah&#13;
cWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI&#13;
3s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9&#13;
ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY&#13;
1BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRl&#13;
hqI=
</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature>
</Request>
3

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

  1. 1.
    Выполните шифрование подписанного на предыдущем шаге сообщения симметричным алгоритмом:
    • Параметры шифрования:
      • Алгоритм блочного шифрования: AES ;
      • Режим сцепления блоков: CBC ;
      • Схема дополнения контента (padding): PKCS5 .
    • Сгенерируйте секретный ключ AES (Symmetric Key) . Размер ключа - 128 бит;
    • Сгенерируйте вектор инициализации режима CBC (Initialization Vector) . Размер - 128 бит;
    • Если размер данных не кратен размеру блока AES Размер - 128 бит. Используйте PKCS5 для дополнения данных до нужного размера;
    • Зашифруйте сообщение, используя Symmetric Key и Initialization Vector в режиме CBC ;
    • Передайте полученное зашифрованное сообщение в теле запроса.
Пример зашифрованного тела запроса
FXCTdsI0cNpiwf17K9ZX113TOUwbQIrlD7ycM9PELZAp+KN8mP+kFklDafqbQWDjA2V9fqLcUljGo7S1v+D262AJnUi49XEugcJkKSwnjmYWCottWMB0XYCT+hu+/SOPgedFek5DzuAEPXxv7g/qBKaqQXJQNZ7ucqg+AOCxpVYLlD7czhiymUKviTzTBasyqx1andFRW30GhShjCPWopFe6VfciR+K9HcEKnkJO/QxKdIuSrEE1qS7uYsqDdg6aOO5M3B984oWX7z216T63skSl6OVQNKydF98zLkDrLhDRQysYaFD+HKDaXnWKLUWX0xJqA/K4kvU8xdOZbqiqiHfMkw3Fp03z/oVGatxFQWGDKTaSgAHlNscwl3X2YxEMb9IWS+NyCqbahF+WF9WyJIdoPTC/vFxzHl+UwPS8+nppSpRvQSO4ae4jtdA2V4sa4/N+lB8UtQs7ZuBB6gExLGL7DdB9kPpG3T6rN6uzCWDst9j4BaHsV5k4ZbmTR8VLwdXm1+5k+tTzvW0X/n/cziTaBD8dmNPsuSTWxmQRAAhVQOmzBYTWR4gx3xjHVyRuiUMV5nIBDq48m5PY/SBWWnplvYaomcPthxNaaBfo3iVOCXfUEvaHrn/npq3tGK+6ePDbXAWzAQZYfV7OaYAqz7+q8SvXElrT2n1t67gL7obvqPsIOK/wzD5uZF8KsQy1haYqciIrQe9omWeN24jyl+zHqbmn6RCAQXYZ5ZG9Qq21Jckkqgo0wo/lQNtNq3udzhRe1s
  1. 1.
    Выполните шифрование симметричного секретного ключа и вектора инициализации ассиметричным алгоритмом:
    • Параметры шифрования:
      • Алгоритм шифрования: RSA ;
      • Режим сцепления блоков: NONE (не использовать) ;
      • Схема дополнения контента (padding): OAEP .
    • Зашифруйте с помощью открытого ключа сертификата Банка секретный ключ Symmetric Key используя алгоритм RSA c механизмом OAEP ;
    • Аналогичным образом зашифруйте вектор инициализации Initialization Vector ;
    • Передайте полученный зашифрованный секретный ключ Symmetric Key в заголовке запроса X-SymmetricKey ;
    • Передайте полученный зашифрованный вектор инициализации Initialization Vector в заголовке запроса X-InitializationVector .
Пример заголовков
X-SymmetricKey: xrzL4iCYGP0NCXUjVYDUXshS7QEye3iTzpH+TIgJuzCcBFtMtdFsHVymsT5HsEeVZr01nGpyTkM6eNgKj6dH9hCEuFfv+dkGtBbd//jSPDntzKxFRkK7vxrugtFNILkxgZK1FaBBDOaOya0U1xJCc34FKrH/DltbPOxoxA9v7mS9ZF0kebhQO5wvlhGH525uKhe7a0XkcxBH6XRdElwM3PExY194uFQ+OH+EeEc+6AhGKk+pLsIeATkgNHsLDuGx1gzQy4iLf/NQZXT8Pkldw8fd+ECXiqh7nXOY5sdmTJ08FyPZ+Vsxre+Cc6yoRgRTzwnkqx3XsHxv80sXRZcDeg==
X-InitializationVector: aOwLSirltsxJx3GdZqJ0N+b2YmtY04NTIQmbNdT0v4Wk38T5OJtdAhmP4GWSqDAA7TYuEqccFnRi1DurkizkLqX02w4k+OfpFHJZaHDKg9rMOmdjso7KQMLRmWBzUujs9ray9KYSgPydDvzteIJIoO89C6zEP4Mqv5JQzEnH+/ChtSuDeZ1xPfbgiLWppa0O2whq8wHzsZtYckBd4LEjbQgy1/cuuq7IOOtK+oABfa/WCYsksgbxwX0VkC1OKNPvL2Izm8aPRnocLSKFiDNDkMORFcKWVQfugo5WGFRwcB9Ihixud2GzZcQ93JUviXZswCb9LCPdhrDe2G2ddZCWng==
4

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

Добавьте заголовок Content-Type = "application/xml" и отправьте запрос. Далее Банк дешифрует запрос и проверяет подпись. Если подпись валидна - запрос обрабатывается, если не валидна - Банк определяет запрос как неподлинный и возвращает ошибку. В случае ошибки с дешифровкой запроса также будет возращена ошибка. Возвращаемая ошибка будет подписана и зашифрована.

Дешифровать и проверить подпись XML

1

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

Для получения ответа в заголовке укажите Accept = "application/xml" . Ответ от Банка будет зашифрован на сертификате партнера.

  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 .
Пример ответа
X-SymmetricKey:mdQ6TUD3sbaVO4JGGs68JDIQuQdyv5vCq2rTGq8ZWdWoxZ1iczr/i3sju2rz8OvWWs4yqW4tUO4LVucfFmPhWbCJS03uea7dqkv55dCkqxAM3cn/UC7pGcq6QTnfR9wgr8QLw2BfP95KJAlosWozXOHBDMC4uecNCm3chHAMLUI5/0m0qCHlDG1fAwR+gg8cMjbVO2DZuwrLY+FKHfRN+Ypp6HkDobjVT4mvgFWGq17pKJbdSU/mrZpF21leP0J/Va19FUlXPMscS6/7pWb9r+CNrXA3mH8XrvzmcZdMweBhVH34JdFitJ9nGkXKNh8p4OWl0/6WQfGy3Opd9CLnEQ==
X-InitializationVector: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
2

Обработать дешифрованный ответ

Полученный ответ (в том числе ошибки) будет представлен в виде XMLDsig.

  1. 1.
    Примените алгоритм канонизации, указанный в ds:CanonicalizationMethod , к элементу SignedInfo . Используйте алгоритм Exclusive XML Canonicalization для преобразования SignedInfo в каноническую форму;
  2. 2.
    Используя алгоритм хеширования, указанный в ds:SignatureMethod , вычислите хеш-значение из канонизированного SignedInfo ;
  3. 3.
    Декодируйте значение подписи из элемента ds:SignatureValue с использованием Base64;
  4. 4.
    Проверьте целостность содержимого:
    • Вычислите хеш-значение оригинальных данных (то есть тела сообщения без учета подписи), используя алгоритм, указанный в ds:DigestMethod ;
    • Сравните вычисленное хеш-значение с декодированным из Base64 значением, указанным в ds:DigestValue . Если значения совпадают, содержимое не изменилось после подписания.
Пример XMLDsig
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <XmlElementName1>XmlElementValue1</XmlElementName1>
    <XmlElementName2>XmlElementValue2</XmlElementName2>
    <ds:Signature
        xmlns="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
        <ds:SignatureValue>H6jGW+bKLwvQ9xxbhZ6jNYRHtupT4aJ4jjlLh4W8svK0w5G7ZXf4OxqRR0t2l6aYOpNBdN2Q0+2T&#13;
1LXyadtnz7XJ7QYXNXrnWNcq7mOxM5Lj5bBQa2JPZSiMkp1lsnAV/LFDAJ+Uhruj3mFQxjiFpJLR&#13;
W/vRJzmRv925xXWopb94PFvP9mjtAwPXtBGEL5rqJICabzVo8+1BfPwFF5+8sqYzT74mmJIQmeFm&#13;
FiYVMNive5lRxlt7nXEgS4iENF1dXq5+prCPloms8hIX6I4HQo3Jn+G37Os57nv8g61gk4jnu2OK&#13;
bOsZasIzXSLVG2GrCbDQ+HFjWs3Fgg4JOkULfw==
</ds:SignatureValue>
        <ds:SignedInfo>
            <ds:Reference URI="">
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384"></ds:DigestMethod>
                <ds:DigestValue>xgVcc1UZhuWRp4/8K0OAVLuQUhySUtJg7mYo78Od+WWidnIZr2XZUvPqwxOpFwRY</ds:DigestValue>
                <ds:Transforms>
                    <ds:Transform/>
                    <ds:Transform/>
                </ds:Transforms>
            </ds:Reference>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></ds:SignatureMethod>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
        </ds:SignedInfo>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCG&#13;
SAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMC&#13;
UlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJ&#13;
c3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCB&#13;
pzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjEL&#13;
MAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQ&#13;
mNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIB&#13;
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx&#13;
6gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX&#13;
5HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hs&#13;
dng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUw&#13;
W3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA&#13;
1wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYD&#13;
VR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvp&#13;
c/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9k&#13;
aXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9p&#13;
bnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBv&#13;
aW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0&#13;
dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8&#13;
BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEu&#13;
Y3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0Fs&#13;
ZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZI&#13;
hvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfah&#13;
cWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI&#13;
3s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9&#13;
ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY&#13;
1BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRl&#13;
hqI=
</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature>
</Response> 
3

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

Используйте открытый ключ сертификата для проверки подписи, сравнивая вычисленное хеш-значение SignedInfo с декодированным значением подписи SignatureValue , используя алгоритм, указанный в SignatureMethod .

4

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

Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <XmlElementName1>XmlElementValue1</XmlElementName1>
    <XmlElementName2>XmlElementValue2</XmlElementName2>
</Response>