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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline al  
#1 Оставлено : 24 июля 2019 г. 18:27:57(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
Не могу сгенерить ключ Магма и Кузнечик - Error:0x80090008 :

Цитата:

#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#include "WinCryptEx.h"

#define CONTAINER_256 "\\\\.\\REGISTRY\\t_cc_encr_256"
#define CONTAINER_512 "\\\\.\\REGISTRY\\t_cc_encr_512"

unsigned char PIN_TO_CONT[]={'1','1','1','1','1','1','1','1','\0'};

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;

int main(){

int i;

for(i=1;i>=0;--i){

// Получение дескриптора контекста криптографического провайдера
if(CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
0)
) {
CryptSetProvParam(hProv, PP_KEYEXCHANGE_PIN, PIN_TO_CONT, 0);
if(!CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
CRYPT_DELETEKEYSET)
) {
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
}
//создаем новый контейнер
if(!CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
CRYPT_NEWKEYSET)
) {
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}

//установка ПИНа на контейнер
CryptSetProvParam(hProv, PP_KEYEXCHANGE_PIN, PIN_TO_CONT, 0);


if(!CryptGenKey(hProv, i?CALG_GR3412_2015_M:CALG_GR3412_2015_K, CRYPT_EXPORTABLE, &hKey)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}

}

return 0;

}


Батник для сборки вышеуказанного файла (назовем его a.c)

Цитата:

cl -D__WIN32__ -D_WIN32 -DWIN32 -D_WINDOWS /W3 /EHsc /MDd /ZI /c -I. /Fd"vc70.pdb" -Foa.obj a.c
link /OPT:NOICF /OPT:NOLBR /OPT:NOREF /nologo /subsystem:console /MACHINE:X64 kernel32.lib user32.lib crypt32.lib advapi32.lib /OUT:a.exe a.obj


Что я делаю не так ?

С CSP 5.10874 KC1 всё работало.

PS. Новый CSP устанавливался так: удалил старый через Control Panel, перегрузил машину, установил новый.

Отредактировано пользователем 7 марта 2023 г. 12:52:49(UTC)  | Причина: <WinCryptEx.h> --> "WinCryptEx.h", /MACHINE:IX86 --> /MACHINE:X64

Offline two_oceans  
#2 Оставлено : 25 июля 2019 г. 4:50:48(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Хм... судя по справке CryptGenKey, если указывать алгоритм будет сгенерирован сессионный ключ, а если нужно сгенерировать ключевую пару в контейнер, то вместо алгоритма указывается AT_KEYEXCHANGE или AT_SIGNATURE, алгоритм ключевой пары при этом автовыбирается криптопровайдером. Поэтому первый вопрос: что Вы вообще пытаетесь сгенерировать - сессионный ключ? Тогда я не знаю - имеет ли смысл создавать контейнер. А если генерируете в новый контейнер, то указание алгоритма лишнее. Пусть меня поправят, если я неправильно понимаю.
Offline al  
#3 Оставлено : 25 июля 2019 г. 10:31:01(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
two_oceans, я прекрасно понимаю что намерен сделать.
Прошу не засорять обсуждение.

Прошу ответить по существу сотрудников КриптоПро.

Offline Сонина Лолита  
#4 Оставлено : 25 июля 2019 г. 11:46:57(UTC)
Сонина Лолита

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 19 раз в 17 постах
При подготовке к сертификации использование ГОСТов 2015 года было временно заблокировано.
После завершения работ возможность использования ГОСТов 2015 года будет возвращена.
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Сонина Лолита за этот пост.
al оставлено 25.07.2019(UTC), Игорь Петров оставлено 25.07.2019(UTC)
Offline al  
#5 Оставлено : 25 июля 2019 г. 11:47:20(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
Поясню для чего все это нужно.
Например, для встречного тестирования "зталонная" реализация (на КриптоПро) - "своя" реализация (с использованием openSSL, например).

Вот код тогоже файла a.c (где мы получаем ключ из КриптоПро в открытом виде и потом устанавливаем его же у себя, в своей реализации):
Цитата:

