Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Andrey__  
#1 Оставлено : 30 марта 2012 г. 5:23:04(UTC)
Andrey__

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.03.2012(UTC)
Сообщений: 3
Российская Федерация
Откуда: Самара

Философский вопрос.
Представим банк. В банке хранится информация по отчету по форме №1. Хранится в БД. Этот отчет передается между организациями в XML представлении.
Задача - обеспечить ЭП (квалифицированную) этого отчета по форме №1, его хранение в БД, и возможность передать отчет во внешнюю организацию, перед этим проверив валидность ЭП.
Данные по отчету хранятся в таблице в БД, система оперирует именно ими, хранить их в XML долго и не удобно - XML это только внешнее представление отчета.
Есть XSD описание XML формата представления отчета, которое всем известно и все оперируют именно им.

Use Case 1
1) Сотрудник банка или сотрудник внешний организации создают этот отчет по форме №1. После его создания сотрудник подписывает этот отчет своим сертификатом - он гарантирует что этот отчет верен. Видимо он подписывает именно XML представления отчета, и у нас есть большой XML в котором есть XML Signature и сам XML с данными.
2) Отчет в таком виде попадает в банк, банк из XML по XSD получает представление отчета в виде Java Bean (например). далее есть конвертор из Java Bean в Java ORM Bean и мы сохраняем данные отчета в БД.
3) Мы хотим хранить еще и ЭП, потому рядом с данными кладем XML + XML Signature.
Use Case 2
1) Внешняя организация запрашивает этот отчет.
2) Мы хотим перед отправкой отчета убедится что никто не изменил данные отчета в БД. Иначе Сотрудник, его создавший, не может за него отвечать. Достаем XML + Signature - проверяем что ЭП валидна на том XML представлении отчета что мы хранили. Все валидно. но дальше нам нужно понять что XML представление == данные отчета в таблице БД.
3) Мы из XML представления формируем Java Bean -> Конверторы -> Java ORM Bean1. Загружаем из БД Java ORM Bean2 и делаем простой compare() по ним.
Выглядит уже сложно, есть риск по однозначности Конверторов.
Вопрос - как это все упростить? Видимо если бы была общая функция по (набор данных отчета) -> hash. ЭП всегда по этому hash. Эта функция есть у всех и она единообразна и hash у всех организаций будет один. Это бы упростило ситуацию

Use Case 3
1) регламент изменился, изменился набор полей отчета по форме №1. В результате мы расширили таблицу с набором данных по отчету. (удалять атрибуты мы не можем - мы хотим хранить все старые отчеты. и хранить все отчеты в одном месте). Есть новый XSD версии 2012 года, который описывает отчет по форме №1. Мы пишем в БД данные и их ЭП уже по новому XSD.
Как выполнить проверку ЭП отчетов старой версии?

Предложение.
Есть XSLT, который приводит XML по старому XSD к новому XSD. Мы получаем XML представление отчета (по старому XSD) -> XSLT -> XML отчета (по новому XSD) -> Java Bean -> Конвертор -> Java ORM Bean1. Загрузили Java ORM Bean2 из БД и compare. ORM соответствует уже новой схеме БД и конверторы тоже.

Какое простое решение есть и общая практика? Хранить ЭП на данные в БД и проверять их - такое есть наверное в каждой организации.

Где у вас видел что нужно защищать данные в БД от изменения, не давать их изменять, и писать уже в новую версию этих данных. но мы не доверяем себе или DBA. Система должна защищать сотрудника, которые создал этот отчет, от админов и кого либо еще.
Offline Юрий Маслов  
#2 Оставлено : 3 апреля 2012 г. 14:03:50(UTC)
Юрий Маслов

Статус: Активный участник

Группы: Администраторы
Зарегистрирован: 29.12.2007(UTC)
Сообщений: 1,036
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 36 раз в 25 постах
Вопрос действительно дискуссионный. Я бы поступил следующим образом:
БД дополнил таблицей Table_Signature из минимума 3-х полей. Первое поле - ключ связи с основной таблицей по информации отчета по форме №1 (например, Primary Key). Во втором поле строка со значением всех реквизитов документа. Т.е. это и будет собственно документом. Формируется при подписании документа путём конкатенции значений полей из таблиц БД, содержащих информацию по отчету по форме №1. Третье поле содержит ЭП от второго поля.
Другие поля могут содержать какую либо служебную информацию (время подписи и т.д.). А может и не быть других полей.

Процедура создания ЭП будет выглядеть следующим образом:
1. Создание записи в Table_Signature
2. Формирование документа и запись его во второе поле.
3. Создание ЭП и запись в третье поле.

Процедура проверки ЭП документа, хранящегося в БД, на стороне банка:
1. Формирование документа
2. Сравнение документа со значением из второго поля Table_Signature
3. Проверка ЭП из третьего поля применительно к сформированному документу

Ну вот где-то так...
С уважением,
КРИПТО-ПРО
Offline Andrey__  
#3 Оставлено : 3 апреля 2012 г. 15:12:16(UTC)
Andrey__

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.03.2012(UTC)
Сообщений: 3
Российская Федерация
Откуда: Самара

ЭП может (должна?) формировать внешняя организация. Это означает что она выполняет подписание, а его могут проверить другие организации и мы сами. Следовательно правило конкатенации - это какая то функция которая известна всем.
Я уже делал такой подход в предыдущей системе - выпускали регламент, в котором указывали порядок полей, условия что если поле пустое то не включать его в документ и тп. В общем мало формализованное и искусственное описание функции. И под каждое изменение структуры документы, обновляли регламент. В каждой внешней системе только путем итеративного тестирования можно было убедится что их реализация функции конкатенации соответствует нашей. Все выглядело печально.
Документ определен для всех через XSD - потому не вижу как можно было бы уйти от XML DSign.

Offline Andrey__  
#4 Оставлено : 6 апреля 2012 г. 15:28:35(UTC)
Andrey__

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.03.2012(UTC)
Сообщений: 3
Российская Федерация
Откуда: Самара

Решил следующее
1) ЭЦП формируется на основе XML представления созданного по утвержденному XSD
2) Храним данные, XML представление и XML Signature в БД
3) На этапе проверки загружаем данные из БД в Bean, создаем из Bean XML представление по XSD (marshall), далее подкладываем полученный XML вместо исходного XML представления и проверяем XML Signature по нему.
4) XML представление храним чтобы можно было по нему воссоздать исходные данные

Это все основывается на том что
1) есть единое преобразование unmarshall/marshall которое из XML делаем Bean и обратно
2) есть единые механизмы (стандарты) Transform, Canonical и ГОСТ-Hash алгоритмы которые позволят создать подпись в одной среде (платформе, .Net например), и проверить на другой (Java, например), и решить все несоответствие с генераций XML представлений в разных средах, библиотеках и тп.

Вы как специалисты можете это подтвердить?

У нас есть некоторый опыт, который говорит о том что реализация одного и того же Canonical алгоритма отличается в разных продуктах, в результате не получается проверить подпись, полученную в другой системе.
Можете это подтвердить?

И реализация Canonical алгоритма на разных платформах от КриптоПро едина? Он детерминирован?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.