Безопасный ввод пароля
От: a-lex Россия  
Дата: 17.12.02 18:20
Оценка:
Доброго времени суток!
Не подскажете ли способ сделать (в проге на WinAPI) ввод пароля, защищенный от "подглядывания"
других приложений (хотя бы от клавиатурных хуков)? Работать предстоит под
Win2K/XP, т.е. вариант с собственным драйвером отпадает (т.к. может не
быть прав на его инсталляцию).
Лучшее до чего я додумался -- это ставить свой хук, не передающий
управление дальше по hook chain, но этот подход стопроцентной гарантии не
дает...

Заранее спасибо
Re: Безопасный ввод пароля
От: siavol Россия  
Дата: 18.12.02 05:40
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>Доброго времени суток!

AL>Не подскажете ли способ сделать (в проге на WinAPI) ввод пароля, защищенный от "подглядывания"

Можно его шифровать. Генерить случайный пароль шифрования
и при вводе текста сразу его шифровать.
А перед использованием расшифровывать.
На мне сейчас Kossовские уши и в них играет — silent
Re[2]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 06:23
Оценка:
Здравствуйте, siavol, Вы писали:

S>Можно его шифровать. Генерить случайный пароль шифрования

S>и при вводе текста сразу его шифровать.
S>А перед использованием расшифровывать.


Беда в том, что "шпион" может поставить глобальный клавиатурный хук и записать "сырые" нажатия клавиш. Из получившегося лога относительно легко вытащить последовательности символов, возможно являющиеся паролем.
Re: Безопасный ввод пароля
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 18.12.02 06:33
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>Доброго времени суток!

AL>Не подскажете ли способ сделать (в проге на WinAPI) ввод пароля, защищенный от "подглядывания"
AL>других приложений (хотя бы от клавиатурных хуков)? Работать предстоит под
AL>Win2K/XP, т.е. вариант с собственным драйвером отпадает (т.к. может не
AL>быть прав на его инсталляцию).
AL>Лучшее до чего я додумался -- это ставить свой хук, не передающий
AL>управление дальше по hook chain, но этот подход стопроцентной гарантии не
AL>дает...

в http://www.rsdn.ru/article/?crypto/pgpsdk1.xml
Автор(ы): Алексей Кирюшкин
Дата: 17.10.2002
Вкратце о шифровании с открытым ключом, реализация его в PGPsdk. Установка PGPsdk, поддерживаемые OS, краткое описание функций PGP SDK, используемых при шифровании с открытым ключом, класс-обертка CSimplePGP, упрощающий использование функций шифрования из PGPsdk. Демонстрационная программа для шифрования файлов и данных из памяти, использование клбчей из файлов и ресурсов, вывод результатов в файл и буфер в памяти.
есть ссылочка на исходники PGP, там это дело как-то защищается, можешь гдлянуть если интересно.
Re[3]: Безопасный ввод пароля
От: siavol Россия  
Дата: 18.12.02 06:55
Оценка:
Здравствуйте, a-lex

А если поставить свой хук и из него передавать приложению
код другой клавиши, а приложение этот код преобразует обратно
Вот только чей хук будет раньше срабатывать ваш или вражеский?
На мне сейчас Kossовские уши и в них играет — Bt — The Road To Lostwithiel
Re[4]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 08:28
Оценка:
Здравствуйте, siavol, Вы писали:

S>А если поставить свой хук и из него передавать приложению

S>код другой клавиши, а приложение этот код преобразует обратно
S>Вот только чей хук будет раньше срабатывать ваш или вражеский?

Интересная идея. Можно еще генерировать ложные нажатия клавиш (напр. через SendInput). Надо попробовать.
Re[5]: Безопасный ввод пароля
От: siavol Россия  
Дата: 18.12.02 08:37
Оценка:
Здравствуйте, a-lex

Для меня лично остается открытым вопрос: "Как сделать что бы твой хук гарантированно выполнялся раньше вражинского?"
Если есть решение, то очень хотелось бы о нем узнать
На мне сейчас Kossовские уши и в них играет — Bt & Paul Van Dyke — Flaming June
Re[6]: Безопасный ввод пароля
От: vasketsov Россия http://ntprog.by.ru
Дата: 18.12.02 12:19
Оценка:
Здравствуйте, siavol, Вы писали:

S>Здравствуйте, a-lex


S>Для меня лично остается открытым вопрос: "Как сделать что бы твой хук гарантированно выполнялся раньше вражинского?"

S>Если есть решение, то очень хотелось бы о нем узнать

