# Формирование ЭЦП JWS

JWS используется для безопасной передачи данных с цифровой подписью. Он состоит из трёх частей, разделённых точками:&#x20;

<Заголовок>.<Полезная нагрузка>.<Подпись>&#x20;

#### &#x20;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).&#x20;

#### &#x20;2. Полезная нагрузка (Payload)

Содержит данные, которые подписываются.

Также кодируется в Base64URL.

Пример:

```
{
  "bin": "987654321012",
  "iin": "123456789012",
  "consentType": "BIOMETRY"
} 
```

#### Пояснения:

* bin: БИН участника (например, банка или организации).
* iin: ИИН клиента, по которому проводится верификация.
* consentType: тип согласия. Допустимые значения:
  * BIOMETRY
  * DIGITAL\_SIGNATURES
  * OTP
  * DIGITAL\_ID
  * PAPER&#x20;

#### &#x20;3. Подпись (Signature)

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

1. Кодируются Header и Payload в Base64URL.
2. Объединяются через точку:  &#x20;

```
 signing_input = base64url(header) + "." + base64url(payload) 
```

3. Строка signing\_input хэшируется (ГОСТ 34.11).
4. Полученный хэш подписывается закрытым ключом (ГОСТ 34.10).
5. Подпись кодируется в Base64URL.&#x20;

#### Итоговая структура JWS:&#x20;

\<base64url(header)>.\<base64url(payload)>.\<base64url(signature)>&#x20;

#### Пример полного JWS:&#x20;

eyJ4NXQjUzI1NiI6ImVxM3pNVUlXbjRfVlhEQTJySzZlc1R4eGlpdmw4bWtCa3dicWJva1NMUUk9Iiwia2lkIjoiQ049UENJRFRFU1QuSzAwMDAwMzMsTz1KU0MgTmF0aW9uYWwgcGF5bWVudCBjb3Jwb3JhdGlvbiBvZiB0aGUgTmF0aW9uYWwgQmFuayBvZiB0aGUgUmVwdWJsaWMgb2YgS2F6YWtoc3RhbixDPUtaIiwiYWxnIjoiR09TVDM0MTAtMjAxNS01MTIifQ.eyJiaW4iOiI5NjA0NDAwMDAxNTEiLCJpaW4iOiI4ODAyMjYzMDExMjgiLCJjb25zZW50VHlwZSI6IkJJT01FVFJZIn0.sSJ3wIX3r7SWkbsdyRx5pVKVZa\_ruwBhxfq-QqWU-i6cg-yP1D1QwAUIEMx4QShrDEjgUui57rcFyxSEfHXlFJvHkzOQ0FyPABq43SGYIQHf9wOkp0LvYQUaZxLokfy20iLMDXuDDQ6E2bSlvH5OnWAqBNvVgOOl\_sg0f6\_w\_Zw
