ВВЕДЕНИЕ
Стремительное развитие современных информационных технологий вУкраине, начавшееся в конце XX века, не снижает своихтемпов и в начале XXI века. Компьютерные технологииоказывают все большее влияние на все сферы человеческой деятельности. Постоянноеувеличение скорости и объема передаваемых в информационных системах данныхповышает эффективность производственных процессов, способствует расширениюделовых операций.
Именно поэтому ужесточаются требования к информационнойбезопасности. Под ней понимается защищенность информации и поддерживающейинфраструктуры от случайных и преднамеренных воздействий, которые могут нанестиущерб владельцам или пользователям информации. Обеспечение безопасностиинформационной системы является одной из важнейших задач при эксплуатацииданной системы, так как от сохранения конфиденциальности, целостности идоступности информационных ресурсов во многом зависит быстрота принятиярешений, эффективность и надежность работы [1]. Разработка и анализ блочныхшифров, является очень актуальной и необходимой задачей, которая должна быть реализованана государственном уровне, поскольку от этого зависит государственнаябезопасность Украины. Украине необходимо иметь свой БСШ.
Одним из основополагающих элементов в общем комплексе средств иметодов обеспечения информационной безопасности являются криптографическиеметоды защиты информации[2]. На данном этапе развития применяется каксимметричные, так и несимметричные криптографические методы защиты. Этообуславливается тем, что первые способны обеспечить высокую скоростьшифрования, а вторые – модель взаимного недоверия и защиты, т.е. ситуацию,когда пользователи информационных систем не хотят никому доверять свои личныеключи и параметры, но при этом хотят иметь гарантию компенсации потерь, если ихобманут.
Широкое использование симметричной криптографии определяетнеобходимость исследования стойкости симметричных шифров к существующим методамкриптоанализа.
Одним из наиболее эффективных, на сегодняшний день, являетсяинтегральный метод криптоанализа.
Целью данной работы является изучение теоретических основ и реализацияинтегральной атаки на практике для усеченной модели блочного симметричногошифра Сrypton, а также изучение особенностей иограничений применения атаки.
Для достижения этой цели необходимо решить следующие задачи:
— Изучить методику применения интегральной атаки против блочного симметричногошифра Crypton.
— Адаптироватьметодику применения интегральной атаки для использованияпротив усеченного варианта блочногосимметричного шифра Crypton.
— Выполнитьпрограммную реализациюинтегральной атаки против усеченного варианта блочного симметричного шифра Crypton.
В данной дипломнойработе рассчитывается экономическая эффективность разработкиметодики определения стойкостиблочного симметричного шифра Сrypton против интегральной атаки.
В разделе «Безопасность жизнедеятельности» дипломногопроекта необходимо разработать вопросы БЖД при выполнении работ по разработкеинтегральной атаки на шифр Crypton, которые выполняются в научно-исследовательской лаборатории (НИЛ).В разделе следует выполнить анализ условий труда, разработать вопросы техникибезопасности, производственной санитарии и гигиены труда, пожарнойпрофилактики.
1. БЛОЧНЫЕСИММЕТРИЧНЫЕ ШИФРЫ И ИХ МЕСТО В СОВРЕМЕННЫХ ИНФОРМАЦИОННЫХ СИСТЕМАХ
1.1 Основныетребования к БСШ как к механизму обеспечивающему конфиденциальность
Насегодняшний день разработано достаточно много стойких блочных шифров.Практически все алгоритмы используют для преобразований определенный набор биективных(обратимых) математических преобразований.
Характернойособенностью блочных криптоалгоритмов является тот факт, что в ходе своейработы они производят преобразование блока входной информации фиксированнойдлины и получают результирующий блок того же объема, но недоступный дляпрочтения сторонним лицам, не владеющим ключом. Таким образом, схему работыблочного шифра можно описать функциями
Z=EnCrypt(X,Key)иX=DeCrypt(Z,Key)[3]
Ключ Keyявляется параметром блочного криптоалгоритма и представляет собой некоторыйблок двоичной информации фиксированного размера. Исходный (X) и зашифрованный(Z) блоки данных также имеют фиксированную разрядность, равную между собой, нонеобязательно равную длине ключа.
Блочные шифрыявляются основой, на которой реализованы практически все криптосистемы[4].Методика создания цепочек из зашифрованных блочными алгоритмами байт позволяетшифровать ими пакеты информации неограниченной длины. Такое свойство блочныхшифров, как быстрота работы, используется асимметричными криптоалгоритмами,медлительными по своей природе. Отсутствие статистической корреляции междубитами выходного потока блочного шифра используется для вычисления контрольныхсумм пакетов данных и в хешировании паролей.
Стойкостькриптоалгоритмов описана в [5], [6]. Криптоалгоритм именуется идеально стойким,если прочесть зашифрованный блок данных можно только перебрав все возможныеключи, до тех пор, пока сообщение не окажется осмысленным. Так как по теориивероятности искомый ключ будет найден с вероятностью 1/2 после перебораполовины всех ключей, то на взлом идеально стойкого криптоалгоритма с ключомдлины N потребуется в среднем 2N-1 проверок. Таким образом, в общем случаестойкость блочного шифра зависит только от длины ключа и возрастаетэкспоненциально с ее ростом. Даже предположив, что перебор ключей производитсяна специально созданной многопроцессорной системе, в которой благодарядиагональному параллелизму на проверку 1 ключа уходит только 1 такт, то навзлом 128 битного ключа современной технике потребуется не менее 1021 лет.Естественно, все сказанное относится только к идеально стойким шифрам,которыми, например, с большой долей уверенности являются приведенные в таблицевыше алгоритмы.
Кроме этогоусловия к идеально стойким криптоалгоритмам применяется еще одно очень важноетребование, которому они должны обязательно соответствовать. При известныхисходном и зашифрованном значениях блока ключ, которым произведено этопреобразование, можно узнать также только полным перебором. Ситуации, в которыхпостороннему наблюдателю известна часть исходного текста встречаютсяповсеместно. Это могут быть стандартные надписи в электронных бланках,фиксированные заголовки форматов файлов, довольно часто встречающиеся в текстедлинные слова или последовательности байт. В свете этой проблемы описанное вышетребование не является ничем чрезмерным и также строго выполняется стойкимикриптоалгоритмами, как и первое.
Такимобразом, на функцию стойкого блочного шифра Z=EnCrypt(X,Key) накладываютсяследующие условия:
— функцияEnCrypt должна быть обратимой.
— не должносуществовать иных методов прочтения сообщения X по известному блоку Z, кромекак полным перебором ключей Key.
— не должносуществовать иных методов определения каким ключом Key было произведенопреобразование известного сообщения X в сообщение Z, кроме как полным переборомключей.
Давайтерассмотрим методы, с помощью которых разработчики блочных криптоалгоритмовдобиваются одновременного выполнения этих трех условий с очень большой долейдостоверности. Все действия, производимые над данными блочным криптоалгоритмом,основаны на том факте, что преобразуемый блок может быть представлен в видецелого неотрицательного числа из диапазона, соответствующего его разрядности.Так, например, 32-битный блок данных можно интерпретировать как число издиапазона 0..4'294'967'295. Кроме того, блок, разрядность которого обычноявляется «степенью двойки», можно трактовать как нескольконезависимых неотрицательных чисел из меньшего диапазона (рассмотренный выше32-битный блок можно также представить в виде 2 независимых чисел из диапазона0..65535 или в виде 4 независимых чисел из диапазона 0..255). Над этими числамиблочным криптоалгоритмом и производятся по определенной схеме показаной на Таб1.1 (слева даны условные обозначения этих операций на графических схемахалгоритмов):
В качествепараметра V для любого из этих преобразований может использоваться:
— фиксированное число (например, X'=X+125)
— число,получаемое из ключа (например, X'=X+F(Key))
— число,получаемое из независимой части блока (например, X2'=X2+F(X1))
/>
Таблица 1.1Условные обозначения операций на графических схемах алгоритмов.
Последнийвариант используется в схеме, названной по имени ее создателя сетью Фейстеля(нем. Feistel).
Последовательностьвыполняемых над блоком операций, комбинации перечисленных выше вариантов V исами функции F и составляют «ноу-хау» каждого конкретного блочногокриптоалгоритма. Размер блоков и длина ключа современных (1999 год) алгоритмовбыли нами рассмотрены ранее. Один-два раза в год исследовательские центры мирапубликуют очередной блочный шифр, который под яростной атакой криптоаналитиковлибо приобретает за несколько лет статус стойкого криптоалгоритма, либо (что происходитнеизмеримо чаще) бесславно уходит в историю криптографии.
Характернымпризнаком блочных алгоритмов является многократное и косвенное использованиематериала ключа. Это диктуется в первую очередь требованием невозможностиобратного декодирования в отношении ключа при известных исходном изашифрованном текстах. Для решения этой задачи в приведенных вышепреобразованиях чаще всего используется не само значение ключа или его части, анекоторая, иногда необратимая (небиективная) функция от материала ключа. Болеетого, в подобных преобразованиях один и тот же блок или элемент ключаиспользуется многократно. Это позволяет при выполнении условия обратимостифункции относительно величины X сделать функцию необратимой относительно ключаKey.
Посколькуоперация зашифровки или расшифровки отдельного блока в процессе кодированияпакета информации выполняется многократно (иногда до сотен тысяч раз), азначение ключа и, следовательно, функций Vi(Key) остается неизменным, то иногдастановится целесообразно заранее однократно вычислить данные значения и хранитьих в оперативной памяти совместно с ключом. Поскольку эти значения зависяттолько от ключа, то оин в криптографии называются материалом ключа. Необходимоотметить, что данная операция никоим образом не изменяет ни длину ключа, никриптостойкость алгоритма в целом. Здесь происходит лишь оптимизация скоростивычислений путем кеширования (англ. caching) промежуточных результатов.Описанные действия встречаются практически во многих блочных криптоалгоритмах иносят название расширение ключа (англ. key scheduling)
1.2 Обзоризвестных БСШ
1.2.1 Анализсимметричного блочного шифра Rijndael
Шифрреализует совершенно нетрадиционную криптографическую парадигму, полностьюотказавшись от сети Фейстела[7],[8]. К достоинствам алгоритма относят: оченьхорошее быстродействие на всех платформах от 8-битных до 64-битных, самыйвысокий потенциальный параллелизм среди претендентов, минимальные требования кресурсам оперативной и постоянной памяти в реализации без кеширования некоторыхопераций, устойчивость к подавляющему большинству атак по времени исполнения ипотребляемой мощности, структура шифра позволяет использовать любые комбинацииразмеров блока и длин ключа, кратные 32 бит (при достижении размером блокаопределенных границ требуется только увеличение числа раундов). При этомпроцедуры шифрования/дешифрования и операции расширения ключей различаютсямежду собой достаточно сильно по сравнению с простым изменением порядка ключейлибо операцией наложения, характерных для сети Фейстела, что увеличиваетсуммарный объем кода алгоритма.
Как показалипредварительные исследования [9],[10], Rijndael может быть оченьэффективно реализован на самых разных процессорах и чрезвычайно успешнопротивостоит известным криптоаналитическим атакам.
Rijndaelпредставляет собой итеративный блочный шифр, имеющий переменную длину блоков иразличные длины ключей. Длина ключа и длина блока могут быть независимо друг отдруга 128, 192 или 256 бит.
Разнообразныепреобразования работают с промежуточным результатом, называемым Состоянием(State).
Состояниеможно представить в виде прямоугольного массива байтов. Этот массив имеет 4строки, а число столбцов обозначено как Nb и равно длине блока, деленной на 32.
Ключшифрования также представлен в виде прямоугольного массива с четырьмя строками.Число столбцов обозначено как Nk и равно длине ключа, деленной на 32. Этопоказано на рисунке 1.4.
/>
Рисунок 1.4.Пример представления Состояния (Nb=6) и Ключа шифрования (Nk=4).
В некоторыхслучаях ключ шифрования показан как линейный массив 4-байтовых слов. Словасостоят из 4 байтов, которые находятся в одном столбце (при представлении ввиде прямоугольного массива) как показано на рисунке 1.4 взятый с [11].
Входныеданные для шифра («открытый текст», если используется режимшифрования ECB) обозначаются как байты состояния в порядке a0,0, a1,0, a3,0,a0,1, a1,1, a3,1 ,a4,1… После завершения действия шифра выходные данныеполучаются из байтов состояния в том же порядке.
Число цикловобозначено как Nr и зависит от значений Nb и Nk. Оно приведено в Таблице 1.2
/>
Таблица 1.2Число циклов (Nr) как функция от длины ключа и длины блока.
Цикловоепреобразование состоит из четырех различных преобразований. На псевдо-Си этовыглядит следующим образом:
Round (State, RoundKey)
{
ByteSub(State); // замена байт
ShiftRow(State); // сдвиг строк
MixColumn(State); // замешиваниестолбцов
AddRoundKey(State, RoundKey); // добавлениециклового ключа
}
Последнийцикл шифра немного отличается. Вот как он выглядит:
FinalRound(State, RoundKey)
{
ByteSub(State); // замена байт
ShiftRow(State); // сдвиг строк
AddRoundKey(State, RoundKey); // добавлениециклового ключа
}
В приведеннойзаписи, «функции» — Round, ByteSub и т.д. выполняют свои действия надмассивами, указатели (т.е. State, RoundKey) на которые им передаются.
Как можнозаметить, последний цикл отличается от простого цикла только отсутствиемзамешивания столбцов. Каждое из приведенных преобразований разобрано далее.
ПреобразованиеByteSub представляет собой нелинейную замену байт, выполняемую независимо скаждым байтом состояния. Таблицы замены (или S-блоки) являются инвертируемыми ипостроены из композиции двух преобразований:
1. Первое — получение обратного элемента относительно умножения в поле GF(28), '00'переходит сам в себя.
2. Применениеафинного преобразования (над GF(2)), определенного как:
/>
Табл. 1.3.Таблицы замены
Применениеописанного S-блока ко всем байтам состояния обозначено как ByteSub(State).Рисунок 1.5 иллюстрирует применение преобразования ByteSub к состоянию.
/>
Рисунок 1.5 ByteSubдействует на каждый байт состояния.
Последние 3строки состояния циклически сдвигаются на различное число байт. Строка 1сдвигается на С1 байт, строка 2 — на С2 байт и строка 3 — на С3 байт. Значениясдвигов С1, С2 и С3 зависят от длины блока Nb. Их величины приведены в таблице1.4.
Таблица 1.4.Величина сдвига для разной длины блоков.
/>
Операциясдвига последних 3 строк состояния на определенную величину обозначена какShiftRow(State). Рисунок 1.5 показывает влияние преобразования на состояние.
/>
Рисунок 1.5ShiftRow действует на строки состояния.
Впреобразовании замешивания столбцов (MixColumn) столбцы состояниярассматриваются как многочлены над GF(28) и умножаются по модулю x4+1 намногочлен c(x), выглядящий следующим образом:
c(x)='03' x3+ '01' x2 + '01' x + '02'(1.8)
Это можетбыть представлено в виде матричного умножения. Пусть b(x)=c(x)a(x),
Табл. 1.6Матричное умножение
/>
Применениеэтой операции ко всем четырем столбцам состояния обозначено какMixColumn(State). Рисунок 1.7 демонстрирует применение MixColumn к состоянию.
/>
Рисунок 1.7MixColumn действует на столбцы состояния.
В следующейоперации цикловой ключ добавляется к состоянию посредством простого EXOR.Цикловой ключ вырабатывается из ключа шифрования посредством алгоритмавыработки ключей (key schedule). Длина циклового ключа равна длине блока Nb.
Преобразование,содержащее добавление посредством EXOR циклового ключа к состоянию, обозначенокак AddRoundKey(State, RoundKey). Оно проиллюстрированно на рисунке 1.8.
/>
Рисунок 1.8.Добавление ключа
Придобавлении ключа цикловой ключ складывается посредством EXOR с состоянием.
Цикловыеключи получаются из ключа шифрования посредством алгоритма выработки ключей. Онсодержит два компонента: расширение ключа (Key Expansion) и выбор цикловогоключа (Round Key Selection).
Основополагающиепринципы алгоритма выглядят следующим образом:
— общее числобит цикловых ключей равно длине блока, умноженной на число циклов плюс 1(например, для длины блока 128 бит и 10 циклов требуется 1408 бит цикловогоключа).
— ключшифрования расширяется в Расширенный Ключ (Expanded Key).
— цикловыеключи берутся из Расширенного ключа следующим образом: первый цикловой ключсодержит первые Nb слов, второй — следующие Nb слов и т.д.
Расширенныйключ представляет собой линейный массив 4-ех байтовых слов и обозначен какW[Nb*(Nr+1)]. Первые Nk слов содержат ключ шифрования.
Все остальныеслова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработкиключей зависит от величины Nk: ниже приведена версия для Nk равного илименьшего 6 и версия для Nk большего 6.
Для Nk
KeyExpansion(CipherKey,W)
{
for(i = 0; i
for(j = Nk; j
{
W[j]= W[j-Nk] ^ SubByte( Rotl( W[j-1] ) ) ^ Rcon[j/Nk];
for(i = 1; i
W[i+j]= W[i+j-Nk] ^ W[i+j-1];
}
}
Как можнозаметить, первые Nk слов заполняются ключом шифрования. Каждое последующееслово W[i] получается посредством EXOR предыдущего слова W[i-1] и слова на Nkпозиций ранее W[i-Nk]. Для слов, позиция которых кратна Nk, перед EXORприменяется преобразование к W[i-1], а затем еще прибавляется цикловаяконстанта. Преобразование содержит циклический сдвиг байтов в слове, обозначенныйкак Rotl, затем следует SubByte — применение замены байт.
Для Nk>6 мы имеем:
KeyExpansion(CipherKey,W)
{
for(i=0; i
for(j=Nk; j
{
W[j]= W[j-Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/Nk];
for(i=1; i
W[j+4]= W[j+4-Nk] ^ SubByte(W[j+3]);
for(i=5; i
}
}
Отличие длясхемы при Nk>6 состоит в применении SubByte для каждого 4-го байта из Nk.
Цикловаяконстанта независит от Nk и определяется следующим образом:
Rcon[i]= ( RC[i], '00', '00', '00' ),
Где RC[0]='01',RC[i]=xtime(Rcon[i-1])
i-ый цикловойключ получается из слов массива циклового ключа от W[Nb*i] и доW[Nb(i+1)]. Этопоказано на рисунке 1.9
/>
Рисунок 1.9Расширение ключа и выбор циклового ключа для Nb=6 и Nk=4.
Алгоритм выработкиключей можно осуществлять и без использования массива W[Nb*(Nr+1)]. Дляреализаций, в которых существенно требование к занимаемой памяти, цикловыеключи могут вычисляться на лету посредством использования буфера из Nk слов. ШифрRijndael состоит из:
— Начальногодобавления циклового ключа;
— Nr-1циклов;
— заключительного цикла.
На псевдо-Сиэто выглядит следующим образом:
Rijndael(State, CipherKey)
{
KeyExpansion(CipherKey,ExpandedKey); // Расширение ключа
AddRoundKey(State,ExpandedKey); // Добавление циклового ключа
For( i=1; i
FinalRound(State,ExpandedKey+Nb*Nr); // заключительный цикл
}
Еслипредварительно выполнена процедура расширения ключа, то Rijndael будетвыглядеть следующим образом:
Rijndael(State, CipherKey)
{
AddRoundKey(State,ExpandedKey);
For( i=1; i
FinalRound(State,ExpandedKey+Nb*Nr);
}
Расширенныйключ должен всегда получаться из ключа шифрования и никогда не указываетсянапрямую. Нет никаких ограничений на выбор ключа шифрования.
1.2.2 Анализсимметричного блочного шифра DEAL
DEAL (Data Encryption Algorithm with Larger blocks — Алгоритм ШифрованияДанных с Укрупненными блоками) является 128-и битным блочным шифром с размерамиключа 128, 192 и 256 бит, что далее здесь будет обозначаться DEAL-128, DEAL-192 и DEAL-256 соответственно [12].Все версии могут использоваться в любом из четырех стандартных режимах DES'a. Мы начнем с описанияработы DEAL в режиме ECB. Пусть С = ЕВ(А) означает зашифрованное DES значение 64-х битного Ана ключе В, и пусть Y = EAZ(X) означает зашифрование DEAL 128-и битного X на ключе Z. Открытый текст Рразделяется на блоки Pi по 128 бит каждый, P = P1, P2, …, Рn.Расписание ключей принимает ключ К и возвращает r ключей DES RKi, где i = 1, …, r, как описанониже. Обозначим XL и XR левую и правую части X соответственно.Шифр-текст вычисляется следующим образом. Положим X0L = PiL, X0R= РiR и вычислим для j= 1, … ,r
XjL=ERKj(XLj-1) XRj-1 (1.9)
XRj= XLj-1(1.10)
/>
Рисунок 1.10: Один цикл DEAL.
Положим Ci=XrL ||XrR. На рис. 1.10 показан одинцикл DEAL. Для DEAL-128 и DEAL-192 мы предлагаем использовать 6 циклов, т. е. r = 6. Однако, какмы увидим ниже, этого может быть недостаточно для DEAL-256, здесь предлагаетсяиспользовать 8 циклов, r = 8. Представляется, что версия с размером ключа 256бит используется только когда требуется особенно сильное зашифрование.
Заметим, чтопоследнем цикле DEAL половины блока местами меняются[13]. Причина в следующем: праваячасть шифр-текста Сi не шифруется в последнем цикле i-oro зашифрования, и тольколевая часть входа i + 1-ого зашифрования (который равен Ci Pi+l) шифруется на последнемцикле. Т. о. правая часть Ci осталась бы не перезашифрованной два цикла. Этоможет дать поле деятельности злоумышленникам, тем более, что шифр состоит всегоиз 6-и или 8-и циклов. Заметим, что аналогичное свойство есть и у DES в режиме CBC. Правда,похоже это труднее было бы использовать, ведь у DES 16 циклов. Позволим себеотметить, что обмен местами правой и левой частей на последнем цикле не влияетна стойкость блочного шифра в режиме ECB [14].
Итак,обозначим блоки открытого текста по 128 бит P1, P2, …, Pn и Ci, С2, ,…, Сп-соответствующие им блоки шифр-текста. Тогда:
Сi = EAK(Ci-l Pi),(1.11)
где С0 — начальное значение.
В DES начальная перестановка IP первой применяется коткрытому тексту, и аналогично перед выходом шифр-текст пропускается черезобратную к ней IP-1. Возможно увеличить скорость DEAL, если убрать изиспользуемого DES эти начальную и конечную перестановки. Легко показать, что дляполучения корректной реализации DEAL, IP должна быть приложена к обоим частям открытоготекста перед зашифрованием, a IP-1 — к обоим частям шифр-текста.
На вход расписанияключей подается s ключей DES, Ki, ,…, Ks, для s = 2, 3, 4, каждый по 64бит (включая 8 проверочных бит, старших бит каждого байта), на выходеполучается r ключей DES, RKj. Мы используем общий метод, приложимый ко всемтрем размерам ключа. Во-первых расширяем s ключей до r ключей,путем повторения и с новой константой для каждого нового повторения.Зашифровываем расширенный список ключей DES'om в режиме CBC с фиксированным ключом и нулевымначальным значением. Из полученных блоков шифр-текста и формируются подключи RKi. Далее мы приводимточные определения каждого из расписаний ключей, здесь К = 0x1234 5678 90ab cdefx (шестнадцатеричноечисло) — фиксированный ключ DES. В DEAL-128 подключи генерируются следующим образом:
RK1 = EK (К1),
RK2 = EK (К2 RK1),
RK3=EK(Kl (1) RK2),
RK4 = EK(К2 (2) RK3),
RK5 =Ek(ki (4) RK4),
RK6 =Ek(k2 (8) RK5),(1.12)
где (i) — 64-х битное целое число, в котором i — 1-ый бит (индексация идет с 0) установлен, аостальные очищены. Например, (1) может быть представлено как шестнадцатеричное «0x80000000 0000 0000х».
В DEAL-192 подключигенерируются следующим образом:
RK1 = EK (К1),
RK2 = EK (К2RK1),
RK3=EK(K3 RK2),
RK4 =Ek(ki (1) RK3),
RK5 =Ek(k2 (2) RK4),
RK6 =ЕК(К3 (4) RK5).(1.13)
Эти версиирасписания ключей требуют 6 расписаний ключей DES и 6 зашифрований DES на фиксированном ключе.Подключи нужно сгенерировать только один раз, если их впоследствии сохранить.
В DEAL-256 подключигенерируются следующим образом:
RK1 = EK (К1),
RK2=EK(К2RK1),
RK3=EK(K3RK2),
RK4=Ek(K4 RK3),
RK5 =Ek(K2 (1) RK4),
RK6=EK(К2 (2) RK5),
RK7 =ЕК(К3 (4) RK6), RK8 =Ek(K4 (8) RK7).(1.14)
Эта версиярасписания ключей требует 8 расписаний ключей DES и 8 зашифрований DES на фиксированном ключе. Подключинужно сгенерировать только один раз, если их впоследствии сохранить.
Заметим, чтодля всех версий расписания ключей 64-х битные величины RKi используются как ключи DES, поэтому биты проверкичетности RKi не используются в i-ом цикле. Однако, все 64 бита RKi, как выхода шифрованияна ключе К, используются при генерации следующего подключа.
Принципыразработки расписания ключей, во-первых, состоят в том, чтобы подключи зависелиот наибольшего числа битов основного ключа, но не требовали при этом многоработы, во-вторых, при вводе s основных ключей размером по 64 бит, любые s последовательныхподключей должны иметь энтропию s · 56 бит, и, наконец, не должно быть очевидно зависимых ислабых ключей и не должно остаться свойство дополнительности. Заметим, чтопоследние две проблемы присутствуют и в DES, и -все три — в тройном DES. Мы заметили, что еслиосновные ключи размером по 64 бита каждый, может найтись пара ключей,генерирующих одинаковые множества подключей. Однако, число таких ключей,похоже, настолько невелико, что не представляет угрозы DEAL'y, применяемому дляшифрования.
Смещения (i)введены для предотвращения появления слабых ключей. Если бы их не было,существовали бы ключи, для которых все подключи были равны. Например, для DEAL-128 ключи K1 = K2 = Dk(0) сгенерировали бы 6 подключей со значением0. Смещения и шифрование на фиксированном ключе предотвращают появление слабыхи зависимых ключей и свойства дополнительности.
Заметим, чтоесли бит проверки четности используется в каждом байте основного ключа,действующие размеры предложенных ключей составляют 112, 168 и 224 битсоответственно.
Что можносказать о стойкости DEAL в целом? Прежде всего, заметим[15], что для DEAL простая атака meet-in-the-middle (встретить по середине),аналогичная такой атаке на двойной DES, отыщет ключи за время порядка 2168зашифрований для шести, и 2224 зашифрований для восьми циклов DEAL соответственно,независимо от расписания ключей. Именно поэтому, предлагается в DEAL-256 производить покрайней мере 8 циклов зашифрования. Для DEAL-128 исчерпывающий поискключа займет время порядка 2112 зашифрований.
Самая быстраяиз известных атак по нахождению ключа на DEAL (с шестью циклами) — общая атака на 6-и цикловые Фейстелевы шифры, в приложении к DEAL, она требует порядка 2121зашифрований DES, используя порядка 270 выбранных открытых текстов, длялюбого расписания ключей. В дальнейшем определим разность между двумяпоследовательностями бит, как побитное XOR.
В конце этогораздела подведем итог особенностям DEAL.
-DEAL имеет размер блока 128бит и размер ключа 128, 192 или 256бит (действующий размер, соответственно, — 112, 168 или 224 бита).
— атака по подобранному шифр-тексту требует порядка 264блоков шифр-текста.
— нет известных, вероятных атак.
— DEAL с шестью циклами имеет скорость, аналогичную скорости тройного DES.
— DEAL может использоваться в стандартных режимах работы.
— DEAL может быть реализован на имеющемся аппаратном и программномобеспечение DES.
— нет очевидно слабых ключей и устранено свойство дополнительности.
Наконец,позволим себе заметить, что ввиду довольно сложного расписания ключей, DEAL не практичноиспользовать в случайных функциях.
Собственнорезультаты стойкости DEAL:
— Существуютэквивалентные ключи для DEAL-192 и DEAL-256.
Алгоритмнахождения требует около шести шифрований DES, чтобы найти набор из256 эквивалентных ключей для DEAL-192, и восемь шифрований DES, чтобы найти 256эквивалентных ключей для DEAL-256.
— Существуют эквивалентные ключи для DEAL-128 и алгоритм ихнахождения, требующий около 264 вычислений для нахождения парыэквивалентных ключей.
— Атака математически-связанных ключей (related-key attack) на DEAL-192 и DEAL-256, требующая три блокаоткрытого текста, под 233 ключами с точным соответствием, 3*245байт памяти и около 2137 шифрований DEAL, чтобы найти последниедва цикловых подключа для DEAL-192 и DEAL-256. (С большим количеством памяти это можносделать быстрее).
— несколько возможных расширений этих атак. DEAL-192 может бытьдешифрован до четырех циклов, а затем может быть применена атака Бихама (Biham's) на четырехцикловыйцепной DES; DEAL-256 может быть дешифрован до шести циклов, а затем может бытьприменена атака на шестицикловый DEAL-192 подробнее эта операция описана [15].
Этирезультаты интересны как для практики, так и для теории. Похоже, что DEAL будет иметь некотороеприменение в будущем. DEAL кандидат на AES, но даже если он нестанет финалистом, он почти наверняка будет использоваться. Как было указано напервой конференции по AES, широкое распространение «железа под DES» делает DEAL относительно легким дляреализации во многих устройствах за очень низкую цену.
В реальномприменении эквивалентные ключи DEAL имеют важное практическое следствие — они делаютмногие стандартные методы хэширования ненадежными.
Атака основаннаяна математически зависимых ключах вероятно менее применима, но все ещё можетбыть важна для некоторых приложений эти атаки «снимают» два последнихцикла DEAL ценой примерно 2137 шифрований DEAL, используя 3*245байт памяти и требует все те же три блока открытого текста, зашифрованного 233зависимыми ключами. Возможны компромиссы времени-памяти.
В настоящеевремя, имея 3*269 байт памяти, атака будет занимать 2113 вычислительныхресурсов, восстанавливая два последних подключа. После, можно реализовать атакаБихама (Bi ham's)на четырехцикловый цепной DES, которая требует ещё 233 блокаоткрытого текста, зашифрованного только одним ключом, и 288 времени.Таким образом, вся атака займет приблизительно 2113 вычислительнойработы, 3*269 байт памяти, все те же три блока открытого текста,зашифрованного 233 зависимыми ключами, ещё 232 блокаоткрытого текста, зашифрованного только одним ключом, которые должны бытьвыбраны ПОСЛЕ завершения первой атаки. По сравнению с лучшей из ранее известныхатак, требующей 2119 вычислительной работы, 264 памяти и270 выбранных открытых текстов.
Натеоретическом уровне эти результаты показывают важный факт: Широко считается,что «назначение ключей» (key shedule), которое используетсильные элементы криптографии будет практически неуязвимо к криптографическомуанализу. Это утверждение, к сожалению, не верно. В DEAL используется сильныйшифр в очевидно-разумном направлении, чтобы обрабатывать ключ. Однако,использованный метод оставляет уязвимость шифра к анализу зависимого ключа, такжеоставляет возможность эквивалентных ключей.
1.3 Crypton как перспективный алгоритм
Шифр Crypton представленюжнокорейской компанией Future Systems, с конца 1980-х годов работающей на рынкесетевого обеспечения и защиты информации. Автор алгоритма Че Хун Лим [15],[16] признает,что конструкция его шифра во многом опирается на идеи шифра SQUARE бельгийских криптографовДамена и Рэмена (также участвующих в конкурсе). Здесь нет традиционной длямногих блочных шифров «структуры Фейстела», оперирующей в каждомцикле шифрования половиной блока данных (например, как в DES или CAST). Основу данного шифрасоставляет другая стандартная конструкция — так называемая SP-сеть, т.е. повторяющаясяцикловая функция из замен-перестановок, ориентированная на распараллеленнуюнелинейную обработку всего блока данных. Помимо высокой скорости, кпреимуществам такой конструкции относят и то, что она облегчает исследованиестойкости шифра к методам дифференциального и линейного криптоанализа,являющимся на сегодня основными инструментами вскрытия блочных шифров.
Шифр Crypton, как и Square, эффективно реализуетсяна разнообразных платформах, и признано, что в корейском алгоритме присутствуютталантливые конструктивные идеи.
1.3.1 АлгоритмCRYPTON
Описаниеалгоритма было взято из книги автора шифра CRYPTON Че Хун Лим [16] В CRYPTON,каждый блок данных 128 бит представлен в форме массива 4´4 байта. Циклическоепреобразование в CRYPTON состоит из четырех шагов: byte-wise substitutions(байтзамена), column-wise bit permutation(колончастый способ перестановки битов),column-to-row transposition (перенос столбцов), и key addition(добавление ключа). Процесскодирования состоит из 4 раундов таких циклических преобразований. Процесс расшифровки может быть сделан идентичным процессукодирования с различным ключевым списком. На рисунке 1.1 показана структура CRYPTON.
/>
Рис.1.1 Структура CRYPTON.
Блочный шифр CRYPTON имеетследующие характеристики:
— 12-раундовыйсамозаменяемый шифр (с одинаковыми процессами для кодирования и расшифрования)с длиной блока 128 битов и длинной ключа до 256 битов.
— хорошаястойкость от существующих атак.
— эффективени на программном и на аппаратном уровне: благодаря высокой степенипаралельности и использованию очень простых логических операций ANDS/XORS,CRYPTON запускается очень быстро на большинстве платформ как в программномобеспечении так и в аппаратных средствах.
— Быстроеформирование ключей: шифрование со списоком ключей идет намного быстрее чемшифрование с одним блоком, так что это очень эффективно в приложениях,требующих частые замены ключей (например, в хеш-режиме).
1.3.2 Основныепреобразования блока
1.3.2.1 Байтоваяподстановка g
CRYPTONиспользует нелинейную замену байта, используя четыре 8´8 S-блока, Si(0≤i ≤3). Эти S-блоки получены из одного 8´8 S-блока при возведениив степень S (то есть, S = S-1) и удовлетворяют обратные отношения S2=S0-1и S3=S1-1. Возведенный в степень S-блок S был,сформирован для более эффективной логической реализации.
Преобразование S-блока состоит из замен байт относительно массива 4´4 байт. Два различныхпреобразования используются альтернативно в последовательных раундах: внечетных раундах и e в нечетных раундах. Это показано нарисунке 1.2. Заметим, что эти четыре S-блока устроены так, что следующеезакрепляются на любом 4´4 байте масива A:
go (ge (A)) = ge (go(A)) = A. (1.1)
Это свойствоиспользуется, чтобы получить идентичный процесс для кодирования и расшифровки.A[0]
a03
a02
a01
a00 B[0]
S3(a03)
S2(a02)
S1(a01)
S0(a00) A[1]
a13
a12
a11
a10
o B[1]
S0(a13)
S3(a12)
S2(a11)
S1(a10) A[2]
a23
a22
a21
a20 Þ B[2]
S1(a23)
S0(a22)
S3(a21)
S2(a20) A[3]
a33
a32
a31
a30 B[3]
S2(a33)
S1(a32)
S0(a31)
S3(a30) A[0]
a03
a02
a01
a00 B[0]
S1(a03)
S0(a02)
S3(a01)
S2(a00) A[1]
a13
a12
a11
a10
e B[1]
S2(a13)
S1(a12)
S0(a11)
S3(a10) A[2]
a23
a22
a21
a20 Þ B[2]
S3(a23)
S2(a22)
S1(a21)
S0(a20) A[3]
a33
a32
a31
a30 B[3]
S0(a33)
S3(a32)
S2(a31)
S1(a30)
Рис.1.2 Байтоваяподстановка g
1.3.2.2 Битоваяперестановка p и байтовое перемещение t
Как линейныепреобразования, CRYPTON использует последовательную перестановку бита иперемещения байта. Бит-перестановка смешивает каждый столбец байта в массиве 4×4байта и байт-перемещение перемещает результирующие столбцы байт в строки байт.
Сначалаопределяем четыре вектора маскировки (M3, M2, M1, M0) для извлечения бит,используемых в как:
M0= m3 || m2 || m1 || m0=0x3fcff3fc,
M1= m0|| m3 || m2 || m1 =0xfc3fcff3,
M2= m1 || m0|| m3 || m2 =0xf3fc3fcf,
M3= m2 || m1 || m0|| m3 =0xcff3fc3f, (1.3)
Где m0 =0xfc, m1 = 0xf3, m2 = 0xcf, m3 = 0x3f. Чтобы сделать процес шифрования ирасшифрования идентичными, используются два немного различных вариантаперестановки; в нечетных раундах и eв четных раундах. Они определены следующим образом:
— байтовоеперемещение o для нечетных раундов: B = o(A)определяется как:
B[0] ß (A[3] Ù M3)Å (A[2] Ù M2) Å (A[1] Ù M1)Å (A[0] Ù M0),
B[1] ß (A[3] Ù M0)Å (A[2] Ù M3) Å (A[1] Ù M2)Å (A[0] Ù M1),
B[2] ß (A[3] Ù M1)Å (A[2] Ù M0) Å (A[1] Ù M3)Å (A[0] Ù M2),
B[3] ß (A[3] Ù M2)Å (A[2] Ù M1) Å (A[1] Ù M0)Å (A[0] Ù M3). (1.4)
— Битоваяперестановка e для четных раундов: B=e(A)определяется как:
B[0] ß (A[3] Ù M1)Å (A[2] Ù M0) Å (A[1] Ù M3)Å (A[0] Ù M2),
B[1] ß (A[3] Ù M2)Å (A[2] Ù M1) Å (A[1] Ù M0)Å (A[0] Ù M3),
B[2] ß (A[3] Ù M3)Å (A[2] Ù M2) Å (A[1] Ù M1)Å (A[0] Ù M0),
B[3] ß (A[3] Ù M0)Å (A[2] Ù M3) Å (A[1] Ù M2)Å (A[0] Ù M1). (1.5)
Битоваяперестановка просто перестраивает массив 4×4 байта, перемещаябайт из (i,j)-ой позиции в (j, i)-ую позицию (См. Рисунок 1.3 для B=A[0]
a03
a02
a01
a00 B[0]
a30
a20
a10
a00 A[1]
a13
a12
a11
a10 B[1]
a31
a22
a11
a01 A[2]
a23
a22
a21
a20 Þ B[2]
a32
a22
a12
a02 A[3]
a33
a32
a31
a30 B[3]
a33
a23
a13
a03
Рис. 1.3 байтовоеперемещение t
1.3.2.3 Добавлениеключа s
В следующейоперации цикловой ключ добавляется к состоянию посредством простого EXOR.Цикловой ключ вырабатывается из ключа шифрования посредством алгоритмавыработки ключей (key schedule).
K= (K[3], K[2], K[1], K[0])t, B = (A) определяется как B[i] =A[i] Å K[i], где i = 0, 1, 2, 3.
1.3.2.4 Циклическоепреобразование r
Один циклCRYPTON состоит из применения в последовательности преобразование S-блока,байт-перестановки, байт-перемещения и дополнение ключа. То есть циклкодирования функций, используемых для нечетного и четного цикла, определены(для циклического ключа K)
roK = sK ◦ t ◦ po◦ go
для r = 1, 3,… etc.,(1.6)
reK = sK ◦ t ◦ pe◦ ge for r = 2, 4,… etc. (1.7)
1.3.3 Шифрованиеи расшифрование
Преобразованиекодирования EK r-циклов CRYPTON под ключом K состоит из начальногодобавления ключа и r/2 повторений и eзатем заключительное преобразование вывода. Кодирование и расшифровка могутбыть выполнены тем же самым кодом, если применяются различные циклическиеключи.
1.3.4Формирование ключей
R-циклCRYPTON требует общего количества 4 (r + 1) цикловых ключей 32-битной длины.Эти циклические ключи произведены от ключа пользователя 8k (k = 0,1, ..., 32) бит вдва этапа: сначала нелинейное преобразование ключа пользователя в 8 расширенныхключей и затем генерируется необходимое количество циклических ключей от этихрасширенных ключей, использующих простые операции.
1.4 Основные виды криптоанализа БСШ иопределения надежности СЗИ
Криптологиядовольно четко делится на две части: криптографию (шифрование) и криптоанализ.Криптограф пытается найти методы обеспечения секретности и(или) аутентичности(подлинности) сообщений [18]. Криптоаналитик пытается выполнить обратнуюзадачу, раскрывая шифр или подделывая кодированные сигналы таким образом, чтобыони были приняты как подлинные. Исходное сообщение, которому криптографприменяет свое искусство, называется открытым текстом, а результат его работы —шифрованным текстом сообщения — шифртекстом, или криптограммой. Для управленияпроцессом шифрования криптограф всегда использует секретный ключ. Часто (но невсегда) он передает этот секретный ключ каким-либо надежным способом (например,в «дипломате», пристегнутом наручниками к руке курьера) человеку (илимашине), которому он собирается позднее послать криптограмму, составленную сиспользованием этого ключа.
Почтиобщепринятое допущение в криптографии состоит в том, что криптоаналитикпротивника имеет полный текст криптограммы. Кроме того, криптограф почти всегдаруководствуется правилом, впервые сформулированным голландцем Керкхоффом:стойкость шифра должна определяться только секретностью ключа. Иными словами,правило Керкхоффа состоит в том, что весь механизм шифрования, кроме значенисекретного ключа, известен криптоаналитику противника. Если криптографпринимает только эти два допущения, то он разрабатывает систему, стойкую прианализе на основе только шифрованного текста. Если к тому же криптографдопускает, что криптоаналитик противника сможет достать несколько отрывковоткрытого текста и соответствующего ему шифрованного текста, образованного сиспользованием секретного ключа, то разрабатывается система, стойка при анализена основе открытого текста. Криптограф может даже допустить, что криптоаналитикпротивника способен ввести свой открытый текст и получить правильнуюкриптограмму, образованную с использованием секретного ключа (анализ на основевыбранного открытого текста), или предположить, что криптоаналитик противникаможет подставить фиктивные криптограммы и получить текст, в который онипревращаются при расшифровании (анализ на основе выбранного шифртекста), илидопустить обе эти возможности (анализ на основе выбранного текста).Разработчики большинства современных шифров обеспечивают их стойкость к анализуна основе выбранного открытого текста даже в том случае, когда предполагается,что криптоаналитик противника сможет прибегнуть к анализу на основе шифртекста.
Системыи средства защиты информации (СЗИ) отличаются от «обычных» систем исредств тем, что для них не существует простых и однозначных тестов, которыепозволяют убедиться в том, что информация надежно защищена[19]. Кроме того,эффективность СЗИ и просто их наличие никак не связываются на работоспособностиосновной системы. Поэтому задача эффективности СЗИ не может быть решена обычнымтестированием. Например, для проверки работоспособности системы связидостаточно провести ее испытания. Однако успешное завершение этих испытаний непозволяет сделать вывод о том, что встроенная в нее подсистема защитыинформации тоже работоспособна.
Задачаопределения эффективности СЗИ (особенно, если используются криптографическиеметоды защиты), зачастую более трудоемкая, чем разработка СЗИ, требует наличияспециальных знаний и, как правило, более высокой квалификации, чем задачаразработки. Часто анализ нового шифра является новой научной, а не инженернойзадачей.
Этиобстоятельства приводят к тому, что на рынке появляется множество средствкриптографической защиты информации, про которые никто не может сказать ничегоопределенного. При этом разработчики держат криптоалгоритм (как показываетпрактика, часто нестойкий) в секрете. Однако задача точного определения данногокриптоалгоритма не может быть гарантированно сложной хотя бы потому, что онизвестен разработчикам. Кроме того, если нарушитель нашел способ преодолениязащиты, то не в его интересах об этом заявлять. В результате, пользователитаких СЗИ попадают в зависимость как минимум от разработчика. Поэтому обществудолжно быть выгодно открытое обсуждение безопасности СЗИ массового применения,а сокрытие разработчиками криптоалгоритма должно быть недопустимым.
Криптосхемойили криптоалгоритмом будем называть собственно алгоритм шифрования.
Приняторазличать криптоалгоритмы по степени доказуемости их безопасности [20].Существуют безусловно стойкие, доказуемо стойкие и предположительно стойкиекриптоалгоритмы. Безопасность безусловно стойких криптоалгоритмов основана надоказанных теоремах о невозможности раскрытия ключа. Примером безусловностойкого криптоалгоритма является система с разовым использованием ключей (шифрВернама) или система квантовой криптографии, основанная на квантовомеханическомпринципе неопределенности. Стойкость доказуемо стойких криптоалгоритмовопределяется сложностью решени хорошо известной математической задачи, которуюпытались решить многие математики и которая является общепризнанно сложной.Примером могут служить системы Диффи-Хеллмана или Ривеста-Шамира- Адельмана,основанные на сложностях соответственно дискретного логарифмирования иразложения целого числа на множители. Предположительно стойкие криптоалгоритмыоснованы на сложности решения частной математической задачи, которая несводится к хорошо известным задачам и которую пытались решить один илинесколько человек. Примерами могут криптоалгоритмы ГОСТ 28147-89, DES, FEAL.
Ксожалению безусловно стойкие криптосистемы неудобны на практике (системы сразовым использованием ключа требуют большой защищенной памяти для храненияключей, системы квантовой криптографии требуют волоконно-оптических каналовсвязи и являются дорогими, кроме того, доказательство их безопасности уходит изобласти математики в область физики).
Достоинствомдоказуемо стойких алгоритмов являетс хорошая изученность задач, положенных в ихоснову. Недостатком их являетс невозможность оперативной доработкикриптоалгоритмов в случае появлени такой необходимости, то есть жесткость этихкриптоалгоритмов. Повышение стойкости может быть достигнуто увеличением размераматематической задачи или ее заменой, что, как правило, влечет цепь измененийне только в шифрованной, но и смежной аппаратуре.
Предположительностойкие криптоалгоритмы характеризуютс сравнительно малой изученностьюматематической задачи, но зато обладают большой гибкостью, что позволяет неотказываться от алгоритмов, в которых обнаружены слабые места, а проводить ихдоработку.
Задачаобеспечения защищенной связи включает в себя целый комплекс проблем. Это задачаобеспечения секретности и имитозащиты, опознавания (аутентификации) и задачауправления ключами, включая их выработку, распределение и доставкупользователям, а также их оперативную замену в случае необходимости.
Общаясхема организации защищенной связи приведена на рисунке 1.11 [21].
Этойже схемой описывается и абонентское шифрование, когда пользователь шифруетинформацию, хранимую в памяти ЭВМ. В последнем случае источник сообщений иполучатель отождествляется, а канал связи может иметь произвольные задержки.
Источниксообщений вырабатывает произвольную информацию (открытые тексты) с каким-тораспределением вероятностей. Шифратор шифрует это сообщение на конфиденциальном(известном только отправителю и получателю) ключе Z и переводит открытый текств шифрованный текст или шифрограмму (криптограмму, шифртекст).
/>
Рис.1.11 Общая схема организации защищенной связи
Ключивырабатываются источником ключей и по безопасным каналам рассылаются абонентомсети связи. Дешифратор раскрывает принятую шифрограмму и передает получателю.
В схемуна рисунке 1.11. включены еще рандомизатор и решающее устройство. Рандомизаторделает все шифрограммы непохожими друг на друга, даже если входные сообщенияодинаковы. Цель этого будет разъяснена ниже. Решающее устройство принимаетрешение о том, является ли принятое сообщение подлинным, то есть выполняетфункцию имитозащиты.
Операциишифрования и расшифрования можно описать так:
Y =E(X), X = D(Y)(1.16)
Длявзаимной однозначности необходимо, чтобы DE было единичным преобразованием. Вэтом разделе будет предполагать наличие у отправителя и получателя общегосекретного ключа Z. (На самом деле ключи у них не обязательно одинаковые, нознание одного ключа, например шифрования, позволяет легко вычислить другой.Поэтому рассматриваемые криптоалгоритмы иногда называют симметричными, илиодноключевыми. Соответственно, и криптография, занимающаяся изучением такихалгоритмов, называется одноключевой). Данная схема применяется в том случае,если абоненты сети доверяют друг другу.
Нижепоказано, как с помощью одноключевой криптографии решаются вопросы имитозащитыи опознавания (секретность обеспечивается очевидным образом). Подлинность ицелостность сообщения обеспечиваются его криптографическим преобразованием,выполняемым с помощью секретного ключа. Например, если отправитель передастсразу и открытый (не требующий засекречивания), и зашифрованный тексты, то этопозволит получателю, знающему ключ, утверждать, что текст при передаче поканалу связи не был изменен, если результат расшифрования шифрограммы совпадаетс открытым текстом. Действительно, случайное совпадение соответствующих другдругу открытого текста и шифрограммы — практически невозможное событие. Этупару мог составить лишь отправитель, знающий секретный ключ. Отсюда следует иподлинность сообщения (отправитель отождествляется с владельцем ключа). Вдействительности нет необходимости передавать всю шифрограмму, достаточнопередать лишь ее часть, называемую имитовставкой, которая должна зависеть отвсего открытого текста. Тогда получатель может на основании полученного текстаи ключа вычислить свою имитовставку и проверить ее соответствие полученной.
Дляопознавания пользователя используется следующий диалог. Проверяющийвырабатывает случайный текст и посылает опознаваемому для шифрования.Опознаваемый шифрует этот текст и возвращает проверяющему. Тот проверяетсоответствие шифрограммы тексту. Правильный ответ может составить тольковладелец секретного ключа, который отождествляется с законным пользователем.Очевидно, что прослушивающий диалог нарушитель не сможет правильно зашифроватьновый текст и назваться пользователем. (Исключением является аналогияизвестного жульничества, примененного при игре в шахматы по почте, когданарушитель просто транслирует ответы и запросы подлинным проверяющему ипроверяемому, ведя диалог одновременно с каждым из них). Принципиальное отличиеданной системы от опознавания по паролю, где подслушивание позволяет узнатьсекретный пароль и в дальнейшем воспользоваться этим, заключается в том, чтоздесь по каналу связи секретная информация не передается. Ясно, что и стойкостьшифрования, и имитостойкость, и стойкость опознавания могут быть обеспечены,если положенное в основу криптопреобразование является стойким в смыслераскрытия ключа.
Уровеньстойкости зависит от возможностей криптоаналитика и от пользователя. Так,различают криптоанализ на основе только шифрованного текста, когдакриптоаналитик располагает только набором шифрограмм и не знает открытыхтекстов, и криптоанализ на основе открытого текста, когда криптоаналитик знает иоткрытие, и соответствующие шифрованные тексты. Поскольку криптоалгоритм обычнодолжен быть достаточно универсальным, естественным представляется требование,чтобы стойкость ключа не зависела от распределени вероятностей источникасообщений. В общем случае источник сообщений может вырабатывать «удобные»для нарушителя сообщения, которые могут стать ему известными. В этом случаеговорят о криптоанализе на основе специально выбранных открытых текстов.Очевидно, что стойкость ключа по отношению к анализу на основе выбранныхтекстов не может превышать стойкости по отношению к анализу на основе открытыхтекстов, а она, в свою очередь, не может превышать стойкости по отношению канализу на основе шифрованных текстов. Иногда разработчиком СЗИ допускаетсядаже, что враждебный криптоаналитик может иметь доступ к криптосистеме, то естьбыть «своим».
Обычнокриптоалгоритмы разрабатывают так, чтобы они были стойкими по отношению ккриптоанализу на основе специально выбранных открытых текстов.
Понятие«наилучшего алгоритма» раскрытия ключа в определении стойкостинеконструктивно и допускает субъективное толкование (для кого- то изразработчиков наилучшим алгоритмом может быть простой перебор ключей).По-видимому, ни для одного из используемых криптоалгоритмов не определеннаилучший алгоритм раскрытия ключа, то есть задача нахождени наилучшегоалгоритма является чрезвычайно сложной. Поэтому на практике для оценкистойкости пользуются наилучшим известным или найденным в ходе исследованийалгоритмом раскрытия. Таким образом, на практике никто не может помешатьспособному криптоаналитику снизить оценку стойкости, придумав новый, болееэффективный метод анализа.
Созданиеновых эффективных методов раскрытия ключа или иного метода ослаблениякриптоалгоритма может давать осведомленным лицам большие возможности понанесению ущерба пользователям, применяющим данный криптоалгоритм. Публикацияили замалчивание этих сведений определяются степенью открытости общества.Рядовой пользователь системы бессилен помешать нарушителю в раскрытии егоключей.
Изизложенного следует, что понятие «наилучшего известного» алгоритманеабсолютно: завтра может появиться новый более эффективный алгоритм раскрытия,который приведет к недопустимому снижению стойкости криптоалгоритма. Сразвитием математики и средств вычислительной техники стойкость криптоалгоритмаможет только уменьшаться. Для уменьшения возможного ущерба, вызванногонесвоевременной заменой криптоалгоритма, потерявшего свою стойкость, желательнапериодическая перепроверка стойкости криптоалгоритма. Для снижения вероятностинепредсказуемого «обвала» вновь разработанного криптоалгоритманеобходимо проведение криптографических исследований.
Израссмотренного выше следует, что понятие стойкости криптосистемы многогранно.Стойкость зависит не только от разработчика, но и от особенностей использованияданного криптоалгоритма в системе управлении или связи, от физическойреализации криптоалгоритма, а также от будущих успехов математики ивычислительной техники. Ведь криптосистема может эксплуатировать много лет, анеобходимость сохранять в секрете в течение длительного времени переданнуюранее по открытым каналам связи информацию может сделать необходимымпрогнозировать развитие науки и техники на десятилетия.
Последниедесятилетие характеризуется резким увеличением числа открытых работ по всемвопросам криптологии, а криптоанализ становится одной из наиболее активноразвивающихся областей исследований. Многие криптосистемы, стойкость которых невызывала особых сомнений, оказались успешно раскрытыми. При этом разработанбольшой арсенал математических методов, представляющих прямой интерес длякриптоаналитика.
Вначале 1970-х гг. была известна только классическая одноключевая криптография,но число открытых работ по этой тематике было весьма скромным. Отсутствиеинтереса к ней можно объяснить целым рядом причин. Во-первых, остройпотребности в криптосистемах коммерческого назначения, по-видимому, еще неощущалось. Во-вторых, большой объем закрытых исследований по криптографииобескураживал многих ученых, которым, естественно, хотелось получить новыерезультаты. И наконец, может быть, самый важный фактор заключается в том, чтокриптоанализ как научная дисциплина фактически по-прежнему представлял собойбольшой набор разрозненных «трюков», не объединенных стройнойматематической концепцией.
В1970-х гг. ситуация радикально изменилась. Во-первых, с развитием сетей связи иповсеместным вторжением ЭВМ необходимость в криптографической защите данныхстала осознаваться все более широкими слоями общества. Во-вторых, изобретениеДиффи и Хелманном криптографии с открытым ключом создало благоприятную почвудля удовлетворения коммерческих потребностей в секретности, устранив такойсущественный недостаток классической криптографии, как сложностьраспространения ключей. По существу, это изобретение гальванизировало научноесообщество, открыв качественно новую неисследованную область, которая к тому жеобещала возможность широкого внедрения новых результатов быстро развивающейсятеории вычислительной сложности для разработки конкретных систем с простымматематическим описанием. Ожидалось, что стойкость таких систем будет надежноопираться на неразрешимость в реальном времени многих хорошо известных задач ичто, может быть, со временем удастся доказать принципиальную нераскрываемостьнекоторых криптосистем.
Нонадежды на достижение доказуемой стойкости посредством сведения задачкриптографии к хорошо известным математическим задачам не оправдалась, а,скорее, наоборот. Именно то обстоятельство, что любую задачу отыскани способа раскрытиянекоторой конкретной криптосистемы можно переформулировать как привлекательнуюматематическую задачу, при решении которой удается использовать многие методытой же теории сложности, теории чисел и алгебры, привело к раскрытию многихкриптосистем. На сегодняшний день классическая лента однократного использованияостается единственной, безусловно, стойкой системой шифрования.
Идеальноедоказательство стойкости некоторой криптосистемы с открытым ключом могло бысостоять в доказательстве того факта, что любой алгоритм раскрытия этойсистемы, обладающий не пренебрежимо малой вероятностью ее раскрытия, связан снеприемлемо большим объемом вычислений. И хотя ни одна из известных систем соткрытым ключом не удовлетворяет этому сильному критерию стойкости, ситуацию неследует рассматривать как абсолютно безнадежную. Было разработано много систем,в отношении которых доказано, что их стойкость эквивалентна сложности решениянекоторых важных задач, которые почти всеми рассматриваются как крайне сложные,таких, например, как известная задача разложения целых чисел. (Многие израскрытых криптосистем были получены в результате ослабления этихпредположительно стойких систем с целью достижения большого быстродействия.)Кроме того, результаты широких исследований, проводившихся в течение последнихдесяти лет как в самой криптографии, так и в общей теории вычислительнойсложности, позволяют современному криптоаналитику гораздо глубже понять, что жеделает его системы нестойкими.
Проведениекриптоанализа для давно существующих и недавно появившихся криптоалгоритмовочень актуально, так как вовремя можно сказать, что данный криптоалгоритмнестоек, и усовершенствовать его или заменить новым. Для того, чтобы выявлятьнестойкие криптоалгоритмы необходимо все время совершенствовать уже известныеметоды криптоанализа и находить новые.
Направлениекриптоанализа могут быть различными, в соответствии с направлениямикриптографии: это раскрытие ключа, навязывание ложной информации за счетнахождения слабостей в криптоалгоритме или протоколе, возможность бесконечногочтения зашифрованной информации и т.п.
Криптоалгоритм,как правило, должен быть стойким по отношению к криптоанализу на основевыбранных открытых текстов. Первое требование по существу означает, чторассекречивание некоторой информации, передававшейся по каналу связи взашифрованном виде, не должно приводить к рассекречиванию другой информации,зашифрованной на этом ключе. Второе требование учитывает особенностиэксплуатации аппаратуры и допускает некоторые вольности со стороны оператораили лиц, имеющих доступ к формированию засекреченной информации.
Криптоанализможет базироваться на использовании как общих математических результатов(например методов разложения больших чисел для раскрытия криптосистемы RSA),так и частных результатов, полученных для конкретного криптоалгоритма. Какправило, алгоритмы криптоанализа являются вероятностными.
Дифференциальныйметод криптоанализа [21] (ДКА) был предложен Э.Бихамом и А.Шамиром в 1990 г. Дифференциальный криптоанализ — это попытка вскрытия секретного ключа блочных шифров, которыеоснованы на повторном применении криптографически слабой цифровой операциишифрования r раз. При анализе предполагается, что на каждом цикле используетсясвой подключ шифрования. ДКА может использовать как выбранные, так и известныеоткрытые тексты .
Отличительнойчертой дифференциального анализа является то, что он практически не используеталгебраические свойства шифра (линейность, аффинность, транзитивность,замкнутость и т.п.), а основан лишь на неравномерности распределениявероятности дифференциалов.
Воткрытой печати линейный метод криптоанализа впервые был предложен японскимматематиком Мацуи. Метод предполагает, что криптоаналитик знает открытые исоответствующие зашифрованные тексты.
Обычнопри шифровании используется сложение по модулю 2 текста с ключом и операциирассеивания и перемешивания. Задача криптоаналитика — найти наилучшую линейнуюаппроксимацию (после всех циклов шифрования)
Дляраскрытия ключа шифра DES этим методом необходимо 247 пар известных открытых изашифрованных текстов.
1.5 Выводы поразделу
Исходя из вышеизложенного материала можно сделать вывод, что БСШ Crypton является эффективным ина программном и на аппаратном уровне: благодаря высокой степени паралельностии использованию очень простых логических операций ANDS/XORS, CRYPTON работаеточень быстро на большинстве платформ, как в программном обеспечении, так и ваппаратных средствах. Анализ безопасности БСШ Crypton показывает, что12-раундовый самозаменяемый шифр (с одинаковыми процессами для кодирования ирасшифрования) с длиной блока 128 битов и длинной ключа до 128 битов обладаетхорошей стойкостью к существующим атакам. Интегральная атака на 4-х раундовыйБСШ Crypton является намного эффективнее, чем полный перебор по всемуключевому пространству.
Поэтомуреализация интегрального алгоритма атаки на БСШ Crypton будет наиболее актуальнойзадачей.
2.ОСОБЕННОСТИ РЕАЛИЗАЦИИ ИНТЕГРАЛЬНОЙ АТАКИ НА ШИФР CRYPTON
2.1 Интегральныесвойства БСШ Crypton
Crypton представляет собой блочный шифр.Длина ключа и длина блока 128 бит. Описание алгоритма атаки взято из [22].
Четыре преобразования работают спромежуточным результатом, называемым Состоянием (State). Состояние можнопредставить в виде прямоугольного массива из 16 байт />, где />. Обозначим /> – столбец из четырех байт.Аналогично представлен ключ шифрования />,где />. Обозначим />.
В шифре определено поле Галуа GF(28),элементами которого являются байты. Байты рассматриваются как многочлены над Z2:
/>,
где /> i-йбит байта /> (0 или 1).
Операциясложения "/>". Присложении байт соответствующие им многочлены складываются над Z2(1+1=0).
Операцияумножения. При умножении байт соответствующие им многочлены перемножаются над Z2и результирующий многочлен берется по модулю простого многочлена
/>.
В процессеработы алгоритма ключ /> расширяется (KeySchedule, Key Expansion). Первые 4 столбца (по 4 байта) массива являютсяисходным ключом (/>). Каждый последующий r-й набор из4 столбцов вычисляется из предыдущего набора и используется для r-ого раунда,обозначим его />. Раунд состоитиз четырех различных элементарных преобразований, которые преобразуют состояние/> в состояние />:
1. Заменабайт – BS(Byte Substitution): применение перестановки S (также известной как S-блок,Sbox) ко всем байтам состояния независимо. /> для/>.
2. Сдвигстрок – SR(Shift Rows): циклический сдвиг байт по правилу />.
3. Замешиваниестолбцов –MC (Mix Columns): каждый столбец состояния изменяется линейным преобразованием />. Преобразование /> можно представить, какумножение столбца на матрицу слева:
/>
Операция /> обратима: />.
4. Добавлениераундового ключа – KA (Key Addition): к текущему состоянию прибавляетсяраундовый ключ />.
Финальныйраунд не содержит операции MC. Составим 2 формулы, связывающие состояния Ar-1и Ar:
/> (1)
/> (2)/>/>
2.2Алгоритм реализации интегральной атаки наБСШ Crypton
В данном разделе описанаспецифичная для шифра Cryptonинтегральная атака [22]. Представлено математическое обоснование базовой атакина 4 раунда.
Интегральнаяатака основана на возможности свободного подбора атакующим некоторого набораоткрытых текстов для последующего их зашифрования. Эта атака для 4-раундовогошифра Crypton (стандарт Crypton включает в себя 12 раундов) эффективнее, чемполный перебор по всему ключевому пространству.
Введемопределения.
Λ-набор– набор из 256 входных блоков (массивов State), каждый из которых имеет байты(назовем их активными), значения которых различны для всех 256 блоков.Остальные байты (пассивные) остаются одинаковыми для всех 256 блоков изΛ-набора. Т.е. />: />, если байт с индексом /> активный и /> иначе.
Λk– Λ-набор c k активными байтами.
Pr– множество состояний в конце раунда r.
ВозьмемΛ-набор и проследим его изменение в течении нескольких раундов. Послеэлементарных преобразований BS и KA блоки Λ-набора дадут в результатедругой Λ-набор с активными байтами в тех же позициях, что и у исходного.Преобразование SR сместит эти байты соответственно заданным в ней смещениям.После преобразования MC Λ-набор в общем случае необязательно останетсяΛ-набором (т. е. результат операции может перестать удовлетворятьопределению Λ-набора). Но поскольку каждый байт /> результата MC являетсялинейной комбинацией (с обратимыми коэффициентами) четырех входных байт того жестолбца />, то столбец с единственнымактивным байтом на входе даст в результате на выходе столбец со всеми четырьмяактивными байтами.
Рассмотримшифрование Λ1-набора, во всех блоках которого активен толькоодин байт. Т.е. значение этого байта различно во всех 256 блоках, а остальныебайты одинаковы. Проследим эволюцию этого байта на протяжении трех раундов. Впервом раунде преобразование MC преобразует один активный байт в столбец из 4активных байт, т.е. P1 является Λ4. Во втором раундеэти 4 байта разойдутся по 4 различным столбцам в результате преобразования SR,P2 является Λ16. Преобразование MC следующего,третьего раунда преобразует эти байты в 4 столбца, содержащие активные байты.Этот набор все еще остается Λ-набором до того момента, когда он поступаетна вход MC третьего раунда.
Основноесвойство Λ-набора – поразрядная сумма по модулю 2 (/>) всех байтов, находящихсяна одних и тех же местах, по всему набору равна нулю, т.е. />. Действительно,поразрядная сумма неактивных (с одинаковыми значениями) байт равна нулю по определениюоперации "/>" (т.к. />), а активные байты,пробегая все 256 значений, также при поразрядном суммировании дадут нуль.
Рассмотримтеперь результат преобразования MC в третьем раунде байтов входного массиваданных A в байты выходного массива данных B. Покажем, что и в этом случаепоразрядная сумма всех блоков выходного набора будет равна нулю, то есть:
/>
Такимобразом, P3 является Λ16, т.е. все данные на входечетвертого раунда сбалансированы (их полная сумма равна нулю). />Этот баланс в общем случаенарушается последующим преобразованием BS. Ключ Kr также можнооднозначно задать в L-представлении, которое строится следующим образом:
/> />
Зная Lrможно вычислить Kr, и обратно. Для проведения атаки потребуетсямножество Q4 состоящее из 256 состояний: />.Множество Q4 можно получить из выходных данных шифра P4применением 2 обратных преобразований SR-1 и MC-1 ккаждому состоянию.
Схема базовойинтегральной атаки на 4-раундовый Crypton.
Для всех />
Для />
Если />, то />
В этой схемемы инвертируем 4-ый раунд шаг за шагом, чтобы получить сбалансированные байты P3.При /> сумма /> будет сбалансированной.
Еслипредполагаемое значение байта ключа было верно, то оно будет включено ввозможные варианты на место />.Большая часть неверных значений байта будет отсеяно. За счет того, что поискможет производиться отдельно (параллельно) для каждого байта ключа, скоростьподбора всего значения раундового ключа весьма велика. Далее по значению />можно найти />, а потом и /> – исходныйключ [22].
2.3 Описаниепрограммной реализации
Разработанныйв рамках дипломной работы программный продукт представляет собой реализациюшифрования и расшифрования данных с использованием алгоритма Crypton и реализацию интегральнойатаки. Системные требования — компьютер на базе Intel Pentium и выше, ОС — Windows 95 + IE 4.0 и выше.
Программныйпродукт выполняет следующие операции:
— зашифрование входных данных в криптограму;
— расшифрование криптограммы;
— нахождение128 – битного ключа.
Операциязашифрования выполняется следующим образом:
1. Запускаемфайл ENCRDECR.EXE получаем на экране Рис.2.1
2. Нажатиемкнопки «0» выбираем функцию зашифрования;
3. Указываемпуть к файлу который необходимо зашифровать и путь где разместить криптограмуРис. 2.2
/>
Рисунок 2.1Начало работы программы
/>
Рисунок 2.2 Указание пути кфайлу
4. По указаному пути мы получимкриптограму.
Операция расшифрования выполняетсяследующим образом:
1. Запускаемфайл ENCRDECR.EXE получаем на экране Рис.2.1
2. Нажатиемкнопки «1»выбираем функцию расшифрования;
3. Указываем путь ккриптограме и путь где разместить расшифрованный файл Рис. 2.3
/>
Рисунок 2.3Операция расшифрования
5. По указаному пути мы получимисходные данные.
Операциянахождения ключа выполняется следующим образом:
1. Запускаем файл ENCRDECR.EXE получаем на экранеРис.2.1
2. Нажатиемкнопки «2» выбираем функцию атаки;
3. Указываемпуть к криптограме Рис. 2.4
/>
Рисунок2.4 Операция нахождения ключа.
Врезультате получим наш ключ Рис.2.5
/>
3. БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ
3.1 Анализ условий труда
Дипломныйпроект выполнялся в помещении научно — исследовательской лаборатории (НИЛ). Приразработке применялись ПЭВМ. В дальнейшем при разработке вопросов БЖД будемиспользовать источники и нормативные документы, регулирующие вопросы БЖД приэксплуатации ПЭВМ [23, 12, 16].
Исследовательскиеработы выполнялись в помещении НИЛ, размеры которой составляют 4х6х3 м (площадь 24м2).В помещении имеется 1 окно, площадью 6 м2. Рабочих мест 2 (2 программиста). Каждое рабочее место оборудовано ПЭВМ.
Помещениесоответствует требованиям ДНАОП 0.00-1.31-99 — на одного работающего приходится 12 м2площади и, 36 м3 объема при норме 6 м2и 20 м3соответственно.
Рассматривая НИЛ как систему «Человек-Машина-Среда»(«Ч-М-С»), можно выделить 2 подсистемы «рабочее место», всостав каждой из которых входят элементы «человек» (работник), «машина»(ПЭВМ). Элемент «среда» (производственная среда в помещении НИЛ)является общим для подсистем «рабочее место».
Элемент «человек»разделим на следующие функциональные части:
Ч1 – человек,выполняющий целенаправленные функции;
Ч2 – человек, рассматриваемый сточки зрения его влияния на «среду» за счет тепло-, влаговыделения идр.;
Ч3 – человек, рассматриваемый с точки зрения егопсихофизиологического состояния;
ПТ – предмет труда (проектирование программного продукта).
Элемент «машина» разделим на следующие части:
М1 –выполняет основную техническую функцию (программный продукт);
М2 – функцииаварийной защиты (изоляция, предохранители);
М3 – управление окружающей средой (тепло, шум, электромагнитноеизлучение) (рисунок 1).
/>
Рисунок 1. Система «Человек-Машина-Среда» для НИЛ
На рис. 1. приведены обозначения:
1 — (Ч1-М1) воздействие человека науправление машиной и ее настройки (программирование);
2 — (ПТ-М1) информация о состояниипредмета труда, управляемая машиной (исходные данные программы);
3 — (М1-ПТ) воздействие машины напредмет труда (компиляция программного кода);
4 — (Ч2-С)влияние «человека» на «среду» (теплообмен, шум) ;
5 — (С-Ч3)влияние «среды» на психофизиологическое состояние«человека» (утомление, перенапряженность анализаторов);
6 — (С-Ч1)влияние «среды» на качество работы «человека» (физическая иумственная активность);
7 — (М1-С)влияние «машины» на состояние «среды» (Эл.магн. излучение,тепло);
8 — (С-М1, С-М2, С-М3) влияние «среды» на качество работы«машины» (повышение температуры деталей компьютера);
9 — (Ч1-Ч3)связь выполняемой работы с психофизиологическим состоянием организма(утомление, умственная перенапряженность);
10 — (Ч1-Ч2)влияние характера труда на интенсивность обмена веществ ;
11 — (Ч3-Ч3)взаимодействие людей между собой ;
12 — (М1-Ч1) информация о состояниимашины, обрабатываемая человеком (программный код, изображенный на мониторе);
13 — (М1-М2) информационная связьмежду компьютером и защитной функцией;
14 — (М3-М1) аварийное управляющеевоздействие.
Возникающие нецелевые (не связанные с выполнением работ) связи междуэлементами системы приводят к появлению опасных и вредных производственныхфакторов (ОВПФ). В таблице 1. перечислены, согласно [24] и ГОСТ 12.0.003-74 возможные ОВПФ с указанием ихисточника и последствий воздействия на человека. Помещение относится к классу помещений без повышенной опасности,поскольку нет признаков, свойственных особо опасным помещениям и помещениям сповышенной опасностью. Можно выделитьследующие ОВПФ в помещении НИЛ.
Физические:
— повышенный уровень шума на рабочем месте;
— отсутствие или недостаток естественного света;
— недостаточная освещенность рабочей зоны;
— повышенная или пониженная температура воздуха рабочей зоны;
— повышенная или пониженная влажность воздуха рабочей зоны;
— повышенное значение напряжения в электрической цепи;
— повышенная напряженность электрического и магнитного поля;
— повышенный уровень ионизирующего излучения
Психофизиологические
— статические перегрузки;
— умственное перенапряжение, эмоциональные перегрузки;
— перенапряжение анализаторов (зрительных)
Оценка факторов производственной среды и трудового процессаприведена в таблице 1.
Таблица 1. Оценка факторов труда
/>
Из таблицы 1 видно, что в помещении несколько повышена температуравоздуха. Это связано с избыточным выделением тепла. Поэтому доминирующимвредным фактором выберем повышенную температуру воздуха рабочей зоны.
3.2 Техника безопасности
Электроснабжение НИЛ осуществляетсяот трехфазной четырехпроводной сети с глухозаземленной нейтралью, токпеременный, частота 50 Гц, напряжение 220/380 В. Согласно требованиям ПУЭ иГОСТ 12.1.030-81 выполнено зануление, повторное заземление нулевого провода,проводится контроль изоляции.
Для зануления электрическисоединены на вводе в НИЛ с нулевым проводником сети корпуса всех ПЭВМ.Соединение выполнено нулевым защитным проводником, полная проводимость которогоне менее 50% полной проводимости фазового провода. Для отключения поврежденногоучастка сети на вводе электросети в НИЛ установлен автомат защиты, ток срабатываниякоторого выбран по току короткого замыкания. Зануление превращает замыкание накорпус ПЭВМ в однофазное короткое замыкание, в результате чего срабатываетавтомат защиты. Время отключения поврежденного участка сети не более 0,1-0,2 с.
Дляуменьшения напряжения, приложенного к телу человека в момент замыкания,необходимо выполнено повторное заземление нулевого провода. Нулевой защитныйпроводник заземлен при помощи искусственных заземлителей. Сопротивлениеповторного заземления нулевого провода не превышает 30 Ом согласно требованиюПУЭ-85.
Не реже 1 раза в год приотключенном электропитании проводится контроль изоляции между нулем и фазой,нулевым защитным проводником и фазой, между фазами. Сопротивление изоляции непревышает 500 кОм.
Электросетьрозеток для питания ПЭВМ проложена под съемным полом в гибких металлических рукавах.
Неприменяются: самодельные удлинители, не соответствующие требованиям ПУЭ кпереносным электропроводкам; не используется для отопления нестандартноеэлектронагревательное оборудование; не используется поврежденные розетки,разветвители, коробки, выключатели и другие электроизделия.
Согласно требованиямДНАОП 0.00-4.12-99 [25] проводятся вводный, первичный на рабочем месте,повторный, внеплановый и целевой инструктажи.
Вводныйинструктаж проводится при поступлении на работу. Инструктаж организует ипроводит служба охраны труда, факт инструктажа фиксируется в журнале вводногоинструктажа.
Первичныйинструктаж проводится непосредственно на рабочем месте. Факт инструктажафиксируется в журнале первичного инструктажа. Аналогично с периодичностью 1 разв 6 месяцев проводятся повторные инструктажи.
Внеплановыйинструктаж проводится при изменении условий труда, введения в эксплуатациюновой техники, а также при несчастных случаях.
Целевойинструктаж в НИЛ проводится при выполнении работ, не связанных с их основнымиобязанностями.
Содержаниевсех инструктажей соответствует требованиям ДНАОП 0.00-4.12-99.
3.3 Производственная санитария и гигиена труда
Работы в НИЛсогласно ДНАОП 0.00-1.31-99 относятся к категории работ по энергозатратаморганизма «легкая 1а» — работы, производимые сидя и сопровождающиесянезначительным физическим напряжением. С целью создания нормальных условий дляперсонала установлены следующие нормы микроклимата по ГОСТ 12.0.005-88,приведенные в таблице 2.
Для обеспечения установленных (оптимальных) норм микроклимата впомещении НИЛ следует применять кондиционирование. Выполним расчеткондиционирования.
Таблица 2. Оптимальные нормы микроклимата
Время
года Температура воздуха, град. С Относительная влажность воздуха, %
Скорость движения
воздуха, м/с Холодное 22-24 40-60 не более 0.1 Теплое 23-25 40-60 не более 0.1
Для обеспечения установленных норм микроклиматических параметров ичистоты воздуха в НИЛ применяютестественную вентиляцию и кондиционирование. Основной задачей установоккондиционирования воздуха (УКВ) является поддержание параметров воздушной средыв допустимых пределах, обеспечивающих надежную работу ПЭВМ и комфортные условиядля обслуживающего персонала. Расчет вентиляции необходим для определения потребноговоздухообмена (количества воздуха в единицу времени). Для определения требуемого воздухообмена необходимо определить общеетепловыделение в помещении НИЛ [26].
Тепло />, излучаемоеоборудованием, равно
Qоб= 860∙N1∙K2 ∙K2 = 860∙0,8∙0,95∙1 = 654(ккал/ч), (3.1)
где /> – суммарнаямощность установленного оборудования;
/> – коэффициент использования мощностей, примем равным 0.95;
/>– коэффициент одновременной работы оборудования, с запасом примемравным 1.
Тепло />/>, излучаемое людьми, равно
Qл = 0,5∙n∙g = 0,5∙2∙120 = 120 (ккал/ч), (3.2)
где />– количество работающих впомещении, 2 чел.;
/> – количествотепла, выделяемое человеком, при работе 1а равно 100-125 ккал/ч, примем равным120 ккал/ч.
Тепло />, излучаемоеосвещением, равно
Qос = k∙ E∙ S = 0,05∙300∙24 = 360 (ккал/ч), (3.3)
где Е – наименьшая нормируемая освещенность, равна 300 кл;
S — площадь помещения, равна 24 кв.м.;
k – коэффициенттепловыделения,0,05 ккал/лк м2.
Тепло />, выделяемоеза счет солнечной радиации, равно:
Qр = nc∙kc∙S = 86∙6∙1,15 = 593,4 (ккал/ч), (3.4)
где /> – удельноеколичество тепла, поступающего через единицу площади окна, равно 86 ккал/ч;
/> – поправочный коэффициент, зависит от географической полосы, дляХарькова равен 1.15;
/> – площадьокон, равна 6 м2.
Общее выделение теплоты /> равноQ = 654+120+360+593,4 = 1727,4 (ккал/ч) или 2 кВт. (3.5)
Требуемый воздухообмен />будет равен
Lтр = Q∙(1/(c∙r(tп – tк))) = 1727,4∙(1/(0,24∙ 1,29(27-18)) = 619 (м3/ч) (3.6)
где /> – удельнаятеплоемкость воздуха, 0.24 ккал/кг·град;
/> – плотность воздуха, 1.29кг/ м3;
/>– температура удаляемого воздуха, 270С;
/> – температура воздуха с кондиционера, 180С.
Lтр. ха= Lтр/>r/>c/>(tвнеш — tуд)
Lтр. ха=619/>1,29/>0,24 (32-18)=2683 (м3/ч)
С учётом полученных результатов выбираем два кондиционера Samsung AW – 05EO.
Трудовая деятельность в НИЛ относится к группе В (отладка программ,перевод и редактирования и др.) [27]. Продолжительность работ превышает 4 ч ивыполняемые работы относятся к III категории работ. Установлены перерывы по 20мин каждый через 2 ч после начала работ, через 1,5 ч и 2, 5 ч после обеденногоперерыва или же по 5-15 мин через каждый час работы. Общее время перерывов непревышает 60 мин.
Каждоерабочее место в НИЛ должно соответствует требованиям ДНАОП 0.00-1.31-99.Рабочие места расположены относительно световых проемов так, что естественныйсвет падает слева, при этом выдерживаются следующие расстояния:
от стен сосветовыми проемами до рабочего места — 1 м;
между тыльнойповерхностью одного видеотерминала и экраном — 2,5 м.
Размещение рабочих мест в НИЛ показано на рисунке 2.
/>
Рисунок 2. Схема размещения рабочих мест,оборудования и кондиционеров и схема эвакуациипри пожаре.
На рисунке 2. приведены следующие обозначения:
К1, К2 – кондиционеры, П1, П2 – рабочие места
3.4 Пожарная безопасность
Пожарная безопасность объекта — состояние объекта, при котором срегламентированной вероятностью исключается возможность возникновения условий ивоздействия на людей опасных факторов пожара, а также обеспечивается защитаматериальных ценностей [28]. Причинами, которые могут вызвать пожар врассматриваемом помещении, являются:
- неисправность электропроводки и приборов;
- короткое замыкание электрических цепей;
- перегрев аппаратуры и электропроводки;
- нарушение правил пожарной безопасности;
- разряд статического электричества;
- молния.
Помещение отдела по пожарной и взрывопожарной опасности относится ккатегории В согласно ОНТП 24-86, так как в обращении находятся твердыесгораемые вещества и материалы. Степень огнестойкости здания — П согласно СНиП2.01.02-85, класс помещения по пожарной опасности П-IIа, согласно ПУЭ-87. Пожарная безопасность всоответствии с ГОСТ 12.1.004-91* и ДСТУ 2272-93 обеспечивается системамипредотвращения пожара, противопожарной защиты. Организационно-техническимимероприятиями. Система предотвращения пожара:
- заземление корпусов для отвода зарядастатистического электричества;
- контроль и профилактика изоляции;
— наличие плавких вставок и предохранителей в электронномоборудовании;
-наличие вентилятора для охлаждения электронной аппаратуры.
Для данного класса зданий и местности со средней грозовойдеятельностью 10 и более грозовых часов в год, установлена Ш категориямолниезащиты. РД 34.21.122-87.
Степень защиты, соответствующая классу помещения П-II-а IP44 для оборудования и IP2X для светильников.ПУЭ-87 [29].
Система противопожарной защиты:
- аварийное отключение и переключение аппаратуры;
- наличие первичных средств пожаротушения,огнетушителей ОУ-2А, из расчета 1 шт. на каждые 20 м2 площади, так как углекислота обладает плохой электропроводностью;
- наличие системы автоматической пожарнойсигнализации;
- дымовые извещатели из расчета 1 на 10 м2;
- защита легковоспламеняющихся частей оборудования защитнымиматериалами;
-использование негорючих материалов для акустической обработки стени потолков.
Для успешной эвакуации персонала при пожаре размеры двери рабочегопомещения предусмотрены следующими:
- ширина двери не менее 1,5 м;
- высота двери не менее 2,0 м;
- ширина коридора 1,8 м;
- рабочее помещение имеет два выхода;
-расстояние от самого удаленного рабочего места не превышает 100м. Организационныемеры пожарной профилактики:
- обучение персонала правилам пожарной безопасности;
- издание необходимых инструкций и плакатов, плана эвакуацииперсонала в случае пожара.
3.5Гражданская оборона
Т.к.разрабатываемый программный продукт производился в здании, вблизи которого ненаходятся потенциально опасные объекты, то разработка мер по защите персонала вчрезвычайных ситуациях не производилась.
3.6 Защитаокружающей среды
Т.к.разрабатываемый программный продукт не наносит вред окружающей среде, мерызащиты в данной дипломной работе не рассматривались.
Выводы
С развитием и постоянным внедрением компьютерных телекоммуникацийв различные сферы человеческой деятельности (научные исследования, электроннаякоммерция, банковское дело, медицина и т.д.) все более остро встает вопросбезопасного обмена данными через незащищенные каналы передачи. Единственнымэффективным средством защиты информации остается ее криптографическоепреобразование.
Актуальность данной разработки,обусловлен постоянно повышающимся интересом мирового сообщества к проблемамзащиты информации — ее конфиденциальности и аутентичности.
В процессеанализа проблемной области были подвергнуты серьезному изучению математическийаппарат шифра, критерии его применения, а также проблемы реализации насовременных микропроцессорных архитектурах.
В ходе работыбыл реализован перечень основных научных, организационных и практических задач,требующих решения в процессе достижения цели дипломного проектирования, аименно:
-изучить методику применения интегральнойатаки против блочного симметричного шифра Crypton,
-адаптировать методику применения интегральнойатаки для использования против усеченного варианта блочного симметричного шифра Crypton,
-выполнитьпрограммную реализациюзашифрования, расшифрования и интегральной атаки против усеченного варианта блочного симметричногошифра Crypton .
В ходе работыдипломного проекта был сделан программный продукт.
Программаразрабатывалась на языке C++, финальная сборка была произведена в средеразработки Borland C++ v 3.1.
К основнымоперациям разработанным в ходе дипломного проектирования программного продуктаможно отнести:
-практическое решение задач шифрования и расшифрования данных поалгоритму Crypton;
— реализация интегральной атаки на усеченный вариант шифра Crypton.
Возможныминаправлениями продолжения работ дипломного проекта можно рассматривать:
-расширение функциональности программного продукта в частиувеличения детализации управления элементами алгоритма шифрования;
введение статистических средств анализа;
-распространение разработанных методик изучения криптографическогоалгоритма Crypton на другие современные алгоритмы шифрования.
В результате разработанных в разделе «Безопасностьжизнедеятельности» организационных и технических мероприятий факторыпроизводственной среды и трудового процесса в НИЛ стали находится в пределахдопустимых условий труда. Технический и организационный уровень рабочего местаобеспечивает безопасность человека. Дополнительных рекомендаций по улучшениюусловий труда не требуется.
Приложение А
шифр атакакриптографический crypton
Файл
#include
#include
#include
#include
#include
#include
#include
#include
#include«std_defs.h»
#include«crypton.h»
#include«atack.h»
voidatack(int);
intmain()
{
clrscr();
inti,q,f1,f2;
charf_nam1[111];
charf_nam2[111];
charf_nam3[111];
charw;
union
{
u1bytea1[4][4];
u4bytea4[4];
}
st,st1,st2,k;
for(i=0;i
k.a4[i]=0;
set_key(k.a4,128);
printf(«encript/decrypt/atack(0/1/2)?»);
cout
w=getch();
if((w!='0')&&(w!='1')&&(w!='2'))
exit(3);
if(w=='2')
{
cout
gets(f_nam3);
f2=open(f_nam3,O_RDONLY|O_BINARY);
if(f2==-1)
{
close(f2);
exit(1);
}
atack(f2);
}
if(w=='0')
{
cout
gets(f_nam1);
cout
gets(f_nam2);
f1=open(f_nam1,O_RDONLY|O_BINARY);
if(f1==-1)
{ //perror(f_nam1);
puts(f_nam1);
cout
puts(f_nam2);
close(f1);
exit(1);
}
f2=open(f_nam2,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,S_IWRITE);
if(f2==-1)
{
close(f2);
exit(2);
}
do
{
q=read(f1,&st.a1[0][0],16);
if(q==16)
{
encrypt(st.a4,st1.a4);
write(f2,&st1.a1[0][0],16);
}
else
{
if(q>0)
{
for(i=0;i
st2.a4[i]=0;
for(i=0;i
{
st2.a1[i/4][i%4]=st.a1[i/4][i%4];
}
encrypt(st2.a4,st1.a4);
write(f2,&st1.a1[0][0],16);
}
}
}
while(q==16);
close(f1);
close(f2);
}
if(w=='1')
{
cout
gets(f_nam2);
cout
gets(f_nam3);
f1=open(f_nam2,O_RDONLY|O_BINARY);
if(f1==-1)
{
close(f1);
exit(1);
}
f2=open(f_nam3,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,S_IWRITE);
if(f2==-1)
{
close(f2);
exit(2);
}
do
{
q=read(f1,&st.a1[0][0],16);
if(q==16)
{
decrypt(st.a4,st1.a4);
write(f2,&st1.a1[0][0],16);
}
else
{
if(q>0)
{
for(i=0;i
st2.a4[i]=0;
for(i=0;i
{
st2.a1[i/4][i%4]=st.a1[i/4][i%4];
}
decrypt(st2.a4,st1.a4);
write(f2,&st1.a1[0][0],16);
}
}
}
while(q==16);
close(f1);
close(f2);
}
return0;
}
Файл
#include«std_defs.h»
staticchar *alg_name[] = { «crypton», «crypton.c» };
char**cipher_name()
{
returnalg_name;
}
#definegamma_tau(x,b,m,p,q) \
(x)= (((u4byte)s_box[p][byte(b[0],m)] ) | \
((u4byte)s_box[q][byte(b[1],m)]
((u4byte)s_box[p][byte(b[2],m)]
((u4byte)s_box[q][byte(b[3],m)]
#definema_0 0x3fcff3fc
#definema_1 0xfc3fcff3
#definema_2 0xf3fc3fcf
#definema_3 0xcff3fc3f
#definemb_0 0xcffccffc
#definemb_1 0xf33ff33f
#definemb_2 0xfccffccf
#definemb_3 0x3ff33ff3
#definepi(b,n0,n1,n2,n3) \
(((b)[0]& ma_##n0) ^ \
((b)[1]& ma_##n1) ^ \
((b)[2]& ma_##n2) ^ \
((b)[3]& ma_##n3))
#definephi_n(x,n0,n1,n2,n3) \
( (x)& mb_##n0) ^ \
(rotl((x),8) & mb_##n1) ^ \
(rotl((x),16) & mb_##n2) ^ \
(rotl((x),24) & mb_##n3)
#definephi_00(x) phi_n(x,0,1,2,3)
#definephi_01(x) phi_n(x,3,0,1,2)
#definephi_02(x) phi_n(x,2,3,0,1)
#definephi_03(x) phi_n(x,1,2,3,0)
#definephi_10(x) phi_n(x,3,0,1,2)
#definephi_11(x) phi_n(x,2,3,0,1)
#definephi_12(x) phi_n(x,1,2,3,0)
#definephi_13(x) phi_n(x,0,1,2,3)
#definephi0(x,y) \
(y)[0]= phi_00((x)[0]); \
(y)[1]= phi_01((x)[1]); \
(y)[2]= phi_02((x)[2]); \
(y)[3]= phi_03((x)[3])
#definephi1(x,y) \
(y)[0]= phi_10((x)[0]); \
(y)[1]= phi_11((x)[1]); \
(y)[2]= phi_12((x)[2]); \
(y)[3]= phi_13((x)[3])
u1bytep_box[3][16] =
{ {15, 9, 6, 8, 9, 9, 4, 12, 6, 2, 6, 10, 1, 3, 5, 15 },
{10, 15, 4, 7, 5, 2, 14, 6, 9, 3, 12, 8, 13, 1, 11, 0 },
{ 0,4, 8, 4, 2, 15, 8, 13, 1, 1, 15, 7, 2, 11, 14, 15 }
};
u4bytetab_gen = 0;
u1bytes_box[2][256];
u4bytes_tab[4][256];
u4bytel_key[104];
u4byte*e_key = l_key + 52;
u4byte*d_key = l_key;
voidgen_tab(void)
{ u4bytei, xl, xr, yl, yr;
for(i= 0; i
{
xl= (i & 0xf0) >> 4; xr = i & 15;
yr= xr ^ p_box[1][xl ^ p_box[0][xr]];
yl= xl ^ p_box[0][xr] ^ p_box[2][yr];
yr|= (yl
xr= yr * 0x01010101; xl = i * 0x01010101;
s_tab[0][i] = xr & 0x3fcff3fc;
s_tab[1][yr]= xl & 0xfc3fcff3;
s_tab[2][i] = xr & 0xf3fc3fcf;
s_tab[3][yr]= xl & 0xcff3fc3f;
}
};
/*initialise the key schedule from the user supplied key */
u4bytekp[4] = { 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f };
u4bytekq[4] = { 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, 0xcbbb9d5d };
#defineh0_block(n,r0,r1) \
e_key[4* n + 8] = rotl(e_key[4 * n + 0], r0); \
e_key[4* n + 9] = rc ^ e_key[4 * n + 1]; \
e_key[4* n + 10] = rotl(e_key[4 * n + 2], r1); \
e_key[4* n + 11] = rc ^ e_key[4 * n + 3]
#defineh1_block(n,r0,r1) \
e_key[4* n + 8] = rc ^ e_key[4 * n + 0]; \
e_key[4* n + 9] = rotl(e_key[4 * n + 1], r0); \
e_key[4* n + 10] = rc ^ e_key[4 * n + 2]; \
e_key[4* n + 11] = rotl(e_key[4 * n + 3], r1)
u4byte*set_key(const u4byte in_key[], const u4byte key_len)
{ u4bytei, rc, t0, t1, tmp[4];
if(!tab_gen)
{
gen_tab();tab_gen = 1;
}
e_key[2]= e_key[3] = e_key[6] = e_key[7] = 0;
switch((key_len+ 63) / 64)
{
case4: e_key[3] = in_key[6]; e_key[7] = in_key[7];
case3: e_key[2] = in_key[4]; e_key[6] = in_key[5];
case2: e_key[0] = in_key[0]; e_key[4] = in_key[1];
e_key[1]= in_key[2]; e_key[5] = in_key[3];
}
tmp[0]= pi(e_key, 0, 1, 2, 3) ^ kp[0];
tmp[1]= pi(e_key, 1, 2, 3, 0) ^ kp[1];
tmp[2]= pi(e_key, 2, 3, 0, 1) ^ kp[2];
tmp[3]= pi(e_key, 3, 0, 1, 2) ^ kp[3];
gamma_tau(e_key[0],tmp, 0, 0, 1);
gamma_tau(e_key[1],tmp, 1, 1, 0);
gamma_tau(e_key[2],tmp, 2, 0, 1);
gamma_tau(e_key[3],tmp, 3, 1, 0);
tmp[0]= pi(e_key + 4, 1, 2, 3, 0) ^ kq[0];
tmp[1]= pi(e_key + 4, 2, 3, 0, 1) ^ kq[1];
tmp[2]= pi(e_key + 4, 3, 0, 1, 2) ^ kq[2];
tmp[3]= pi(e_key + 4, 0, 1, 2, 3) ^ kq[3];
gamma_tau(e_key[4],tmp, 0, 1, 0);
gamma_tau(e_key[5],tmp, 1, 0, 1);
gamma_tau(e_key[6],tmp, 2, 1, 0);
gamma_tau(e_key[7],tmp, 3, 0, 1);
t0= e_key[0] ^ e_key[1] ^ e_key[2] ^ e_key[3];
t1= e_key[4] ^ e_key[5] ^ e_key[6] ^ e_key[7];
e_key[0]^= t1; e_key[1] ^= t1;
e_key[2]^= t1; e_key[3] ^= t1;
e_key[4]^= t0; e_key[5] ^= t0;
e_key[6]^= t0; e_key[7] ^= t0;
rc= 0x01010101;
h0_block(0, 8, 16); h1_block(1, 16, 24); rc
h1_block(2, 24, 8); h0_block(3, 8, 16); rc
h0_block(4, 16, 24); h1_block(5, 24, 8); rc
h1_block(6, 8, 16); h0_block(7, 16, 24); rc
h0_block(8, 24, 8); h1_block(9, 8, 16); rc
h1_block(10,16, 24);
for(i= 0; i
{
if(i& 1)
{
phi0(e_key+ 4 * i, d_key + 48 — 4 * i);
}
else
{
phi1(e_key+ 4 * i, d_key + 48 — 4 * i);
}
}
phi1(e_key+ 48, e_key + 48);
phi1(d_key+ 48, d_key + 48);
returnl_key;
};
/*encrypt a block of text */
#definefr0(i,k) \
b1[i]= s_tab[ (i) ][byte(b0[0],i)] ^ \
s_tab[((i)+ 1) & 3][byte(b0[1],i)] ^ \
s_tab[((i)+ 2) & 3][byte(b0[2],i)] ^ \
s_tab[((i)+ 3) & 3][byte(b0[3],i)] ^ (k)
#definefr1(i,k) \
b0[i]= s_tab[((i) + 1) & 3][byte(b1[0],i)] ^ \
s_tab[((i)+ 2) & 3][byte(b1[1],i)] ^ \
s_tab[((i)+ 3) & 3][byte(b1[2],i)] ^ \
s_tab[(i)][byte(b1[3],i)] ^ (k)
#definef0_rnd(kp) \
fr0(0,(kp)[0]);fr0(1,(kp)[1]); \
fr0(2,(kp)[2]);fr0(3,(kp)[3])
#definef1_rnd(kp) \
fr1(0,(kp)[0]);fr1(1,(kp)[1]); \
fr1(2,(kp)[2]);fr1(3,(kp)[3])
voidencrypt(const u4byte in_blk[4], u4byte out_blk[4])
{ u4byteb0[4], b1[4];
b0[0]= in_blk[0] ^ e_key[0];
b0[1]= in_blk[1] ^ e_key[1];
b0[2]= in_blk[2] ^ e_key[2];
b0[3]= in_blk[3] ^ e_key[3];
f0_rnd(e_key+ 4); f1_rnd(e_key + 8);
f0_rnd(e_key+ 12); f1_rnd(e_key + 16);
f0_rnd(e_key+ 20); f1_rnd(e_key + 24);
f0_rnd(e_key+ 28); f1_rnd(e_key + 32);
f0_rnd(e_key+ 36); f1_rnd(e_key + 40);
f0_rnd(e_key+ 44);
gamma_tau(b0[0],b1, 0, 1, 0);
gamma_tau(b0[1],b1, 1, 0, 1);
gamma_tau(b0[2],b1, 2, 1, 0);
gamma_tau(b0[3],b1, 3, 0, 1);
out_blk[0]= b0[0] ^ e_key[48];
out_blk[1]= b0[1] ^ e_key[49];
out_blk[2]= b0[2] ^ e_key[50];
out_blk[3]= b0[3] ^ e_key[51];
};
/*decrypt a block of text */
voiddecrypt(const u4byte in_blk[4], u4byte out_blk[4])
{ u4byteb0[4], b1[4];
b0[0]= in_blk[0] ^ d_key[0];
b0[1]= in_blk[1] ^ d_key[1];
b0[2]= in_blk[2] ^ d_key[2];
b0[3]= in_blk[3] ^ d_key[3];
f0_rnd(d_key+ 4); f1_rnd(d_key + 8);
f0_rnd(d_key+ 12); f1_rnd(d_key + 16);
f0_rnd(d_key+ 20); f1_rnd(d_key + 24);
f0_rnd(d_key+ 28); f1_rnd(d_key + 32);
f0_rnd(d_key+ 36); f1_rnd(d_key + 40);
f0_rnd(d_key+ 44);
gamma_tau(b0[0],b1, 0, 1, 0);
gamma_tau(b0[1],b1, 1, 0, 1);
gamma_tau(b0[2],b1, 2, 1, 0);
gamma_tau(b0[3],b1, 3, 0, 1);
out_blk[0]= b0[0] ^ d_key[48];
out_blk[1]= b0[1] ^ d_key[49];
out_blk[2]= b0[2] ^ d_key[50];
out_blk[3]= b0[3] ^ d_key[51];
}
Файл
/*1. Standard types for AES cryptography source code */
typedefunsigned char u1byte; /* an 8 bit unsigned character type */
typedefunsigned short u2byte; /* a 16 bit unsigned integer type */
typedefunsigned long u4byte; /* a 32 bit unsigned integer type */
typedefsigned char s1byte; /* an 8 bit signed character type */
typedefsigned short s2byte; /* a 16 bit signed integer type */
typedefsigned long s4byte; /* a 32 bit signed integer type */
/*2. Standard interface for AES cryptographic routines */
/*These are all based on 32 bit unsigned values and will therefore */
/*require endian conversions for big-endian architectures */
#ifdef__cplusplus
extern«C»
{
#endif
char**cipher_name(void);
u4byte*set_key(const u4byte in_key[], const u4byte key_len);
voidencrypt(const u4byte in_blk[4], u4byte out_blk[4]);
voiddecrypt(const u4byte in_blk[4], u4byte out_blk[4]);
#ifdef__cplusplus
};
#endif
/*3. Basic macros for speeding up generic operations */
/*Circular rotate of 32 bit values */
#ifdef_MSC_VER
# include
# pragmaintrinsic(_lrotr,_lrotl)
# definerotr(x,n) _lrotr(x,n)
# definerotl(x,n) _lrotl(x,n)
#else
#definerotr(x,n) (((x) >> ((int)(n))) | ((x)
#definerotl(x,n) (((x) > (32 — (int)(n))))
#endif
/*Invert byte order in a 32 bit variable */
#definebswap(x) (rotl(x, 8) & 0x00ff00ff | rotr(x, 8) & 0xff00ff00)
/*Extract byte from a 32 bit quantity (little endian notation) */
#definebyte(x,n) ((u1byte)((x) >> (8 * n)))
/*For inverting byte order in input/output 32 bit words if needed */
#ifdefBLOCK_SWAP
#defineBYTE_SWAP
#defineWORD_SWAP
#endif
#ifdefBYTE_SWAP
#defineio_swap(x) bswap(x)
#else
#defineio_swap(x) (x)
#endif
/*For inverting the byte order of input/output blocks if needed */
#ifdefWORD_SWAP
#defineget_block(x) \
((u4byte*)(x))[0]= io_swap(in_blk[3]); \
((u4byte*)(x))[1]= io_swap(in_blk[2]); \
((u4byte*)(x))[2]= io_swap(in_blk[1]); \
((u4byte*)(x))[3]= io_swap(in_blk[0])
#defineput_block(x) \
out_blk[3]= io_swap(((u4byte*)(x))[0]); \
out_blk[2]= io_swap(((u4byte*)(x))[1]); \
out_blk[1]= io_swap(((u4byte*)(x))[2]); \
out_blk[0]= io_swap(((u4byte*)(x))[3])
#defineget_key(x,len) \
((u4byte*)(x))[4]= ((u4byte*)(x))[5] = \
((u4byte*)(x))[6]= ((u4byte*)(x))[7] = 0; \
switch((((len)+ 63) / 64)) { \
case2: \
((u4byte*)(x))[0]= io_swap(in_key[3]); \
((u4byte*)(x))[1]= io_swap(in_key[2]); \
((u4byte*)(x))[2]= io_swap(in_key[1]); \
((u4byte*)(x))[3]= io_swap(in_key[0]); \
break;\
case3: \
((u4byte*)(x))[0]= io_swap(in_key[5]); \
((u4byte*)(x))[1]= io_swap(in_key[4]); \
((u4byte*)(x))[2]= io_swap(in_key[3]); \
((u4byte*)(x))[3]= io_swap(in_key[2]); \
((u4byte*)(x))[4]= io_swap(in_key[1]); \
((u4byte*)(x))[5]= io_swap(in_key[0]); \
break;\
case4: \
((u4byte*)(x))[0]= io_swap(in_key[7]); \
((u4byte*)(x))[1]= io_swap(in_key[6]); \
((u4byte*)(x))[2]= io_swap(in_key[5]); \
((u4byte*)(x))[3]= io_swap(in_key[4]); \
((u4byte*)(x))[4]= io_swap(in_key[3]); \
((u4byte*)(x))[5]= io_swap(in_key[2]); \
((u4byte*)(x))[6]= io_swap(in_key[1]); \
((u4byte*)(x))[7]= io_swap(in_key[0]); \
}
#else
#defineget_block(x) \
((u4byte*)(x))[0]= io_swap(in_blk[0]); \
((u4byte*)(x))[1]= io_swap(in_blk[1]); \
((u4byte*)(x))[2]= io_swap(in_blk[2]); \
((u4byte*)(x))[3]= io_swap(in_blk[3])
#defineput_block(x) \
out_blk[0]= io_swap(((u4byte*)(x))[0]); \
out_blk[1]= io_swap(((u4byte*)(x))[1]); \
out_blk[2]= io_swap(((u4byte*)(x))[2]); \
out_blk[3]= io_swap(((u4byte*)(x))[3])
#defineget_key(x,len) \
((u4byte*)(x))[4]= ((u4byte*)(x))[5] = \
((u4byte*)(x))[6]= ((u4byte*)(x))[7] = 0; \
switch((((len)+ 63) / 64)) { \
case4: \
((u4byte*)(x))[6]= io_swap(in_key[6]); \
((u4byte*)(x))[7]= io_swap(in_key[7]); \
case3: \
((u4byte*)(x))[4]= io_swap(in_key[4]); \
((u4byte*)(x))[5]= io_swap(in_key[5]); \
case2: \
((u4byte*)(x))[0]= io_swap(in_key[0]); \
((u4byte*)(x))[1]= io_swap(in_key[1]); \
((u4byte*)(x))[2]= io_swap(in_key[2]); \
((u4byte*)(x))[3]= io_swap(in_key[3]); \
}
#endif
#definebeg /*
#defineen */
Файл
#ifndefATACH.H_H #define ATACH.H_H
#defineENCRYPT 0 #define DECRYPT 1
¦include«StdAfx.h» #include «Resource.h» ¦include«winaesDlg.h»
¦defineROTL(x) ( ( (x) «7) | ( (x) „1) )
¦defineR0TL8 (x) ( ( (x) “8) | ( (x) „24) ) ¦define R0TL16(x) ( ( (x) “16)I ( (x) „16) ) ¦define ROTL24 (x) ( ( (x) “24) | ( (x) „8) )
intKeyExpansion(CWinaesDlg* dig, int nb,int nk, BYTE* key); voidEncrypt(CWinaesDlg* dig, BYTE* buff, BYTE* result); void InvDecrypt(CWinaesDlg*dig, BYTE* buff, BYTE* result); void EquDecrypt(CWinaesDlg* dig, BYTE* buff,BYTE* result);
intblockEncrypt(CWinaesDlg* dig, BYTE *input, int inputLen, BYTE* result, intcipher_mode); int blockDecrypt(CWinaesDlg* dig, BYTE *input, int inputLen,BYTE* result, int decrypt_mode, int cipher_mode);
¦endif
ATACH.H.CPP
¦include ¦include ¦include “Rijndael.h»¦include «service.h»
¦defineBPOLY (BYTE) Oxllb ¦define MPOLY (BYTE) 0x101
BYTECo[4]={0x3,0xl,0xl,0x2};
BYTEInvCo[4]={0xB,0xD,0x9,0xE};
intN, Nk, Nb, Nr;
DWORDfkey[120];
DWORDikey[120]; // inverse key
DWORDekey[120]; // equivalent key
BYTEsubbytes[256]; BYTE invsubbytes[256] ;
BYTEshfts[3][4];
staticchar strTmp[260], Tmp[260]; static DWORD s[8];
voidResetShifts() {
for(int i=0; i
for(int j=0; j
if(i==2 && j==3) shfts[i][j]=4; else shfts[i][j]=j;
voidshiftrow(BYTE* row, int n, int direct)
BYTEt; int j ;
if(n)
for(int i=0; i
caseENCRYPT:
t=row[0];
for(j=l; j
caseDECRYPT:
t=row[Nb-l];
for(j = Nb-1; j>0; j--) row[j]=row[j-1] ,
row[0]=t;
break;
voidShifRows(BYTE* s, int direct)
BYTEtemp[8]; int i, j;
for(i=0;i
for(j=0;j
shiftrow(temp, shfts[Nb/2-2][i], direct),
for(j=0;j
staticDWORD pack(BYTE *b)
{
return( (DWORD)b[3]«24) | ( (DWORD)b [2] „16) | ( (DWORD) b [1 ] “8) |(DWORD)b[0],
staticvoid unpack(DWORD a,BYTE *b) {
b[0]= (BYTE)a;
b[l]= (BYTE) (a»8) ;
b[2]= (BYTE) (a«16) ;
b[3]= (BYTE) (a»24); }
staticBYTE xtime(BYTE a, BYTE mod) {
return( ( a & 0x80)? a«lAmod
staticBYTE add (BYTE a, BYTE b) {return алЬ;}
staticBYTE bmul(BYTE a,BYTE b, BYTE mod) {
BYTEt,s, u;
u=b;t=a; s=0;
while(u) {
if(u& 1) эл=Ь;
u»=l;
t=xtime(t,mod);
return(s); }
staticBYTE square(BYTE a, BYTE mod) {
return(bmul(a,a, mod)); }
staticBYTE product(DWORD x,DWORD y, BYTE mod) {
BYTExb [ 4 ], yb [ 4 ] ;
unpack(x,xb);
unpack(y,yb);
returnbmul(xb[0],yb[0], mod)лЬти1(xb[1],yb[1], mod)лЬти1(xb[2],yb[2],mod)лЬти1(xb[3],yb[3], mod); }
staticBYTE finv(const BYTE x, BYTE mod) {
BYTEresult = x;
for(int i=l; i
returnsquare(result, mod); }
BYTESBinvModulo; BYTE SBmulModulo; BYTE SBmulConstl; BYTE SBmulConst2; BYTESBaddConstl; BYTE SBaddConst2;
staticBYTE ByteSubOLD(BYTE x) BYTE result=x;
result= finv( result, SBinvModulo);
result= bmul( SBmulConstl, result, SBmulModulo);
result= add( result, SBaddConstl);
returnresult; }
staticBYTE InvByteSubOLD(BYTE x) BYTE result=x;
result= bmul( SBmulConst2, result, SBmulModulo); result = add(result, SBaddConst2);result = finv( result, SBinvModulo); return result;
voidFillTables(int mode)
for(int i=0; i
if(mode & 1) subbytes[i]= ByteSubOLD(i);
if(mode & 2) invsubbytes[i]= InvByteSubOLD(i)
voidResetTables()
Encrypt(dig,iv, block);
for(1 = k; (1
result[1» 3] = (block[0] & 0x80U) " (1 & 7);
for(j = 0; j
iv[j]=
block[j]= (block[j] " 1) | (block[j + 17);
1]" 1) | ((block[0] & 0x80U) " 7 );
}}
if(OFB_Debug) {
CharStr2HexStr((BYTE*)input,Tmp, Nb*4); sprintf(strTmp," in[%04u]=%s", i, Tmp);dlg->m_eDebug.AddString(strTmp);
CharStr2HexStr((BYTE*)result,Tmp, Nb*4); sprintf(strTmp,«out[%04u]=%s», i, Tmp);dlg->m_eDebug.AddString(strTmp); }
result+= Nb«2;
input+= Nb»2; }
free(iv);break;
caseMODE_CTR:
iv= (BYTE*) malloc(Nb«2); memcpy(iv, cipher_IV, Nb»2);
for(i = 1; i
if(CTR_Debug) {
//CharStr2HexStr((BYTE*)s,Tmp, Nb*4);
sprintf(strTmp,"=CTR AES Nb=%u Nk=%u, block %04u encrypt ======================", Nb, Nk,i);
dlg->m_eDebug.AddString(strTmp);
CharStr2HexStr((BYTE*)iv,Tmp, Nb*4); sprintf(strTmp," IV[%04u]=%s", i, Tmp);dlg->m_eDebug.AddString(strTmp); }
Encrypt(dig,iv, result);
for(j=0; j
increase_counter( iv, Nb«2);
if(CTR_Debug) {
CharStr2HexStr((BYTE*)input,Tmp, Nb*4);
sprintf(strTmp,»in[%04u]=%s", i, Tmp);
dlg->m_eDebug.AddString(strTmp);
CharStr2HexStr((BYTE*)result,Tmp, Nb*4); sprintf(strTmp,«out[%04u]=%s», i, Tmp);dlg->m_eDebug.AddString(strTmp); }
input+= Nb«2; result += Nb»2; }
free(iv);break; default:
returnBAD_CIPHER_STATE; }
return128*numBlocks;