Страница 1 из 2

Зашифровать пароль

Добавлено: 17 ноя 2006, 17:06
JOHN_PROFF
Нужно подключиться к FB так, что бы невозможно было перехватить пароль (не снифиром, не анализируя память и т.п.)
Дело в том, что в проге он зашифрован, но в памяти лежит в открытом виде, т.к. в компонент TpFIBDatabase должна передоваться строка password=***

Re: Зашифровать пароль

Добавлено: 17 ноя 2006, 17:52
WildSery
JOHN_PROFF писал(а):что бы невозможно было перехватить пароль (не снифиром, не анализируя память и т.п.)
1. Не подлкючаться по сети, использовать Embedded + комплекс мер по локальному сокрытию пароля и кода подключения.
2. Embedded не использовать, оставить комплекс мер из п.1 + дополнительный комплекс мер по шифрованию трафика, ZeBeDee например. Плюс, конечно, защита сервера.
3. При чём тут FB ?

Re: Зашифровать пароль

Добавлено: 17 ноя 2006, 18:04
JOHN_PROFF
WildSery писал(а):1. Не подлкючаться по сети
Нужно именно по сети
WildSery писал(а):оставить комплекс мер из п.1 + дополнительный комплекс мер по шифрованию трафика, ZeBeDee например. Плюс, конечно, защита сервера.
все есть

короче нужно передать пароль в fbclient.dll в зашифрованном виде (на локальной машине)

Re: Зашифровать пароль

Добавлено: 17 ноя 2006, 18:16
WildSery
JOHN_PROFF писал(а):Нужно именно по сети...
...(на локальной машине)
Ы?

Добавлено: 17 ноя 2006, 18:32
JOHN_PROFF
из проги пароль на подключение сначала передается в fbclient.dll (который лежит на локальной машине) а из него на удаленный сервак. Или я чтото путаю?

Добавлено: 17 ноя 2006, 20:16
kdv
клиент передает серверу пароль в зашифрованном виде. затем сервер шифрует его еще раз и сравнивает с тем что лежит в isc4.gdb/admin.ib/security.fdb.

Добавлено: 17 ноя 2006, 20:37
JOHN_PROFF
kdv писал(а):клиент передает серверу пароль в зашифрованном виде. затем сервер шифрует его еще раз и сравнивает с тем что лежит в isc4.gdb/admin.ib/security.fdb.
Тогда подскажите пожалуйста как подключиться из Delphi к FB что бы в оперативной памяти клиента не светился пароль.
Для доступа использую компоненты FIBPlus.

Добавлено: 17 ноя 2006, 20:47
JOHN_PROFF
Вот пример кода

Код: Выделить всё

pFIBDatabase1.DBParams.Add('password=' + deshifr('зашифрованный пароль'))
после запуска программы в оперативной памяти можно найти это: "password=не зашифрованный пароль"
вопрос: что нужно сделать, чтобы не был виден не зашифрованный пароль

Добавлено: 17 ноя 2006, 22:06
kdv
ну вы что, не можете IBDatabase.Params.Clear сделать после коннекта?

Добавлено: 17 ноя 2006, 22:57
JOHN_PROFF
не могу
Cannot perform operation -- DB is currently open
даже если бы и получилось, то это не выход. В момент коннекта всеравно будет доступен пароль. Достаточно сразу после запуска проги делать дамп с определенным промежутком.

Добавлено: 17 ноя 2006, 23:02
Merlin
Если так прёт, применяют трёхзвенку. Да и то, при наличии ехешника в руках раскрутить его - не особая и проблема. Определиться со способом шифрации и послать правильно шифрованный.

Добавлено: 17 ноя 2006, 23:18
JOHN_PROFF
ну что? выходит что жопа? или есть предложэния?

Добавлено: 17 ноя 2006, 23:35
JOHN_PROFF
kdv писал(а):ну вы что, не можете IBDatabase.Params.Clear сделать после коннекта?
Подправил исходник компонента что бы не выдавал ошибку. Параметры очищаются после открытия, база работает нормально, а пароль как был в памяти, так там и остался :(

Добавлено: 17 ноя 2006, 23:56
kdv
а пароль как был в памяти, так там и остался
значит надо забить чем-нибудь другим. попробовать переприсвоить значения параметрам, и т.п.

Добавлено: 18 ноя 2006, 00:03
JOHN_PROFF
Фиг. И один и другой в памяти.

Добавлено: 20 ноя 2006, 11:31
kdv
Фиг. И один и другой в памяти.
тогда так

1. читать про менеджер памяти в дельфях
2. используй short strings, и коннект напрямую через api. исходники ibx тебе в помощь.

Добавлено: 15 окт 2007, 02:09
Al.x
1. сделать dllку с функцией автогенерации пароля по к-либо алгоритму (я делал от времени), туда же запихнуть API потроха для работы с пользователями isc_add_user и т. д.
2. на основе dllки сделать UDF->ХП с созданием пользователя и размещением инфо о нем в таблице например SEC$USERS
3. в коде клиента предоставить пользователю задавать данные о себе, в т. ч. user_name (для маньяков можно автоматически генерировать) и пароль (ненастоящий)
4. юзер вводит инфу она передается в ХП, та обращается к UDF dllки, dllка генерит настоящий пасс, регистрирует юзера, отдает пасс в UDF->ХП, та заносит всю инфу в т. ч. пользовательский пароль (ненастоящий), пароль (настоящий), user_name и прочее в табличку SEC$USERS
5. при авторизации инфа (имя, пользовательский пароль) передается в ХП авторизации, та сравнивает пароль с настоящим паролем и авторизует пользователя (средствами API)
Способ конечно еще тот, но, по крайней мере, обычный юзер не войдет напрямую в БД (при помощи админ утилит) под своим "ненастоящим" паролем, настоящий пароль можно конечно поймать, но сложнее, чем когда он напрямую передается от клиента к серверу.
Есть одно НО, если злоумышленник получает физический доступ к БД, все пользователи у него как на ладони:) но это вопрос защиты БД

Добавлено: 11 мар 2008, 13:34
wordofjustice
Прошу прощения за археологию, но слова "авторизует пользователя (средствами API)" мне к сожалению совсем непонятны. Возможно этих методов нет в той документации которая скачана.
Пожалуйста те кто понимает - ткните в документацию в которой это есть.

Добавлено: 11 мар 2008, 14:05
kdv
например я не знаю, о каком в пункте пять API идет речь. Или имелся в виду обычный коннект IBDatabase?
Какой-то замудренный метод.

Добавлено: 11 мар 2008, 16:30
kostyl
Можно вообще делать базу открытой но писать туда зашифрованные данные, при этом ключ - пароль пользователя, который нигде не храниться - вот и будет операция Ы)) :wink: