Iron Опубликовано 30 Декабря 2003 Жалоба Поделиться Опубликовано 30 Декабря 2003 :shock: Проблема: Функция инициализации не хочет читать ключи из отдельного каталога на винте. :? Описание: Вызываю функцию EXT_InitCrypt из tcc_itcs.dll с структурой EXT_FULL_CONTEXT, где в поле pKeyStorage задаю пути следующим образом:m_pszKeyDisketteDirectory - путь к ключам (это папка с каталогом KEY_DISK)m_pszTransportDirectory - транспортный каталог (это папка с каталогом Station и файлами ap*.*)Дак вот, если указываешь пути как надо, то не работает, грит "Form1. Нет ключевой дискеты или неверный пароль". А если направляешь оба пути на транспортный каталог, то работает, но при наличии ключей в устройстве A: (хотя это нигде мною не указано).Что делать, если мне надо хранить ключи на другом устройстве, не на диске A и не в транспортном каталоге? :evil: Ссылка на комментарий Поделиться на других сайтах Прочее
Iron Опубликовано 14 Января 2004 Автор Жалоба Поделиться Опубликовано 14 Января 2004 Начал усиленно встраивать СКЗИ в нашу программу.Пока плотно работаю только с функциями инициализации СЗКИ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 !!!???И еще интересно, кто-то будет отвечать на мои вопросы? Ссылка на комментарий Поделиться на других сайтах Прочее
PinG Опубликовано 15 Января 2004 Жалоба Поделиться Опубликовано 15 Января 2004 Уважаемый, Iron.По поводу первого вашего сообщения могу сказать, что скорее всего вы не правильно указываете путь к KEY_DISK, т.к. обращение к дисководу осуществляется в случае, если по указанному пути m_pszKeyDisketteDirectory ключевая дискета не найдена. Путь к ключевой дискете должен указываться с точностью до каталога на уровень выше KEY_DISK. Т.е. если есть, например, путь к персональным ключам c:tempkey_disk, то в m_pszKeyDisketteDirectory должен быть записан путь c:temp.Про второе сообщение - да, действительно, такая недоработка присутствует. Связано это с тем, что для нас основной является диалоговая форма запроса пароля и все внутренние механизмы заточены именно под нее. Silent режим требует еще доработки. Спасибо за информацию P.S. Если встраивание Вами наших функций преследует вполне определенные цели, кроме чистого интереса, прошу последующие вопросы направлять на hotline@infotecs.ru и указывать Вашу организацию. Это даст нам основание быстрее реагировать на Ваши вопросы :wink: Ссылка на комментарий Поделиться на других сайтах Прочее
Iron Опубликовано 15 Января 2004 Автор Жалоба Поделиться Опубликовано 15 Января 2004 По поводу пути к 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. Если надо - могу поделиться.Есть и другие непонятки по программированию данной СКЗИ, но тратить Ваше и свое время на них не буду, так как даже на основные проблемы Вы не торопитесь реагировать. Ссылка на комментарий Поделиться на других сайтах Прочее
PinG Опубликовано 16 Января 2004 Жалоба Поделиться Опубликовано 16 Января 2004 1) Про пути к KEY_DISK и STATION - протестируем еще раз, результат сообщим.2) Функция генерации случайного числа присутствует, см. стр. 38 в документе RFCI_079.3) До вызова функции инициализации EXT_InitCrypt никаких других функций библиотеки вызывать нельзя. Функция инициализации выполняет целый ряд действий по генерации и определению криптографических параметров без которых нормальная работа остальных функций невозможна или нами не проверялась. Это следует принять as is.4) Работа функции ExtGetErrorDefinition продемонстрирована в прилагаемом к SDK примере. Проанализируйте его. Мы не можем только по отзыву "не работает" понять в чем проблема.Просьба продолжение переписки вести через hotline@infotecs.ru. Это связано с тем, что данный форум не является официальной формой поддержки. Спасибо. Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения