Блог · Для розробників

XML-підпис (XAdES) з ключами ДСТУ 4145: для звітності та B2B-обміну

Опубліковано

Коли підписувати треба не PDF, а структуровані дані, потрібен XAdES — підпис XML. Розповідаємо, як він працює, і показуємо рідкісну для вебу можливість: XAdES українськими ключами ДСТУ 4145 з гешами ГОСТ 34.311 та «Купина-256».

Опубліковано 7 серпня 2026


Коротка відповідь. XAdES (XML Advanced Electronic Signatures) — це стандарт підпису XML-документів, аналог CAdES для структурованих даних. У DSTUcrypt XAdES працює з українськими ключами ДСТУ 4145 і гешами ДСТУ ГОСТ 34.311-95 (за замовчуванням) та ДСТУ 7564:2014 «Купина-256», з рівнями від базового BES до довгострокового B-LTA. Підписати XML — це виклик sign(xmlBytes, { format: 'XAdES-B-T' }), і вся криптографія виконується у браузері користувача.

Де потрібен підпис саме XML

PDF підписують, коли документ читає людина. Але величезна частина документообігу — це структуровані дані, які читають не люди, а системи: звітність, обмін між сервісами, електронні документи з машиночитаними полями. Такі дані природно живуть у форматі XML, і підписувати їх зручно теж «усередині XML» — так, щоб підпис і структура лишалися єдиним цілим. Саме для цього існує XAdES.

Типові сценарії: системи звітності, B2B-обмін структурованими документами між обліковими системами, електронні документи з полями, які автоматично обробляє приймальна сторона.

Що таке XAdES

XAdES — це XML-підпис за європейською лінійкою стандартів ETSI, розширення базового XML Signature додатковими атрибутами (час підпису, дані про сертифікат тощо). По суті це той самий підхід, що й CAdES, але вбудований у структуру XML, а не у CMS-контейнер. Як і CAdES/PAdES, XAdES має рівні зрілості — від простого підпису до довгострокового.

Рівні XAdES

Рівень Що додає Потрібен інтернет
XAdES-BES базовий підпис ключем ні
XAdES-B-T мітку часу TSP — доводить момент підпису так (сервер TSP)
XAdES-B-LT дані про статус сертифіката для довгострокової перевірки так
XAdES-B-LTA архівну мітку часу — найдовговічніший рівень так

Рівні вище BES потребують онлайн-доступу до сервера міток часу. У DSTUcrypt це звернення проходить через вбудований проксі, тож інтегратор нічого не налаштовує окремо.

Головна особливість: ДСТУ 4145 + «Купина» у XML

Більшість вебінструментів для XML-підпису знають лише міжнародні алгоритми і не вміють працювати з українськими ключами. DSTUcrypt — виняток: XAdES тут підписується ключами ДСТУ 4145 (тими самими, що ваш КЕП) з гешами ДСТУ ГОСТ 34.311-95 за замовчуванням або «Купина-256» (ДСТУ 7564:2014) за опцією. Що таке «Купина» і коли її обирати — у статті ««Купина» (ДСТУ 7564:2014): що це за геш-функція і чому вона замінює ГОСТ 34.311-95».

Рідкісна можливість серед вебрішень. XAdES українськими ключами ДСТУ 4145 з гешами ГОСТ 34.311 та «Купина-256», з повною лінійкою рівнів аж до B-LTA — усе прямо в браузері. Криптоядро — перевірена нативна C/C++-бібліотека, скомпільована у WebAssembly, що роками працює в українській PKI. Ключ і пароль не покидають пристрій користувача, а той самий віджет підписує ще й CAdES, PAdES та ASiC.

Код: підпис XML у DSTUcrypt

Інтеграція нічим не відрізняється від підпису інших форматів — змінюється лише значення format. Криптографічний код на вашу сторінку не потрапляє: користувач обирає ключ і вводить пароль в ізольованому iframe нашого origin.

підпис XML за стандартом XAdES

import { embed } from 'https://dstucrypt.io/embed/dstucrypt-embed.mjs';

const signer = await embed('sign', { mount: 'modal' });

// xmlBytes — File | Blob | ArrayBuffer | Uint8Array | string з вашим XML
const { signature } = await signer.sign(xmlBytes, {
  format: 'XAdES-B-T',       // XML-підпис + мітка часу (потрібен онлайн-TSP)
  fileName: 'report.xml',
  // digest: 'kupyna-256',   // опційно: геш «Купина» замість ГОСТ 34.311
});

signature.download('report-signed.xml'); // або .bytes / .base64 на ваш бекенд

Допустимі значення для XML — XAdES-BES, XAdES-B-T, XAdES-B-LT, XAdES-B-LTA. Для довгострокового зберігання беріть -B-LT або -B-LTA — докладніше у статті «Довгостроковий електронний підпис: CAdES-XL і PAdES-LTA».

Як перевірити XML-підпис

Віджет verify автоматично визначає формат за вмістом файлу (для XML це XAdES) і повертає статус, підписанта та ознаку акредитованості (чи це саме КЕП). Для разових перевірок є безкоштовний інструмент dstucrypt.com.ua/verify. Повний огляд форматів — у статті «Формати електронного підпису: CAdES, PAdES, XAdES, ASiC — який обрати».

Поширені запитання

Чим XAdES відрізняється від CAdES?

CAdES підписує довільні дані у вигляді CMS-контейнера (.p7s), а XAdES — це підпис саме XML-документів за окремою лінійкою стандартів. Обидва мають однакові рівні зрілості (базовий, з міткою часу, довгостроковий), але XAdES природно вбудовується у структуру XML, що зручно для звітності й машинного обміну.

Чи працює XAdES з українськими ключами ДСТУ 4145?

Так. XAdES у DSTUcrypt підтримує українські ключі ДСТУ 4145 з гешами ДСТУ ГОСТ 34.311-95 (за замовчуванням) та ДСТУ 7564:2014 «Купина-256». Це рідкісна можливість серед вебрішень — більшість XML-підписувачів знають лише міжнародні алгоритми.

Навіщо XAdES потрібен доступ до інтернету?

Базовий рівень XAdES-BES працює без мережі. Рівні вище (B-T, B-LT, B-LTA) додають мітку часу від сервера TSP, тож потребують онлайн-доступу до нього. У DSTUcrypt звернення до TSP іде через вбудований проксі — інтегратор нічого не налаштовує.

Який рівень XAdES обрати для довгострокового зберігання?

Для документів, які мають лишатися перевірюваними роками, беріть XAdES-B-LT або XAdES-B-LTA — вони вкладають у підпис дані про статус сертифіката й архівну мітку часу, тож підпис перевіряється навіть після спливання сертифіката.

Читайте також

Підпис XML за ДСТУ — на вашому сайті

Готовий віджет підпису XAdES українськими ключами ДСТУ 4145 з гешами ГОСТ 34.311 і «Купина-256». Ключ не покидає браузер. На кожному новому домені — 7 днів безкоштовно.

Живе демоЯк підключити

Спробуйте КЕП на своєму сайті

Готові віджети підпису, перевірки та входу за ДСТУ. На кожному новому домені — 7 днів безкоштовно.