воскресенье, 15 января 2012 г.

Нормализация XML и цифровая подпись

То что меня пугало, как неразгаданная тайна трансформации XML документов в недрах центрального банка и таможенных органов на поверку оказалось совсем не такой сложной задачей, но только вот офицальной документации моя реализация не соответсвует совсем, ни в одном пункте. Но при том все хеши сходятся, что доказывает мою правоту и демонстрирует торжество реверсивной разработки программ.
Собственно изначально я не поверил в то, что трансформаци хоть как-то соответсвует документации, потому что документация на трансформацию путанная, без примеров и явно откуда-то списана, потому что в документации от разных правительственных структур повторяются одни и те же выражения и при этом они не кажутся осмысленными. Похоже, что те кто составлял доки ничего в нормализации документов не смыслят, похоже, что они списывают лубуду в доках, потому что все так пишут.
Теперь я могу утверждать это с уверенностью потому что моя прога не применяет нормализацию в той форме как она описана и если бы мне пришлось писать доку на процесс нормализации получилось бы иначе.

    жульничество вокруг нормализации (комментарии по каждому требованию алгоритма нормализации):
1. Удаление инструкций обработки
<?адресат[_содержимое]?>
Подобные инструкции никогда не встречаются, они игнорируются на этапе разбора XML документа
2. Удаление из элементов XML-документа атрибутов из пространства имен “http://www.w3.org/2001/XMLSchema-instance”
Не встречаются, а если встречаются, то не используются в атрибутах.
3. Упорядочение во всех элементах XML-документа префиксов пространств имен по заданному правилу
Не встречается элементов с более чем одним пространством имен, поэтому во всех атрибутах используется фиксированный префикс <n1:tag>
Атрибутов с префиксами унаследованных пространств имен n2:attr не встречается, используются только атрибуты без префиксов пространств имен
4. Удаление в каждом элементе XML-документа дочерних текстовых узлов, содержащих только пробельные символы
Удаление не производится, потому что пробелы удаляются в процессе разбора XML документа
Канонизация
5. Вывод атрибутов производится в с учетом сотрировки имен атрибутов

В итоге: применяется только сортировка атрибутов и отслеживается наследование пространств имен. Пространство имен указывается явным образом как "n1". Пустые текстовые элементы выкидываются автоматически в процессе разбора XML.

Можно подписывать только линейное представление (сериализованное). Существует только два варианта сериального представления структурированного документа: бинарное типа BER-TLV и XML. Поэтому методика очень простая - преобразовать представление DOM в памяти в сериальное представление, назовем это нормализацией документа. Нормализованное представление документа мы и будем подписывать. К сказанному надо добавить только возможность переписывать XML и дописывать элементы и атрибуты вокруг. При этом, тот фрагмент XML, который мы подписали, должен остаться в неизменном виде. Вернее неизменным должно остаться нормализованное-сериальное представление документа.

Комментариев нет:

Отправить комментарий