Перейти к контенту

Рекомендуемые сообщения

:shock: Проблема: Функция инициализации не хочет читать ключи из отдельного каталога на винте.

:? Описание: Вызываю функцию EXT_InitCrypt из tcc_itcs.dll с структурой EXT_FULL_CONTEXT, где в поле pKeyStorage задаю пути следующим образом:

m_pszKeyDisketteDirectory - путь к ключам (это папка с каталогом KEY_DISK)

m_pszTransportDirectory - транспортный каталог (это папка с каталогом Station и файлами ap*.*)

Дак вот, если указываешь пути как надо, то не работает, грит "Form1. Нет ключевой дискеты или неверный пароль". А если направляешь оба пути на транспортный каталог, то работает, но при наличии ключей в устройстве A: (хотя это нигде мною не указано).

Что делать, если мне надо хранить ключи на другом устройстве, не на диске A и не в транспортном каталоге? :evil:

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Начал усиленно встраивать СКЗИ в нашу программу.

Пока плотно работаю только с функциями инициализации СЗКИ

ExtInitCrypt и ExtInitCryptEx.

Функция ExtInitCryptEx предлагает встроенный диалог ввода пароля,

он меня не устраивает, поэтому решил использовать ExtInitCrypt.

И вот какую неприятную мелочь заметил: если пароль указан

неправильно, то вместо того, чтобы выдать ошибку, программа

выводит встроенный диалог ввода пароля (как и в ExtInitCryptEx).

Прочитал в документации, что в этом случае надо задавать флаг

EXT_SILENT_MODE в структуре EXT_FULL_CONTEXT.dwFlags - задал,

теперь диалог не выдается, но функция "зависает" примерно на

40 секунд и выдает ошибку e_ENTER_PASS_REJECT=10 ("Пользователь

отказался от ввода пароля").

Бесят три вещи:

1. Зачем висеть 40 секунд (иногда больше) !!!???

2. Зачем выдавать ошибку e_ENTER_PASS_REJECT когда надо выдавать

e_WRONG_PASSWORD=2 !!!???

И еще интересно, кто-то будет отвечать на мои вопросы?

Ссылка на комментарий
Поделиться на других сайтах

Уважаемый, Iron.

По поводу первого вашего сообщения могу сказать, что скорее всего вы не правильно указываете путь к KEY_DISK, т.к. обращение к дисководу осуществляется в случае, если по указанному пути m_pszKeyDisketteDirectory ключевая дискета не найдена. Путь к ключевой дискете должен указываться с точностью до каталога на уровень выше KEY_DISK. Т.е. если есть, например, путь к персональным ключам c:tempkey_disk, то в m_pszKeyDisketteDirectory должен быть записан путь c:temp.

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

P.S. Если встраивание Вами наших функций преследует вполне определенные цели, кроме чистого интереса, прошу последующие вопросы направлять на hotline@infotecs.ru и указывать Вашу организацию. Это даст нам основание быстрее реагировать на Ваши вопросы :wink:

Ссылка на комментарий
Поделиться на других сайтах

По поводу пути к KEY_DISK. Я его правильно указываю. Например, каталог KEY_DISK лежит по пути D:VirtualTcbKEY_DISK, а транспортный каталог с Station и файлами ap*.* лежит по пути C:TcbBankClTrans. В этом случай задаю:

m_pszKeyDisketteDirectory := 'D:VirtualTcb';

m_pszTransportDirectory := 'C:TcbBankClTrans';

И ключи не поднимаются из D:VirtualTcb, более того я испробовал все: 'D:VirtualTcb', 'D:VirtualTcbKEY_DISK', 'D:VirtualTcbKEY_DISK' и даже пробовал размещать ключи в других местах и задавать так: 'C:TcbBankClFloppy', 'C:TcbBankClFloppy', 'A:Tcb', и еще кучу чего пробовал. Советую и Вам попробовать. Вы придете к такому же выводу как и я: ключи читаются только из A: (но не из B:) или только из транспортного каталога (т.е. если положить KEY_DISK в C:TcbBankClTrans и задать m_pszKeyDisketteDirectory такой же).

Ключи д.б. на съемном носителе - требования безопасности, а транспортный каталог на винте, т.к. в него что-то пишется, это значит, что они должны быть в разных каталогах. Ваше СКЗИ не позволяет этого сделать, правильно ли это?

По поводу диалога ввода пароля и моих интересов. Мне вобщем-то многое приходится терпеть, но заставлять терпеть Клиентов очень некрасиво (мне - наших, а вам - своих и нас в том числе, надеюсь, намек понятен).

Про организацию напишу в письме.

Другие основные проблемы.

Нет функции возврата псевдослучайной последовательности, хотя такая функция по определению д.б. в любой СКЗИ. Кстати говоря, она нам очень нужна, т.к. использовать стандартный Random() нельзя из соображений безопасности.

В документации (RFCI_079.doc) написано, что использовать другие функции до вызова EXT_InitCrypt нельзя. Не знаю, почему бы не работать, например, функциям выделения памяти ExtAllocMemory и ExtFreeMemory (сам не проверял), но функция проверки подписи ExtVerifySign работает, хотя и выдает ошибку для правильной подписи e_UNKNOWN_CRYPT_METHOD=73. Дак какими же функциями можно пользоваться без инициализации подписи?

Насчет третьей вещи которая бесит, я не помню (хотя точно помню, что она была :-) )

PS. Немного флейма.

Функции возвращающая "человеческое" описание ошибки

procedure ExtGetErrorDefinition(const ErrCode: Integer;

pErrDefinition: PChar; var pErrDefSize: dWord); stdcall;

не стала работать. А я не стал запариваться - выдрал описание ошибок из исходников, заодно перевел на русский ;-), когда писал интерфейс для Delphi. Если надо - могу поделиться.

Есть и другие непонятки по программированию данной СКЗИ, но тратить Ваше и свое время на них не буду, так как даже на основные проблемы Вы не торопитесь реагировать.

Ссылка на комментарий
Поделиться на других сайтах

1) Про пути к KEY_DISK и STATION - протестируем еще раз, результат сообщим.

2) Функция генерации случайного числа присутствует, см. стр. 38 в документе RFCI_079.

3) До вызова функции инициализации EXT_InitCrypt никаких других функций библиотеки вызывать нельзя. Функция инициализации выполняет целый ряд действий по генерации и определению криптографических параметров без которых нормальная работа остальных функций невозможна или нами не проверялась. Это следует принять as is.

4) Работа функции ExtGetErrorDefinition продемонстрирована в прилагаемом к SDK примере. Проанализируйте его. Мы не можем только по отзыву "не работает" понять в чем проблема.

Просьба продолжение переписки вести через hotline@infotecs.ru. Это связано с тем, что данный форум не является официальной формой поддержки. Спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Гость
Эта тема закрыта для публикации сообщений.
×
×
  • Создать...

Важная информация

Продолжая пользоваться сайтом вы принимаете Условия использования.