Формирование ЭЦП 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)

Формируется следующим образом:

  1. Кодируются Header и Payload в Base64URL.

  2. Объединяются через точку:

 signing_input = base64url(header) + "." + base64url(payload) 
  1. Строка signing_input хэшируется (ГОСТ 34.11).

  2. Полученный хэш подписывается закрытым ключом (ГОСТ 34.10).

  3. Подпись кодируется в Base64URL.

Итоговая структура JWS:

<base64url(header)>.<base64url(payload)>.<base64url(signature)>

Пример полного JWS:

eyJ4NXQjUzI1NiI6ImVxM3pNVUlXbjRfVlhEQTJySzZlc1R4eGlpdmw4bWtCa3dicWJva1NMUUk9Iiwia2lkIjoiQ049UENJRFRFU1QuSzAwMDAwMzMsTz1KU0MgTmF0aW9uYWwgcGF5bWVudCBjb3Jwb3JhdGlvbiBvZiB0aGUgTmF0aW9uYWwgQmFuayBvZiB0aGUgUmVwdWJsaWMgb2YgS2F6YWtoc3RhbixDPUtaIiwiYWxnIjoiR09TVDM0MTAtMjAxNS01MTIifQ.eyJiaW4iOiI5NjA0NDAwMDAxNTEiLCJpaW4iOiI4ODAyMjYzMDExMjgiLCJjb25zZW50VHlwZSI6IkJJT01FVFJZIn0.sSJ3wIX3r7SWkbsdyRx5pVKVZa_ruwBhxfq-QqWU-i6cg-yP1D1QwAUIEMx4QShrDEjgUui57rcFyxSEfHXlFJvHkzOQ0FyPABq43SGYIQHf9wOkp0LvYQUaZxLokfy20iLMDXuDDQ6E2bSlvH5OnWAqBNvVgOOl_sg0f6_w_Zw

Last updated