28.05.2003 12:54:46Механика входа в систему по смарт-карте Ответов: 11
Александр Соловей
Коллеги,
пытаюсь разобраться в механизме входа в систему(w2k) с помощью Smart Card (usb token). Прочитал уже кучу документации, но самое интересное каждый раз остается за кадром. В результате никак не могу сформировать общую картинку. Надеюсь на квалифицированную помощь:)

-----------
И так, участники процесса входа в систему: Gina, Lsa, Authentication Package, Smart Card, Crypto Provider.

Gina обнаруживает наличие smart card, запрашивает PIN,
далее она должна обратиться к LSA, передав некие credentials и указав Authentication Package, который будет использоваться.
В случае с Kerberos+SmartCard, сам Authentication Package должен подписывать определенные данные на приватном ключе пользователя. Так вот собственно и вопросы:
- что происходит между запросом PIN из Gina и вызовом LsaLogonUser
- какие Credentials Gina передает в LsaLogonUser, есть ли где-нибудь описание этих форматов
- откуда Authentication Package знает, к какому Crypto Provider обращаться, ведь насколько я понимаю, это должен быть именно Crypto Provider для данной Smart Card, ключ-то на ней.

Также буду очень благодарен за всякие полезные ссылки.
Заранее спасибо.
 
Ответы:
20.10.2004 13:17:09Ivan Varzar
Принципиально ничем не отличается от стандартного входа в систему. Ключевое отличие - только в SAS и методах ввода имени-пароля. Если в первом случае достаточно уметь работать с окнами :), то во втором уметь читать MSDN по предоставляемому API по работе со смарт-картами. В нете достаточно примеров реализации своей GINA.
20.10.2004 15:11:36mAx
насчет механики ничего не могу сказать :) А вот процесс входа в домен по смарт-карте прекрасно опсисан в MSDN:
http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=smart+card+logon, точнее http://www.microsoft.com/windows2000/techinfo/howitworks/security/sclogonwp.asp, про CSP тут: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnscard/html/smartcardcspcook.asp?frame=true.
18.06.2005 22:29:52Александр
to Ivan Varzar:

Иван, ко ли Вы такой крутой, может напишите нам, бестолковым фрагмент работающего вызова LsaLogonUser для входа по карте? Тпа куда PIN пихать и т.п. На сайте Микрософт, куда Вы нас "послали", можно даже не искать этой информации - она закрыта, вне зависимости от того, умеем ли мы читать или нет.
19.06.2005 18:16:42maxdm
typedef struct _KERB_SMART_CARD_LOGON { KERB_LOGON_SUBMIT_TYPE MessageType; UNICODE_STRING Pin; ULONG CspDataLength; PUCHAR CspData;
} KERB_SMART_CARD_LOGON, *PKERB_SMART_CARD_LOGON;
19.06.2005 18:21:28Sly
Я прошу фрагмент работающего кода :)
Про эту структуру все знают и все, кто пробовал сделать логон по ПиНу знают, что это не работает. Есть еще какоето необходимое условие.

В чистом виде использование этой схемы согласно MSDN даст ошибку "не найден сервер для проверки сертификата"
20.06.2005 18:44:07maxdm
Вот код, работающий на XP и запрашивающий любые credentials, в том числе сертификаты и смарт-карты (для работы с КриптоПро CSP 3.0 требуется КриптоПро Winlogon)

DWORD res = 0;
PWSTR pszTargetName = L"Server";
WCHAR pszUserName[CREDUI_MAX_USERNAME_LENGTH + 1];
WCHAR pszPassword[CREDUI_MAX_PASSWORD_LENGTH + 1];
STARTUPINFOW StartupInfo;
PROCESS_INFORMATION ProcessInfo;
BOOL pfSave = FALSE;

ZeroMemory(pszUserName, CREDUI_MAX_USERNAME_LENGTH + 1);
ZeroMemory(pszPassword, CREDUI_MAX_PASSWORD_LENGTH + 1);
ZeroMemory( &StartupInfo, sizeof(StartupInfo) );
StartupInfo.cb = sizeof(StartupInfo);
ZeroMemory( &ProcessInfo, sizeof(ProcessInfo) );

res = CredUIPromptForCredentialsW(
NULL,
pszTargetName,
NULL,
0,
pszUserName,
CREDUI_MAX_USERNAME_LENGTH,
pszPassword,
CREDUI_MAX_PASSWORD_LENGTH,
&pfSave,
CREDUI_FLAGS_GENERIC_CREDENTIALS | CREDUI_FLAGS_ALWAYS_SHOW_UI);
res = CreateProcessWithLogonW(
pszUserName,
NULL,
pszPassword,
LOGON_WITH_PROFILE,
L"cmd.exe",
NULL,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&StartupInfo,
&ProcessInfo);

Причем UserName получается весьма странный - явно маскированный - дальше пока не копал, а пин-код передается в чистом виде в pszPassword.
Как это сделать на низком уровне, пока не совсем понятно - будет время разберусь.
20.06.2005 18:56:49maxdm
Это тоже вроде работает
LogonUserW(pszUserName, NULL, pszPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, &phToken);
20.06.2005 19:39:01maxdm
содержимое pszUserName связано с CredMarshalCredential/CredUnMarshalCredential, так что этот код только для XP (когда сертификат со смарт-карты автоматически отображается в хранилище), вопрос с 2k пока открыт.
20.06.2005 22:20:42Sly
Спасибо!

на счет 2k гимор изрядный - уже больше месяца ищу решение. Под XP - попробую, хотя задачи такой пока не стоит.
18.11.2007 9:01:16Ruslan
Hey
http://viagra-de.pillsmag.com
http://viagra-da.pillsmag.com
http://viagra-it.pillsmag.com
http://viagra-se.pillsmag.com
http://cialis-it.pillsmag.com
Bye-bye
18.11.2007 17:40:52Zinaida
Hi
[url=http://viagra-de.pillsmag.com]viagra[/url]
[url=http://viagra-da.pillsmag.com]viagra[/url]
[url=http://viagra-it.pillsmag.com]viagra[/url]
[url=http://viagra-se.pillsmag.com]viagra[/url]
[url=http://cialis-it.pillsmag.com]cialis[/url]
Regads