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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline AlexGold  
#1 Оставлено : 23 января 2014 г. 12:20:08(UTC)
AlexGold

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

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

Есть код создания подписи запроса (soap-сообщение) на сервер из .NET приложения (x86 и x64 версии).

Есть два варианта поведения:
1) В Windows 7 Pro x86 подпись успешно создается и на сервере не возникает ошибок проверки.
Информация о системе:
- Microsoft Windows 7 Максимальная x86.
Версия 6.1.7601 Service Pack 1 Сборка 7601
x86-based PC
- Приложение собрано под .NET Framework 4.0.
- КриптоПро CSP 3.6.6497
Версия ядра СКЗИ: 3.6.5359 КС1
- Для хэша используется ГОСТ Р 34.11-94.

2) В Windows 7 Professional x64 подпись создается, но для одних тех же данных каждый раз получается новая
(и в x86 версии приложения, и в x64 версии), и на стороне сервера возникает ошибка проверки подписи.
- Microsoft Windows 7 Профессиональная x64
6.1.7601 Service Pack 1 Сборка 7601
x64-based PC
- Приложение собрано под .NET Framework 4.0.
- КриптоПро CSP 3.6.7777
Версия ядра СКЗИ: 3.6.5365 КС1
- Для хэша используется ГОСТ Р 34.11-94.

Сталкивался ли кто-нибудь с такой проблемой на Windows x64?
Есть ли какие-нибудь идеи?

Код подписи сообщения выглядит примерно так:
public const uint AT_SIGNATURE = 2;
public const uint CERT_ALG_ID = 32798;
public const uint TYPE = 75;

IntPtr hCryptoProvider = IntPtr.Zero;
IntPtr hPubKey = IntPtr.Zero;
IntPtr hHash = IntPtr.Zero;

bool result = win32.CryptAcquireContext(out hCryptoProvider, _container, null, TYPE, 0);

win32.CryptGetUserKey(hCryptoProvider, AT_SIGNATURE, ref hPubKey);
win32.CryptCreateHash(hCryptoProvider, CERT_ALG_ID, IntPtr.Zero, (uint)0, out hHash);

Encoding encoding = Encoding.GetEncoding(encodingHeaderName);
byte[] buffer = encoding.GetBytes(body);
win32.CryptHashData(hHash, buffer, buffer.Length, 0);

uint signatureLength = 0;
win32.CryptSignHash(hHash, AT_SIGNATURE, null, 0, null, ref signatureLength);

byte[] signature = new byte[signatureLength];
win32.CryptSignHash(hHash, AT_SIGNATURE, null, 0, signature, ref signatureLength);

retVal = System.Convert.ToBase64String(signature, 0, (int)signatureLength);
Offline Максим Коллегин  
#2 Оставлено : 23 января 2014 г. 12:48:53(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Подпись должна быть разной. Хэши одинаковые получаются? Сразу после создания проверить получается?
Знания в базе знаний, поддержка в техподдержке
Offline AlexGold  
#3 Оставлено : 23 января 2014 г. 16:35:52(UTC)
AlexGold

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

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

Хэши одинаковые.

Вообще говоря, сервер не наш.
Попробовали выполнить проверку на своей стороне сразу после создания подписи.
Тоже не работает.

Следующий код:
int win32Error = Marshal.GetLastWin32Error();
string errorMsg = new System.ComponentModel.Win32Exception(win32Error).Message;

возвращает ошибку "Неверная подпись"
Offline Максим Коллегин  
#4 Оставлено : 23 января 2014 г. 17:32:28(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Скорее всего неверно написали interopы
Знания в базе знаний, поддержка в техподдержке
Offline andreyxvo  
#5 Оставлено : 30 июня 2014 г. 18:50:19(UTC)
andreyxvo

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

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

Здравствуйте.

Нарисовывается такая задача: получить значение ХЭШ (Гост 34.11-94) без сертификата и ключей. Поспрашивал Яндекс, он вроде говорит, что реализуемо.
Понимаю что делаем это приблизительно так:
CryptAcquireContext (... pszProvider="название провайдера")

CryptAcquireContext (...данные...)

Вопрос немного не ясен момент с привязкой к алгоритму Гост 34.11-94.
Эта связь осуществляется через параметр CryptAcquireContext ( ...ALG_ID ... ) ?
Этот параметр должен быть равен 32798?

Спасибо.
Offline Максим Коллегин  
#6 Оставлено : 30 июня 2014 г. 20:01:36(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Посмотрите пример в CSP SDK: http://cpdn.cryptopro.ru...xample_CreatingHash.html
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#7 Оставлено : 30 июня 2014 г. 20:01:36(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Посмотрите пример в CSP SDK: http://cpdn.cryptopro.ru...xample_CreatingHash.html
Знания в базе знаний, поддержка в техподдержке
Offline slavw  
#8 Оставлено : 29 января 2015 г. 10:44:38(UTC)
slavw

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
в примере http://cpdn.cryptopro.ru...xample_CreatingHash.html
GR3411LEN = 64
разве длина хеша по Гост 34.11-94 не 32?
у меня функция CryptGetHashParam возвращает 32 !
OID_HashVerbaO = '1.2.643.2.2.30.1'
на wikipedia (https://ru.wikipedia.org/wiki/%C3%CE%D1%D2_%D0_34.11-94) утверждают тоже самое (= 256 бит или 32 байта)...

помогите!!! не понимаю!!!
Offline Максим Коллегин  
#9 Оставлено : 29 января 2015 г. 11:15:31(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Размер выделен с запасом с прицелом на новые ГОСТы.
Знания в базе знаний, поддержка в техподдержке
Offline slavw  
#10 Оставлено : 29 января 2015 г. 11:19:03(UTC)
slavw

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 22 раз в 12 постах
уф.. теперь понимаю!!! спасибо...
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (4)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.