Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту alfa_api@alfabank.ru. При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
Для шифрования сообщения необходимо предварительно выпустить сертификат в УЦ Альфа-Банка, используя сервис "Электронная подпись". Если Вы уже выпускали сертификат - повторно выпускать не нужно.
Подписание и шифрование XML
Сформируйте электронную подпись в cоответствии с XMLDsig. Необходимо использовать:
-
•
-
•Метод канонизации: Canonicalization Method Algorithm
-
•Алгоритм подписи: Signature Method Algorithm
-
•Метод трансформации: Enveloped Signature Transform (Transform Algorithm)
-
•Метод трансформации: Exclusive XML Canonicalization (Transform Algorithm)
-
•Алгоритм хэширования: Digest Method Algorithm
1<?xml version="1.0" encoding="UTF-8"?>
2<Request>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5 <ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
6 <ds:SignedInfo>
7 <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
8 </ds:CanonicalizationMethod>
9 <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256">
10 </ds:SignatureMethod>
11 <ds:Reference URI="">
12 <ds:Transforms>
13 <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature">
14 </ds:Transform>
15 <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
16 </ds:Transform>
17 </ds:Transforms>
18 <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384">
19 </ds:DigestMethod>
20 <ds:DigestValue>PFofJkUS6p/00mh0rGBsixzt/IrT0VOQRD3kvQkD3TyPEle2o1Ba7NCMR/ATvzQF</ds:DigestValue>
21 </ds:Reference>
22 </ds:SignedInfo>
23 <ds:SignatureValue>wxBWAIhbSFENVHMdLJ051lZGlhEUbIPPo9W/4BrBjOtNo/cfu9MxCLv7GSqVz0Kr6g6L6+k9q+hu
24CVAebijxjUmub3KUTx7GPq6SjQsrFo5sZmZg73eyLqiEM3LFux4PJEXeVSadzOpQGBg0ygDZ83gU
25OXY/YJcwSRcBEQpNp+62ot1ua90QBJzNApZkWtxwSlBvGS0SYmh+6vg0yFbc60h231Q4bBSdWJcD
26vaAIIayCwbt3oUm2simOGvc/adfz4vn6xiLQCAEDsyD0iK9m9WssqIZKepe8wI0kJCC9CwHx6Zxg
27Geys+G77rQvskKmN13EX3sokbLAnzb4cWnwZVQ==
28</ds:SignatureValue>
29 <ds:KeyInfo>
30 <ds:X509Data>
31 <ds:X509Certificate>MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCG
32SAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMC
33UlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJ
34c3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCB
35pzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjEL
36MAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQ
37mNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIB
38IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx
396gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX
405HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hs
41dng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUw
42W3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA
431wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYD
44VR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvp
45c/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9k
46aXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9p
47bnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBv
48aW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0
49dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8
50BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEu
51Y3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0Fs
52ZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZI
53hvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfah
54cWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI
553s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9
56ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY
571BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRl
58hqI=
59</ds:X509Certificate>
60 </ds:X509Data>
61 </ds:KeyInfo>
62 </ds:Signature>
63</Request>
1. Выполните шифрование подписанного на предыдущем шаге сообщения симметричным алгоритмом:
Параметры шифрования:
-
•алгоритм блочного шифрования: AES;
-
•режим сцепления блоков:
CBC; -
•схема дополнения контента (padding):
PKCS5.
Шаги:
-
1.
Сгенерируйте секретный ключ
AES (Symmetric Key). Размер ключа - 128 бит. -
2.
Сгенерируйте вектор инициализации режима
CBC (Initialization Vector). Размер - 128 бит.Если размер данных не кратен размеру блока
AES- 128 бит, используйтеPKCS5для дополнения данных до нужного размера. -
3.
Зашифруйте сообщение, используя
Symmetric KeyиInitialization Vectorв режимеCBC. -
4.
Передайте полученное зашифрованное сообщение в теле запроса.
1FXCTdsI0cNpiwf17K9ZX113TOUwbQIrlD7ycM9PELZAp+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
2. Выполните шифрование симметричного секретного ключа и вектора инициализации асимметричным алгоритмом:
Параметры шифрования:
-
•алгоритм шифрования: RSA;
-
•режим сцепления блоков:
NONE (не использовать); -
•схема дополнения контента (padding):
OAEP.
Шаги:
-
1.Зашифруйте с помощью открытого ключа сертификата Банка секретный ключ
Symmetric Key, используя алгоритм RSA c механизмомOAEP. -
2.Аналогичным образом зашифруйте вектор инициализации
Initialization Vector. -
3.Передайте полученный зашифрованный секретный ключ
Symmetric Keyв заголовке запросаX-SymmetricKey. -
4.Передайте полученный зашифрованный вектор инициализации
Initialization Vectorв заголовке запросаX-InitializationVector.
1X-SymmetricKey: xrzL4iCYGP0NCXUjVYDUXshS7QEye3iTzpH+TIgJuzCcBFtMtdFsHVymsT5HsEeVZr01nGpyTkM6eNgKj6dH9hCEuFfv+dkGtBbd//jSPDntzKxFRkK7vxrugtFNILkxgZK1FaBBDOaOya0U1xJCc34FKrH/DltbPOxoxA9v7mS9ZF0kebhQO5wvlhGH525uKhe7a0XkcxBH6XRdElwM3PExY194uFQ+OH+EeEc+6AhGKk+pLsIeATkgNHsLDuGx1gzQy4iLf/NQZXT8Pkldw8fd+ECXiqh7nXOY5sdmTJ08FyPZ+Vsxre+Cc6yoRgRTzwnkqx3XsHxv80sXRZcDeg==
2X-InitializationVector: aOwLSirltsxJx3GdZqJ0N+b2YmtY04NTIQmbNdT0v4Wk38T5OJtdAhmP4GWSqDAA7TYuEqccFnRi1DurkizkLqX02w4k+OfpFHJZaHDKg9rMOmdjso7KQMLRmWBzUujs9ray9KYSgPydDvzteIJIoO89C6zEP4Mqv5JQzEnH+/ChtSuDeZ1xPfbgiLWppa0O2whq8wHzsZtYckBd4LEjbQgy1/cuuq7IOOtK+oABfa/WCYsksgbxwX0VkC1OKNPvL2Izm8aPRnocLSKFiDNDkMORFcKWVQfugo5WGFRwcB9Ihixud2GzZcQ93JUviXZswCb9LCPdhrDe2G2ddZCWng==
Если добавить заголовки Content-Type: application/xml + X-Request-ChannelSecurity: NO и отправить запрос, то запрос не будет расшифрован и подпись запроса не будет проверяться.
Если добавить заголовки Content-Type: application/xml + X-Request-ChannelSecurity: ENCRYPTION и отправить запрос, то запрос будет дешифрован и подпись запроса будет проверяться.
Банк дешифрует запрос и проверяет подпись. Если подпись валидна - запрос обрабатывается, если невалидна - Банк определяет запрос как неподлинный и возвращает ошибку. В случае ошибки с дешифровкой запроса также будет возращена ошибка. Возвращаемая ошибка будет подписана и зашифрована.
Дешифрование и проверка подписи XML
Полученный ответ (в том числе ошибки) будет представлен в виде XMLDsig.
-
1.Примените алгоритм канонизации, указанный в
ds:CanonicalizationMethod, к элементуSignedInfo. Используйте алгоритм Exclusive XML Canonicalization для преобразованияSignedInfoв каноническую форму. -
2.Используя алгоритм хеширования, указанный в
ds:SignatureMethod, вычислите хеш-значение из канонизированногоSignedInfo. -
3.Декодируйте значение подписи из элемента
ds:SignatureValueс использованием Base64. -
4.Проверьте целостность содержимого:
-
•Вычислите хеш-значение оригинальных данных (то есть тела сообщения без учёта подписи), используя алгоритм, указанный в
ds:DigestMethod. -
•Сравните вычисленное хеш-значение с декодированным из Base64 значением, указанным в
ds:DigestValue. Если значения совпадают, содержимое не изменилось после подписания.
-
1<?xml version="1.0" encoding="UTF-8"?>
2<Response>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5 <ds:Signature
6 xmlns="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
7 <ds:SignatureValue>H6jGW+bKLwvQ9xxbhZ6jNYRHtupT4aJ4jjlLh4W8svK0w5G7ZXf4OxqRR0t2l6aYOpNBdN2Q0+2T
81LXyadtnz7XJ7QYXNXrnWNcq7mOxM5Lj5bBQa2JPZSiMkp1lsnAV/LFDAJ+Uhruj3mFQxjiFpJLR
9W/vRJzmRv925xXWopb94PFvP9mjtAwPXtBGEL5rqJICabzVo8+1BfPwFF5+8sqYzT74mmJIQmeFm
10FiYVMNive5lRxlt7nXEgS4iENF1dXq5+prCPloms8hIX6I4HQo3Jn+G37Os57nv8g61gk4jnu2OK
11bOsZasIzXSLVG2GrCbDQ+HFjWs3Fgg4JOkULfw==
12</ds:SignatureValue>
13 <ds:SignedInfo>
14 <ds:Reference URI="">
15 <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384"></ds:DigestMethod>
16 <ds:DigestValue>xgVcc1UZhuWRp4/8K0OAVLuQUhySUtJg7mYo78Od+WWidnIZr2XZUvPqwxOpFwRY</ds:DigestValue>
17 <ds:Transforms>
18 <ds:Transform/>
19 <ds:Transform/>
20 </ds:Transforms>
21 </ds:Reference>
22 <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></ds:SignatureMethod>
23 <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
24 </ds:SignedInfo>
25 <ds:KeyInfo>
26 <ds:X509Data>
27 <ds:X509Certificate>MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCG
28SAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMC
29UlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJ
30c3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCB
31pzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjEL
32MAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQ
33mNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIB
34IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx
356gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX
365HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hs
37dng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUw
38W3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA
391wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYD
40VR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvp
41c/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9k
42aXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9p
43bnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBv
44aW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0
45dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8
46BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEu
47Y3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0Fs
48ZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZI
49hvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfah
50cWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI
513s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9
52ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY
531BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRl
54hqI=
55</ds:X509Certificate>
56 </ds:X509Data>
57 </ds:KeyInfo>
58 </ds:Signature>
59</Response>
Используйте открытый ключ сертификата для проверки подписи, сравнивая вычисленное хеш-значение SignedInfo с декодированным значением подписи SignatureValue , используя алгоритм, указанный в SignatureMethod .
1<?xml version="1.0" encoding="UTF-8"?>
2<Response>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5</Response>