Все математические операции производятся в поле Галуа .
В процедурах AddRoyndKey и KeyExpansion в основе лежат операции сложения байт по модулю 2 (XOR).
В AddRoyndKey в сложении участвуют только текущий блок и ключ раунда, а в KeyExpansion в сложении участвуют результат SubWord(RotWord(temp)), предыдущий ключ раунда и Round Constant.
На языке C# для 256 битного ключа данный алгоритм (KeyExpansion) запишется следующим образом:
AKey = new byte[4, 60];
byte ch = 0;
for (int i = 0; i < 4; i++)
{
for (int q = 0; q < 8; q++)
{
AKey[i, q] = key[ch];
ch++;
}
}
for (int i = 8; i < 60; i++)
{
byte[] temp = new byte[4];
for (int q = 0; q < 4; q++)
{
temp[q] = AKey[q, i - 1];
}
if ((i % 8) == 0)
{
temp = SubWord(RotWord(temp), SBox);
for (int q = 0; q < 4; q++)
{
temp[q] ^= RCon[q];
}
}
else if (i % 8 == 4)
{
temp = SubWord(temp,SBox);
}
for (int q=0; q<4; q++)
AKey[q,i] = Convert.ToByte(AKey[q,i - 8] ^ temp[q]);
}
В процедурах SubBytes и MixColumn при умножении байтов используется неприводимый многочлен:
Вычисление произведения М байтов {b1} на {b2} здесь выполняется согласно следующему алгоритму:
В этом случае обратная величина байта равна:
Как уже было сказано выше, в процедуре SubBytes используется следующая формула умножения и сложения байт , где A – двоичная матрица 8х8, а b – 8-битный вектор, как показано на рисунке 4.
Рисунок 4 – Формула в преобразовании SubBytes.
Для умножения полубайтов (коды длиной 4 бита) используется неприводимый полином:
Вычисление произведения М полубайтов {a} на {b} здесь выполняется следующим образом:
M представляет собой полубайт d. Операцию умножения полубайтов {a} на {b} можно записать в матричном виде:
В процедуре MixColumn общую формулу умножения можно представить в виде:
В обратной процедуре InvMixColumn общая формула имеет вид:
Заключение
В результате работы над данным проектом были освоены современные методы шифрования, а в частности Rijndael, написана программа, позволяющая шифровать текстовую информацию различными длинами ключей (128, 192, 256 бит).
Приобретенные навыки активно использовались для оценки эффективности и скорости работы других симметричных алгоритмов шифрования.
Все поставленные цели и задачи выполнены.
Для реализации поставленной задачи использовалась среда программирования Microsoft Visual Studio 2010. Программа реализована в виде Windows Forms Application на языке C#.
Рекомендации по развитию программы
В данной программной реализации каждый блок шифруется независимо от остальных, то есть используется простейший режим работы ELECTRONIC CODEBOOK (ECB), что упрощает криптоанализ полученного шифра. Поэтому рекомендуется реализовать остальные режимы работ алгоритма для повышения криптостойкости. Особенно важно реализовать поддержку русского языка. Также можно было бы сделать поддержку шифрования файлов различного формата.