Локальная аутентификация пользователя в Windows NT
Оценка адекватности описанного преобразования реальному производилась путем соотнесения дизассемблированной процедуры шифрования и аналогичной процедуры, записанной на языке высокого уровня. При этом выяснилось, что используется блочный алгоритм, имеющий итеративную структуру – к исходному тексту – блоку из 64-х бит – применяется подстановка. Результат применения подстановки разбивается на два блока по 32 бита, один из которых путем повторения некоторых бит расширяется до 48-ми битового блока, который складывается покоординатно с выборкой из ключа той же размерности и разбивается на восемь блоков по 6 байт, поступающих на узлы замены.
К полученному в результате 32-х битовому блоку снова применяется подстановка. Затем блоки складываются и меняются местами. Этот процесс итеративно повторяется 16 раз. Затем снова применяется подстановка. Таким образом, стало понятно, что речь идет о DES-подобной схеме, и вопрос состоит лишь в совпадении параметров алгоритма. Для того, чтобы решить этот вопрос, была проделана работа по выделению участков процедуры, реализующих ту или иную часть алгоритма, и их сравнению с аналогичными частями алгоритма DES.
Первоначальная подстановка.
Первоначальная подстановка открытого текста осуществляется в соответствии со следующей процедурой:
for(i=0; i<63; i++) Text[i]"Plaintext[Tabl[i]];
Где массив Plaintext содержит исходный открытый текст, массив Text содержит обрабатываемый массив из 64 бит, поступающий затем на вход итеративной части алгоритма, а массив Tab1 содержит нижнюю строку подстановки открытого текста и имеет вид:
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;