Быстрая схема аутентификации и обмена ключами, устойчивая к DDoS-атаке

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование




еров устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений. Существует несколько реализаций языка C++ - как бесплатных, так и коммерческих.

6.3 Assembler

В данном проекте не будет использоваться непосредственно assembler, но будут использованы небольшие вставки. Приведем краткое описание этого языка для того что бы понять iем имеем дело.

Assembler - машинно-ориентированный язык программирования низкого уровня с командами, обычно соответствующими командам машины [9]. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации. Кроме того, он позволяет использовать различные системы iисления для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления).

Данный язык обычно используется в тех случаях когда критически важны быстродействие или объем используемой памяти. С его помощью можно провести, например, оптимизацию критичных к скорости участков программ написанных на языках высокого уровня.

Одним из способов связать ассемблер с другими языками как раз является вставка с помощью специальных директив языка высокого уровня. Такой подход удобен для несложных преобразований данных, но полноценного ассемблерного кода, с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых языком высокого уровня, с его помощью сделать невозможно.

6.4 OpenSSL

OpenSSL - криптографический пакет с открытым исходным кодом. Данное программное средство основано на библиотеке SSLeay, написанной Эриком Янгом (Eric A. Young) и Тимом Хадсоном (Tim Hudson)[9]. OpenSSL лицензируется по "двойной лицензии" OpenSSL License и SSLeay License, и требует чтобы фраза "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (">)" содержалась в рекламных материалах и при последующем распространении. За исключение приведенных выше аспектов лицензия позволяет свободно использовать OpenSSL в любых как коммерческих так и не коммерческих целях[12].

OpenSSL включает в себя набор криптографических библиотек, в которых реализованы различны алгоритмы симметричного шифрования, криптография с открытым ключом, работа с сертификатами, криптографические хеш функции и генератор псевдослучайных чисел.

1Симметричные алгоритмы: Blowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES, ГОСТ 28147-89.

2Криптография с открытым ключом: DSA, RSA, Diffie-Helman key exchange, ГОСТ Р 34.10-2001.

3Сертификаты: x509, x509v3

4Коды аутентификации и хеш функции: hmac, md2, md4, md5, mdc2, ripemd, sha.

5Вспомогательные функции: err, threads, rand, PENSSL_VERSION_NUMBER

6Функции кодирования входных\выходных данных: asn1, bio, evp, pem, pkcs7, pkcs12

6.5 Описание используемых алгоритмов

6.5.1 MD5

MD5 - 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом в 1991 году[9]. Алгоритм прост в реализации и предназначен для создания отпечатка (fingerprint) или цифровой подписи для сообщений произвольной длины. Предполагается, что для создания двух сообщений с одинаковыми сигнатурами потребуется порядка 2^64 операций, а для подбора сообщения по имеющейся сигнатуре - порядка 2^128 операция[13].

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в b. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Для создания цифровой подписи выполняется процесс из 5 описанных ниже этапов.

1Для начала сообщение дополняется до размера кратного 448 по модулю 512. выравнивание происходит даже если длинна уже кратна этому значению. Для этого в конец сообщения добавляют бит равный 1 а затем добавляют биты со значением 0 пока не будет достигнут нужный размер.

2В оставшиеся 64 бита дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта. Если длина превосходит , то дописывают только младшие биты. После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.

3Для раiета цифровой подписи используется буфер на 4 слова (A,B,C,D). каждое из слов A, B, C, D представляет собой 32-битовый регистр. Этим регистрам задаются соответствующие начальные значения.

4На данном этапе определяются 4 вспомогательные функции каждая из которых принимает три 32-битовых слова в качестве аргументов и возвращает одно 32-битовое слово.

F(X,Y,Z) = XY v not(X) Z(X,Y,Z) = XZ v Y not(Z)(X,Y,Z) = X xor Y xor Z(X,Y,Z) = Y xor (X v not(Z))

Определяется 64-элементная таблица T[1...64], построенная с использованием синусоидальной функции (sine function). Выровненные данные разбиваются на блоки (слова) по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: [abcd k s i], определяемый как

где X - блок данных. X[k] = M [n * 16 + k], где k - номер 32-битного слова из n-го 512-битного блока сообщения, и - циклический сдвиг влево на бит полученного 32-битного аргумента.

5Сигнатура сообщения выводится как A, B, C, D (т. е., мы начинаем вывод с младшего байта A и з