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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 31 мая 2013 г. 16:55:21(UTC)
Евгений Афанасьев

Статус: Сотрудник

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Ошибка говорит о том, что хеш в подписанных аттрибутах подписи не соответствует хешу текста, который подписывали.
Offline EVoynov  
#12 Оставлено : 4 июня 2013 г. 14:34:53(UTC)
EVoynov

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

Группы: Участники
Зарегистрирован: 20.10.2011(UTC)
Сообщений: 45
Откуда: Moscow

Сказал(а) «Спасибо»: 7 раз
Удалось накопать то, что механизм формирования данных немного отличается на клиенте и на сервере.

Код:

//На клиенте: 
var oSignedData = createObject("CAdESCOM.CadesSignedData");
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = base64Text;

//На сервере:
message = Base64.decode(base64Text);
CAdESSignature cadesSignature = new CAdESSignature(signature, message, null);


Т.е. на клиенте мы кое как готовим строку в Base64, а дальше уже не участвуем в переводе ее в массив байт, а на сервере эту часть мы должны взять на себя и делаем это неправильно.

Предполагаю, что причина в том, что строку мы формируем как Base64('текст 1')+Base64('текст 2'), а стандартный вызов Base64.decode() делает не тоже самое, что делается на клиенте.

Выяснилось это, получив неравенство: Base64('текст 1')+Base64('текст 2') != Base64('текст 1'+'текст 2')
Для примера:
Цитата:
'текст 1' = "Пояснительная записка"
'текст 2' = "ВЕВ проверка ЭЦП № 2"
Base64('текст 1')+Base64('текст 2') = 0J/QvtGP0YHQvdC40YLQtdC70YzQvdCw0Y8g0LfQsNC/0LjRgdC60LA=0JLQldCSINC/0YDQvtCy0LXRgNC60LAg0K3QptCfIOKEliAy
Base64('текст 1'+'текст 2') = 0J/QvtGP0YHQvdC40YLQtdC70YzQvdCw0Y8g0LfQsNC/0LjRgdC60LDQktCV0JIg0L/RgNC+0LLQtdGA0LrQsCDQrdCm0J8g4oSWIDI=


При этом выяснил, что есть online-декодеры, которые умеют корректно работать с обоими вариантами, а есть которые нет, т.е. вполне может быть что мы пользуемся неправильной реализацией класса Base64 (прилагаю в аттаче класс, который используется).
Вложение(я):
Base64.txt (23kb) загружен 6 раз(а).

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