Перейти к содержимому
ecdsa.com

Канонизация

Приведение данных к одному согласованному байтовому представлению перед хешированием или подписью, чтобы семантически равнозначные входные данные (с разными пробелами, порядком ключей, префиксами пространств имён или переносом строк в заголовках) давали одни и те же данные для подписи.
Другие написанияc14nJCSRFC 8785JSON Canonicalization Scheme

Подпись вычисляется над байтами, а форматы вроде XML, JSON и электронной почты допускают много вариантов байтового кодирования одного и того же содержимого. Схемы канонизации фиксируют один из них: Exclusive XML Canonicalization для XML-DSig и SAML; JSON Canonicalization Scheme (JCS, RFC 8785: отсортированные ключи, форматирование чисел по правилам ECMAScript, без пробелов) для JSON; алгоритмы simple и relaxed в DKIM для заголовков и тела писем (RFC 6376, § 3.4); DER как каноническая форма ASN.1.

Любая канонизация — это поверхность атаки, потому что подписант и проверяющая сторона должны реализовать её одинаково, а приложение должно работать с каноническим содержимым, а не с исходными входными данными; именно на расхождениях в этом месте построены и обёртывание подписи XML (XML signature wrapping), и трюки с длиной тела письма в DKIM. Форматы вроде JWS и COSE обходят проблему, подписывая ровно те байты, которые передаются (base64url(header).base64url(payload)), поэтому их проще реализовать правильно.

Стандарты и ссылки

Все термины