Предположим, такой алгоритм существует. Тогда если он будет применем вражеским хуком, он будет выполняться раньше вашего. Отсюда следует, что гарантии этого быть не может.
Васкецов Сергей
http://registry.km.ru
Re[2]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 12:38
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>в http://www.rsdn.ru/article/?crypto/pgpsdk1.xml
Автор(ы): Алексей Кирюшкин
Дата: 17.10.2002
Вкратце о шифровании с открытым ключом, реализация его в PGPsdk. Установка PGPsdk, поддерживаемые OS, краткое описание функций PGP SDK, используемых при шифровании с открытым ключом, класс-обертка CSimplePGP, упрощающий использование функций шифрования из PGPsdk. Демонстрационная программа для шифрования файлов и данных из памяти, использование клбчей из файлов и ресурсов, вывод результатов в файл и буфер в памяти.
есть ссылочка на исходники PGP, там это дело как-то защищается, можешь гдлянуть если интересно.


Спасибо за ссылку, поглядел. Хорошо, но не панацея...
Re[3]: Безопасный ввод пароля
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 18.12.02 12:51
Оценка:
Здравствуйте, a-lex, Вы писали:

OE>>в http://www.rsdn.ru/article/?crypto/pgpsdk1.xml
Автор(ы): Алексей Кирюшкин
Дата: 17.10.2002
Вкратце о шифровании с открытым ключом, реализация его в PGPsdk. Установка PGPsdk, поддерживаемые OS, краткое описание функций PGP SDK, используемых при шифровании с открытым ключом, класс-обертка CSimplePGP, упрощающий использование функций шифрования из PGPsdk. Демонстрационная программа для шифрования файлов и данных из памяти, использование клбчей из файлов и ресурсов, вывод результатов в файл и буфер в памяти.
есть ссылочка на исходники PGP, там это дело как-то защищается, можешь гдлянуть если интересно.


AL>Спасибо за ссылку, поглядел. Хорошо, но не панацея...


я кстати сам не смотрел раскажи хоть что высмотрел
Re: Безопасный ввод пароля
От: Whisperer  
Дата: 18.12.02 12:55
Оценка: 3 (1)
Здравствуйте, a-lex, Вы писали:

Если хочешь что-бы нельзя было проследить ввод пароля — тогда самый дейсвенный способ — не нажымать вобще этих "кнопок" — тоесть я могу предложить реализацию:

Рисуешь на экране клавиатуру (можно даже для верности специальным цветом) и ввод осуществляешь мышью.

От клавиатурных хуков железно спасаешься
Re[7]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 15:06
Оценка:
Здравствуйте, vasketsov, Вы писали:

V>Предположим, такой алгоритм существует. Тогда если он будет применем вражеским хуком, он будет выполняться раньше вашего. Отсюда следует, что гарантии этого быть не может.


Разумно, хотя и печально
Тогда, наверно, остается единственный вариант — завалить противника синтезированным дерез SendInput ложным вводом.
Re[4]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 15:18
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>я кстати сам не смотрел раскажи хоть что высмотрел


Там на время ввода пароля ставится куча хуков: WH_KEYBOARD, WH_CBT, WH_GETMESSAGE и WH_MSGFILTER; все они не вызывают CallNextWindowsHookEx и возвращают 0 (WH_KEYBOARD, кроме того, записывает нажатия клавиш для получения введенной строки).
Такая система должна быть уязвима для "подглядывания" при помощи WH_KEYBOARD_LL и WH_DEBUG.
Re[2]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 15:43
Оценка:
Здравствуйте, Whisperer, Вы писали:

W>Если хочешь что-бы нельзя было проследить ввод пароля — тогда самый дейсвенный способ — не нажымать вобще этих "кнопок" — тоесть я могу предложить реализацию:


W>Рисуешь на экране клавиатуру (можно даже для верности специальным цветом) и ввод осуществляешь мышью.


W>От клавиатурных хуков железно спасаешься


Боюсь, пользователь меня не поймет. Но вообще, что-то в этом есть
Re[5]: Безопасный ввод пароля
От: retalik www.airbandits.com/
Дата: 18.12.02 15:47
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>Там на время ввода пароля ставится куча хуков: WH_KEYBOARD, WH_CBT, WH_GETMESSAGE и WH_MSGFILTER; все они не вызывают CallNextWindowsHookEx и возвращают 0 (WH_KEYBOARD, кроме того, записывает нажатия клавиш для получения введенной строки).

