# Шифрування карткових даних

## Робота зі стандартом шифрування JWE

Для забезпечення конфіденційності передачі даних, використовується **JWE (JSON Web Encryption)** — стандарт, який визначає формат зашифрованих JSON повідомлень.

Для шифрування номеру картки (PAN) використовується публічний платіжний ключ `payment_public_key` , що надається під час генерації ключів (дивитись документацію "[Генерація ключів](https://docs.merchant.alb.ua/avtorizaciya-2.0/generaciya-klyuchiv#proces-otrimannya-klyuchiv)")&#x20;

Ключ відповідає формату JWK :&#x20;

```json
"paymentPublicKey": 
{
    "kty": "EC",
    "x": "Hp833OY6a0VbFD1j8xFyXWcAA-HOlyr7B_-B05esZUy32RA41s0oGAMTal23AX9d",
    "y": "WGHeR9PhKRymoA-ggsR3VkQTgdfzt7PWa8P2qNpu0cV83lmLxE57b8rR7ajBurvj",
    "crv": "P-384"
}
```

> **Публічний платіжний ключ (`payment_public_key`)** відповідає параметрам :
>
> ● "[kty](https://datatracker.ietf.org/doc/html/rfc7518#section-6.1)": "EC" - тип ключа
>
> ● "[crv](https://datatracker.ietf.org/doc/html/rfc7518#section-6.2.1.1)": "P-384" - еліптична крива ключа
>
> ● "[use](https://datatracker.ietf.org/doc/html/rfc7517#section-4.2)": "enc" – параметр, що використовується для криптування ключем
>
> ● "[alg](https://datatracker.ietf.org/doc/html/rfc7518#section-4.1)": ECDH-ES+A256KW - алгоритм для якого використовується ключ

### Приклад ендпоінта, для шифрування :&#x20;

{% hint style="warning" %}
**Запит викоритсосується тільки для тестування.**\
**Запит заборонено виконувати з реальними ключами.** \
**Запит шифрування потрібно реалізовувати на свої стороні.**
{% endhint %}

## Шифрування повідомлення за допомогою JWK

> Шифрує передане повідомлення (наприклад, номер картки або термін дії картки та CVV) за допомогою публічного ключа JWK (EC).<br>

```json
{"openapi":"3.0.3","info":{"title":"Encrypt Card Data API","version":"1.0.0"},"servers":[{"url":"https://api-ecom-release.develop.bankalliance.ua"}],"paths":{"/cipher/encrypt_by_jwk":{"post":{"summary":"Шифрування повідомлення за допомогою JWK","description":"Шифрує передане повідомлення (наприклад, номер картки або термін дії картки та CVV) за допомогою публічного ключа JWK (EC).\n","parameters":[{"name":"message","in":"query","description":"Повідомлення для шифрування (наприклад, номер картки або термін дії картки та CVV)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["kty","crv","x","y"],"properties":{"kty":{"type":"string","enum":["EC"],"description":"Тип ключа (EC)"},"crv":{"type":"string","description":"Тип кривої"},"x":{"type":"string","description":"X-координата публічного ключа (base64url)"},"y":{"type":"string","description":"Y-координата публічного ключа (base64url)"}}}}}},"responses":{"200":{"description":"Успішне шифрування. Повертає зашифроване повідомлення (наприклад, JWE токен).","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Некоректний запит (наприклад, відсутні параметри)"},"500":{"description":"Внутрішня помилка сервера"}},"tags":["Encryption"]}}}}
```