#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#include "WinCryptEx.h"

#define CONTAINER_256 "\\\\.\\REGISTRY\\t_cc_encr_256"
#define CONTAINER_512 "\\\\.\\REGISTRY\\t_cc_encr_512"

unsigned char PIN_TO_CONT[]={'1','1','1','1','1','1','1','1','\0'};

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;

//получить ключ в открытом виде
//в случае успешного выполнения возвращает 1, в случае ошибки - 0
int GetKey(HCRYPTPROV * phProv, HCRYPTKEY * phKey, BYTE * pbOut) {

DWORD dwTmp;
BYTE pbKeyBlobSimple[1024];
DWORD dwBlobLenSimple=1024;
BYTE dt[G28147_KEYLEN];
BYTE im[EXPORT_IMIT_SIZE];
BYTE im2[EXPORT_IMIT_SIZE];
BYTE iv[SEANCE_VECTOR_LEN];
HCRYPTKEY hTempKey = 0;
HCRYPTHASH hTempHash = 0;

//генерим временный ключ на котором будем делать экспорт нашего ключа
if(!CryptGenKey(*phProv, CALG_G28147, CRYPT_EXPORTABLE, &hTempKey)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
//экспортируем (зашифровываем) ключ на временном ключе
dwTmp = CALG_SIMPLE_EXPORT;
if(!CryptSetKeyParam(hTempKey, KP_ALGID, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = CRYPT_MODE_ECB;
if(!CryptSetKeyParam(hTempKey, KP_MODE, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = ZERO_PADDING;
if(!CryptSetKeyParam(hTempKey, KP_PADDING, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
memset(iv,0,SEANCE_VECTOR_LEN);
if(!CryptSetKeyParam(hTempKey, KP_IV, iv, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
if(!CryptExportKey(*phKey, hTempKey, SIMPLEBLOB, 0, pbKeyBlobSimple, &dwBlobLenSimple)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
memcpy(dt,&pbKeyBlobSimple[sizeof(CRYPT_SIMPLEBLOB_HEADER)+SEANCE_VECTOR_LEN],G28147_KEYLEN);
memcpy(im,&pbKeyBlobSimple[sizeof(CRYPT_SIMPLEBLOB_HEADER)+SEANCE_VECTOR_LEN+G28147_KEYLEN],EXPORT_IMIT_SIZE);
//и сразу расшифровываем экспортированный ключ на том же временном ключе
dwTmp = CALG_G28147;
if(!CryptSetKeyParam(hTempKey , KP_ALGID, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = G28147_KEYLEN;
if(!CryptDecrypt(hTempKey, 0, TRUE, 0, dt, &dwTmp)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
//вычисляем имиту по расшифрованному ключу
if(!CryptCreateHash(*phProv, CALG_G28147_IMIT, hTempKey, 0, &hTempHash)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = G28147_KEYLEN;
if(!CryptHashData(hTempHash, dt, dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = EXPORT_IMIT_SIZE;
if(!CryptGetHashParam(hTempHash, HP_HASHVAL, im2, &dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
if(memcmp(im,im2,EXPORT_IMIT_SIZE)!=0){
printf("\nLine:%d, Error:Wrong Imit\n",__LINE__);return 0;
}
if(hTempHash)CryptDestroyHash(hTempHash);
if(hTempKey)CryptDestroyKey(hTempKey);
memcpy(pbOut,dt,G28147_KEYLEN);
return 1;
}

int main(){
unsigned char K[32];
DWORD dwTmp;
int i;

for(i=1;i>=0;--i){

// Получение дескриптора контекста криптографического провайдера
if(CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
0)
) {
CryptSetProvParam(hProv, PP_KEYEXCHANGE_PIN, PIN_TO_CONT, 0);
if(!CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
CRYPT_DELETEKEYSET)
) {
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
}
//создаем новый контейнер
if(!CryptAcquireContext(
&hProv,
i?CONTAINER_256:CONTAINER_512,
NULL,
i?PROV_GOST_2012_256:PROV_GOST_2012_512,
CRYPT_NEWKEYSET)
) {
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}

//установка ПИНа на контейнер
CryptSetProvParam(hProv, PP_KEYEXCHANGE_PIN, PIN_TO_CONT, 0);

if(!CryptGenKey(hProv, i?CALG_GR3412_2015_M:CALG_GR3412_2015_K, CRYPT_EXPORTABLE, &hKey)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}

if(!GetKey(&hProv, &hKey,K)){
printf("\nLine:%d, GetKey error\n",__LINE__);return 0;
}

dwTmp = i?CALG_GR3412_2015_M:CALG_GR3412_2015_K;
if(!CryptSetKeyParam(hKey, KP_ALGID, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = ZERO_PADDING;
if(!CryptSetKeyParam(hKey, KP_PADDING, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}
dwTmp = CRYPT_SIMPLEMIX_MODE;
if(!CryptSetKeyParam(hKey, KP_MIXMODE, (BYTE*)&dwTmp, 0)){
printf("\nLine:%d, Error:0x%x\n",__LINE__,GetLastError());return 0;
}

// ключ (Магма/Кузнечик) получен в открытом виде
// начинается встречное тестирование зашифрования/расшифрования "КриптоПро - openSSL/gost_engine"
// ...

}

return 0;

}

Отредактировано пользователем 7 марта 2023 г. 12:55:00(UTC)  | Причина: <WinCryptEx.h> --> "WinCryptEx.h"

Offline al  
#6 Оставлено : 25 июля 2019 г. 11:49:44(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
Лолита, спасибо.
thanks 1 пользователь поблагодарил al за этот пост.
Игорь Петров оставлено 25.07.2019(UTC)
Offline Игорь Петров  
#7 Оставлено : 29 июля 2019 г. 15:52:08(UTC)
Игорь Петров

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

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

Сказал(а) «Спасибо»: 3 раз
Автор: Сонина Лолита Перейти к цитате
При подготовке к сертификации использование ГОСТов 2015 года было временно заблокировано.
После завершения работ возможность использования ГОСТов 2015 года будет возвращена.


Добрый день!
А не подскажете, сколько ещё по времени будете эти работы проводить?

Отредактировано пользователем 29 июля 2019 г. 15:52:39(UTC)  | Причина: Не указана

Offline Станислав Смышляев  
#8 Оставлено : 31 июля 2019 г. 11:48:10(UTC)
Станислав Смышляев

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 62 постах
Добрый день!

Ориентировочно, во второй половине августа будем готовы выложить новую версию.
С уважением,
Станислав Смышляев, к.ф.-м.н.,
Заместитель генерального директора ООО "КРИПТО-ПРО"
Техническую поддержку оказываем здесь.
Наша база знаний.
Offline al  
#9 Оставлено : 9 сентября 2019 г. 10:43:13(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте,

Установил эту версию:

Цитата:

КриптоПро CSP 5.0
Сертифицированная версия КриптоПро CSP 5.0.11455 (Fury) от 8.05.2019.
Сертификаты соответствия:
1-Base: СФ/114-3726 от 13.08.2019 до 13.08.2022
2-Base: СФ/124-3727 от 13.08.2019 до 13.08.2022
3-Base: СФ/124-3728 от 13.08.2019 до 13.08.2022


Проверил на ней Кузнечика и Магму, как описано в этом посте.
Всё также не работает.

Отредактировано пользователем 9 сентября 2019 г. 10:57:30(UTC)  | Причина: Не указана

Offline al  
#10 Оставлено : 18 сентября 2019 г. 11:15:54(UTC)
al

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

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

Сказал(а) «Спасибо»: 16 раз
Поблагодарили: 1 раз в 1 постах
Уважаемые сотрудники КриптоПро!
С момента сертификации CSP 5 прошло больше месяца.
Cкажите, пожалуйста, когда будет выложена версия CSP 5.0,
в которой "вернут к жизни" Кузнечика и Магму ?
Т.е. в которой снова будет работать код, приведенный в постах данного вопроса ?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.