AL>Такая система должна быть уязвима для "подглядывания" при помощи WH_KEYBOARD_LL и WH_DEBUG.
В DriveCrypt (на которую, кстати, Ody$$ey ссылку и дал) на время ввода пароля можно перейти в какой-то особый "консольный" режим, в котором не работают ни хуки, не подглядывание в TextBox. Исходники там есть. Вроде, http://www.drivecrypt.com/.
Успехов,
Виталий.
Re[8]: Безопасный ввод пароля
От: vasketsov Россия http://ntprog.by.ru
Дата: 18.12.02 16:05
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>Тогда, наверно, остается единственный вариант — завалить противника синтезированным дерез SendInput ложным вводом.


Васкецов Сергей
http://registry.km.ru
Re[6]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 18.12.02 16:15
Оценка:
Здравствуйте, retalik, Вы писали:

R>Здравствуйте, a-lex, Вы писали:


AL>>Там на время ввода пароля ставится куча хуков: WH_KEYBOARD, WH_CBT, WH_GETMESSAGE и WH_MSGFILTER; все они не вызывают CallNextWindowsHookEx и возвращают 0 (WH_KEYBOARD, кроме того, записывает нажатия клавиш для получения введенной строки).

AL>>Такая система должна быть уязвима для "подглядывания" при помощи WH_KEYBOARD_LL и WH_DEBUG.
R>В DriveCrypt (на которую, кстати, Ody$$ey ссылку и дал) на время ввода пароля можно перейти в какой-то особый "консольный" режим, в котором не работают ни хуки, не подглядывание в TextBox. Исходники там есть. Вроде, http://www.drivecrypt.com/.

Если я не ошибаюсь, оно как раз и реализовано с помощью собственного драйвера, что мне, увы, не подходит
Re: Безопасный ввод пароля
От: Roman_M rgmroman.narod.ru
Дата: 20.12.02 10:42
Оценка: 29 (6)
Здравствуйте, a-lex, Вы писали:

AL>Доброго времени суток!

AL>Не подскажете ли способ сделать (в проге на WinAPI) ввод пароля, защищенный от "подглядывания"
AL>других приложений (хотя бы от клавиатурных хуков)? Работать предстоит под
AL>Win2K/XP, т.е. вариант с собственным драйвером отпадает (т.к. может не
AL>быть прав на его инсталляцию).
AL>Лучшее до чего я додумался -- это ставить свой хук, не передающий
AL>управление дальше по hook chain, но этот подход стопроцентной гарантии не
AL>дает...

AL>Заранее спасибо


Я не смотрел, что там есть в исходниках, на которые тут приводили ссылки, поэтому возможно ничего нового не предложу. Тем не менее есть такая мысль:
1) Сделать свой декстоп на WINSTA0 (CreateDesktop)
2) Установить этот декстоп на поток, где вводится пароль (SetThreadDesktop)
3) Создать окно ввода пароль
4) Активировать десктоп (SwitchDestop)
5) Запросить пароль
6) Переключить десктоп обратно (SwitchDestop)
7) Установить старый декстоп на поток, где вводится пароль (SetThreadDesktop)
8) Удалить дектоп (CloseDesktop)

Эти действия можно делать из сервиса, играя с настройками доступа, для пущей безопасности.

Logon в систему на NT сделан примерно также, т.е. ввод пароля и хранитель экрана — это другие десктопы.
Re[2]: Безопасный ввод пароля
От: a-lex Россия  
Дата: 05.01.03 09:59
Оценка:
Здравствуйте, Roman_M, Вы писали:

RM>Я не смотрел, что там есть в исходниках, на которые тут приводили ссылки, поэтому возможно ничего нового не предложу. Тем не менее есть такая мысль:

RM>[skipped]

О! Именно то, что надо! Попробовал, получилось

ЗЫ. Большое спасибо всем откликнувшимся.
Re[8]: Безопасный ввод пароля
От: Alex  
Дата: 05.01.03 22:46
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>Здравствуйте, vasketsov, Вы писали:


V>>Предположим, такой алгоритм существует. Тогда если он будет применем вражеским хуком, он будет выполняться раньше вашего. Отсюда следует, что гарантии этого быть не может.


AL>Разумно, хотя и печально

AL>Тогда, наверно, остается единственный вариант — завалить противника синтезированным дерез SendInput ложным вводом.

А как бороть прогу которая будет засекать нажаты или нет те или иные клавиши через определённые (очень короткие) промежутки времени, например функцией GetAsyncKeyState?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.