Быстрая схема аутентификации и обмена ключами, устойчивая к 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 и з