Формирование ЭЦП JWS
JWS используется для безопасной передачи данных с цифровой подписью. Он состоит из трёх частей, разделённых точками:
<Заголовок>.<Полезная нагрузка>.<Подпись>
1. Заголовок (Header)
Формируется как JSON-объект, затем кодируется в Base64URL.
Пример:
{
"alg": "GOST3410-2015-512",
"kid": "CN=PCIDTEST.K0000033,O=JSC National payment corporation of the National Bank of the Republic of Kazakhstan,C=KZ",
"x5t#S256": "eq3zMUIWn4_VXDA2rK6esTxxiivl8mkBkwbqbokSLQI="
}Пояснения:
alg: алгоритм подписи. Используется ГОСТ Р 34.10-2012/2015.
kid: Subject DN из сертификата, которым подписывается JWS.
x5t#S256: SHA-256 отпечаток сертификата (Base64URL).
2. Полезная нагрузка (Payload)
Содержит данные, которые подписываются.
Также кодируется в Base64URL.
Пример:
{
"bin": "987654321012",
"iin": "123456789012",
"consentType": "BIOMETRY"
} Пояснения:
bin: БИН участника (например, банка или организации).
iin: ИИН клиента, по которому проводится верификация.
consentType: тип согласия. Допустимые значения:
BIOMETRY
DIGITAL_SIGNATURES
OTP
DIGITAL_ID
PAPER
3. Подпись (Signature)
Формируется следующим образом:
Кодируются Header и Payload в Base64URL.
Объединяются через точку:
signing_input = base64url(header) + "." + base64url(payload) Строка signing_input хэшируется (ГОСТ 34.11).
Полученный хэш подписывается закрытым ключом (ГОСТ 34.10).
Подпись кодируется в Base64URL.
Итоговая структура JWS:
<base64url(header)>.<base64url(payload)>.<base64url(signature)>
Пример полного JWS:
eyJ4NXQjUzI1NiI6ImVxM3pNVUlXbjRfVlhEQTJySzZlc1R4eGlpdmw4bWtCa3dicWJva1NMUUk9Iiwia2lkIjoiQ049UENJRFRFU1QuSzAwMDAwMzMsTz1KU0MgTmF0aW9uYWwgcGF5bWVudCBjb3Jwb3JhdGlvbiBvZiB0aGUgTmF0aW9uYWwgQmFuayBvZiB0aGUgUmVwdWJsaWMgb2YgS2F6YWtoc3RhbixDPUtaIiwiYWxnIjoiR09TVDM0MTAtMjAxNS01MTIifQ.eyJiaW4iOiI5NjA0NDAwMDAxNTEiLCJpaW4iOiI4ODAyMjYzMDExMjgiLCJjb25zZW50VHlwZSI6IkJJT01FVFJZIn0.sSJ3wIX3r7SWkbsdyRx5pVKVZa_ruwBhxfq-QqWU-i6cg-yP1D1QwAUIEMx4QShrDEjgUui57rcFyxSEfHXlFJvHkzOQ0FyPABq43SGYIQHf9wOkp0LvYQUaZxLokfy20iLMDXuDDQ6E2bSlvH5OnWAqBNvVgOOl_sg0f6_w_Zw
Last updated