Иллюстрированный самоучитель по программированию систем защиты

Локальная аутентификация пользователя в 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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.