Локальная аутентификация пользователя в Windows NT
Локальная аутентификация пользователя в Windows NT
В ОС Windows NT для идентификации используется имя пользователя, а для подтверждения введенного имени - процедура аутентификации, использующая символьный пароль пользователя.
Обозначим через:
PasswordUniCode - пароль пользователя в формате UniCode;
PasswordASCII[0..13] - массив из 14 байт, пароль пользователя в формате ASCII;
PasswordDES[0..15] - массив из 16 байт, который назовем образом пароля пользователя, полученным при помощи алгоритма DES;
PasswordMD4 [0.. 15] - массив из 16 байт, который назовем образом пароля пользователя, полученным при помощи алгоритма MD4.
EncryptedText = DES(ClearText, Key) - функция преобразования по алгоритму DES, где ClearText и EncryptedText массивы по 8 байт - открытый и шифрованный текст соответственно, Key - массив из 7 байт, являющийся ключом;
HashText = MD4(ClearText) - функция преобразования по алгоритму хэширования MD4, где ClearText массив из 64 байт - открытый текст, HashText массив из 16 байт -хэшированный текст. .
Алгоритм локальной идентификации пользователя состоит из следующих шагов:
Шаг 1; Пользователь вводит с клавиатуры в ответ на запрос рабочей станции свое имя, имя домена и пароль в формате UniCode: PasswordUniCode.
Шаг 2. PasswordUniCode преобразуется в формат ASCII, причем маленькие латинские буквы преобразуются в большие, результат записывается в PasswordASCII - массив из 14 байт. Если пароль короче 14 символов, оставшиеся байты массива PasswordASCII заполняются нулями.
Далее осуществляется преобразование:
PasswordDES[0..7]:= DES(ClearText, PasswordASCII[0..6]);
PasswordDES[8..15]:= DES(ClearText, PasswordASCII[7..13]),
где ClearText = (4B, 47, 53, 21, 40, 23, 24, 25) = «KGS!@#$%».
Шаг З. Осуществляется преобразование пароля пользователя с помощью алгоритма хэширования MD4:
PasswordMD4:= MD4(PasswordUniCode).
Шаг 4. PasswordMD4 сравнивается с данными, которые вычисляются путем расшифрования данных, хранящихся в реестре, в начале загрузки операционной системы.
Шаг 5. В случае успешной проверки на шаге 4 разрешается дальнейшая загрузка системы, в противном случае осуществляется переход к шагу 1.
При входе пользователя в систему из введенного им пароля выбираются 14 байт (при меньшей длине пароль дополняется нулями), которые затем дважды используются в качестве ключей для шифрования согласно алгоритму DES 8-ми байт, а именно: Ox4b,0x47,0x53,0x21,0x40,0x23,0x24,0x25, находящихся в файле advapi32.dll и являющихся заранее заданными постоянными значениями. При этом 14 байт пароля пользователя разбиваются на два отрезка по 7 байт каждый, которые затем представляются в виде последовательности из восьми 7-ми битовых векторов. Для получения ключа алгоритма DES с каждой из последовательностей выполняются следующие действия: каждый 7-ми битовый вектор переписывается в обратном порядке, расширяется до байта с приписыванием справа единицы, и к полученным 8-ми байтам применяется операция конкатенации. Полученный таким образом двоичный вектор длины 64 используется в качестве ключа.
Результаты шифрования исходных 8-ми байт на двух различных ключах, полученных из пароля пользователя, разбитые на два блока по 8 байт, дополняются справа нулями и разбиваются на три блока по 7 байт, из которых затем снова получаются в соответствии с описанным выше способом три 64-битовые вектора, используемые в качестве трех различных ключей при трех независимых вызовах процедуры шифрования, применяемых к полученному от сервера значении сеансового ключа (меняющегося от сессии к сессии). Результат шифрования в виде последовательности 24-х байт рассматривается как результат обработки пароля пользователя.
Оценка адекватности описанного преобразования реальному производилась путем соотнесения дизассемблированной процедуры шифрования и аналогичной процедуры, записанной на языке высокого уровня. При этом выяснилось, что используется блочный алгоритм, имеющий итеративную структуру - к исходному тексту - блоку из 64-х бит - применяется подстановка. Результат применения подстановки разбивается на два блока по 32 бита, один из которых путем повторения некоторых бит расширяется до 48-ми битового блока, который складывается покоординатно с выборкой из ключа той же размерности и разбивается на восемь блоков по 6 байт, поступающих на узлы замены. К полученному в результате 32-х битовому блоку снова применяется подстановка. Затем блоки складываются и меняются местами. Этот процесс итеративно повторяется 16 раз. Затем снова применяется подстановка. Таким образом, стало понятно, что речь идет о DES-подобной схеме, и вопрос состоит лишь в совпадении параметров алгоритма. Для того, чтобы решить этот вопрос, была проделана работа по выделению участков процедуры, реализующих ту или иную часть алгоритма, и их сравнению с аналогичными частями алгоритма DES.
Первоначальная подстановка.
Первоначальная подстановка открытого текста осуществляется в соответствии со следующей процедурой:
for(i=0; i<63; i++)
Text[i]«Plaintext[Tabl[i]];
где массив Plaintext содержит исходный открытый текст, массив Text содержит обрабатываемый массив из 64 бит, поступающий затем на вход итеративной части алгоритма, а массив Tab! содержит нижнюю строку подстановки открытого текста и имеет вид:
57,49,41/33,25,17, 9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7,
56,48,40,32,24,16, 8,0,
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6;
что совпадает с первоначальной подстановкой для открытого текста алгоритма DES с учетом различий в нумерации бит текста (в описании DES вс
е нумерации начинаются с 1).
Функция расширения. Функция расширения 32-х битового блока обрабатываемого текста применяется следующим образом: при i, изменяющемся от 0 до 47, i-й бит результирующего блока вычисляется по формуле:
Text[32+Tab2[i]];
где Таb2 имеет вид:
31, 0, 1, 2, 3, 4, 3, 4,
5, 6, 7, 8, 7, 8, 9,10;.
11,12,11,12,13,14,15,16,,
15,16,17,18,19,20,19,20, ,
21,22,23,24,23,24,25,26,
27,28,27,28,29,30,31, 0; '
что непосредственно совпадает с функцией расширения алгоритма DES.
S-боксы. Узлы замены, именуемые S-боксами, применяются следующим образом: Пусть ah(i) - i-й 6-ти битовый блок 48-ми битовой последовательности, получаемой в результате побитового сложения выхода с функции расширения с ключом на итерацию bx=(i-l)*64, al(i) - i-й блок результирующей 32-х битовой последовательности - результат применения узла замены, 1=1..8. Тогда al(i) вычисляется следующим образом:
ah+=bx;
al=Tab3[ah/2];
if(ah&l) al/=16;
al%=16;
при этом ТаbЗ имеет вид:
ОхОе, Oxf 4, Ox7d, 0x41, Охе2, Ox2f, Oxdb., 0x18,
ОхаЗ,Охба,Охсб,Oxbc,0x95,0x59,0x30,0x87,
Oxf4, Oxcl,Ох8е,0x28,Ox4d,0x96,0x12,Ox7b,
Ox5f,.Oxbc,Ox39,Oxe7,.Oxa3,OxQa,Ox€5,OxdO, Ox3f,0xdl,0x48,Ox7e,0xf6,0x2b,0x83,Oxe4/ Oxc9,0x07,0x12,Oxad,Охбс,0x90,Oxb5,Ox5a, OxdO,Ox8e,Oxa7,Oxlb,ОхЗа,Oxf4,0x4d,0x21, Oxb5,0x68,Ox7c,Охсб,0x09,0x53,Oxe2,Ox9f, Oxda,0x70,0x09,Ox9e,0x36,0x43,Ox6f,Oxa5, 0x21,Ox8d,Ox5c,Oxe7,Oxcb,Oxb4,Oxf2,0x18, Oxld, Охаб, Oxd4, 0x09, 0x68, Ox9f, 0x83, Ox7CT, Ox4b,Oxf1,Oxe2,ОхЗс,Oxb5,Ox5a,Ox2e,Oxc7, Oxd7,Ox8d,Oxbe,0x53,0x60,Oxf6,0x09,ОхЗа, 0x41, 0x72, 0x28, Oxc5, Oxlb, Oxa'c, Oxe4, Ox9f, ОхЗа,Oxf6,0x09,0x60,Oxac,Oxlb,Oxd7,Ox8d, Ox9.f, 0x41, 0x53, Oxbe, Oxc5, 0x72, 0x28, Oxe4, Oxe2, Oxbe,0x24,Oxcl,0x47,Ox7a,Oxdb,0x16, 0x58,0x05,Oxf3,Oxaf,Ox3d,0x90,Ox8e,0x69, Oxb4, 0x82,Oxcl,Ox7b,Oxla,Oxed,0x27,Oxd8, Ox6f,Oxf9,OxOc,0x95,Охаб,0x43,0x50,ОхЗе, Oxac,Oxf1,0х4а,Ox2f,0x79,Oxc2,0x96,0x58, 0x60,Oxld,Oxd3,Oxe4,OxOe,Oxb7,0x35,Ox8b, 0x49,ОхЗе,Ox2f,Oxc5;0x92,0x58,Oxfc,ОхаЗ, Oxb7,OxeO,0x14,Ox7a,0x61,OxOd,Ox8b,Oxd6, Oxd4., OxOb, Oxb2, Ox7e, Ox4f, 0x90, 0x18, Oxad, ОхеЗ,ОхЗс,Ох59/0хс7,0x25,Oxfa,0x86,0x61, 0x61,Oxb4,Oxdb,Ox8d,Oxlc,0x43,Oxa7,Ox7e, Ox9a,Ox5f,0x06,Oxf8,OxeO,0x25,0x39,Oxc2, Oxld,Oxf2,Oxd8,0x84,Охаб,Ox3f,Ox7b,0x41, Oxca,0x59,0x63,Oxbe,0x05,OxeO,Ox9c,0x27, 0x27,Oxlb,Oxe4,0x71,0x49,Oxac,Ox8e,Oxd2, Oxf0,Охсб,Ox9a,OxOd,Ox3f,0x53,0x65,Oxb8
Легко видеть, что, с учетом изменения порядка адресации, узлы замены могут быть изображены в традиционном виде в результате выполнения следующей процедуры:
for (i=0; i<8;
{
for(j=0; j<64; j
{
l=tab[j/2+32*i];
if(j&l == 1)
1/=16;
box[i] [j%2+(j/32)*2]
Результаты выполнения этой процедуры выглядят следующим образом:
бокс номер 0
1.4 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
О 15 7 4 14 2 13 1 10 б 12 11 9 5 3 8
4 1 14 8 .13 б 2 11 15 12 9 7 3 10 5 О
15 12 8 2 4 9 1 7 5 11 3 14 10 0 б 13
бокс номер 1
15 1 8 14 б 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 О 1 10 6 9 11 5
0 14 7 11 10 4.13 1 5 8 12 б 9 3 2 15
13 8 10 1 3 15 4 2 11 б 7 12 0 5 14 9
бокс номер 2
10 0 9 14 б 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 б 10 2 8,5 14 12 11 15 1
13 б 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 б 9 8 7 4 15 14 3 11 5 2 12
бокс номер 3
7 13 14 3 0 б 9 10 1 2 8 5 11 12 4 15
13 8 11 5 б 15 0 3 4 7 2 12 1 10 14 9
10 б 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
бокс номер 4
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 150 15 10 3 9 8 б
4 2 1 11 10 13 7 8 15 9 12 5 б 3 0 14
11 8 12 7 1 14 2 13 б 15 0, 9 10 4 5 3
бокс номер 5
12 1 10 15 92 б 80 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 б 1 13 14 0 11 3 8
9.14 15 5 2 8 12 37 0 4 10 1 13-11 б
4 3 2 12 9 5 15 10 11 14 1 7 б 0 8 13
бокс номер
6 4 11 2 14 15 0 8 13 3 12 9 7 5 10 б 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1
4 11 13 12 3 7 14 10 15 б 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
бокс номер 7
13 2 8 4 б 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 б 11 0 14 9 2
7 11 4 1 9 12 14 2 0 б 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 О 3 5 6 11
что полностью совпадает с узлами замены (подстановками) алгоритма DES.