Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOS / Дисциплины программистского цикла.doc
Скачиваний:
53
Добавлен:
09.05.2015
Размер:
1.51 Mб
Скачать

12. Технология «клиент-сервер». Назначение прокси-сервера, сервера приложений, web-сервера и т.П.

Клиент-сервер (англ. Client-server) — сетевая архитектура, в которой устройства являются либо клиентами, либо серверами. Клиентом (front end) является запрашивающая машина (обычно ПК), сервером (back end) — машина, которая отвечает на запрос. Оба термина (клиент и сервер) могут применяться как к физическим устройствам, так и к программному обеспечению.

Прокси-сервер (от англ. Proxy – заместитель) – промежуточный хост сети, который является посредником между клиентом и конечным сервером, содержащим информацию. Прокси-сервер применяется для множества целей:

  • Ускорение работы с Интернетом

  • Обеспечение анонимности при обращении к сетевым ресурсам

  • Изменение собственного IP-адреса

  • Преобразование контента: сжатие трафика, преобразование трафика для мобильных устройств, декодирование шифрованного трафика

  • фильтрация трафика

Сервер приложений (англ. application server) — сервер, исполняющий некоторые прикладные программы. Термин также относится и к программному обеспечению, установленному на таком сервере и обеспечивающему выполнение прикладного ПО. Сервер приложений — сервер, схожий по своей структуре с локальными компьютерами и использующие сетевой ресурс для хранения программы и данных. Функции сервера: хранения данных и кода программы. Функции клиента: обработка данных происходит исключительно на стороне клиента. Плюсы: низкая стоимость разработки; высокая скорость разработки; невысокая стоимость обновления и изменения ПО.

Веб-сервер — это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными. Веб-серверы — основа Всемирной паутины.

Веб-сервером называют как программное обеспечение, выполняющее функции веб-сервера, так и компьютер, на котором это программное обеспечение работает.

Клиенты получают доступ к веб-серверу по URL адресу нужной им веб-страницы или другого ресурса.

13. Барьерная синхронизация. Флаги и управляющие процессы: крупномодульное решение.

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

Общий вид такого алгоритма:

While ( true ) {

Co [ I = 1 to n ]

Код решения задачи i

Oc

}

Такой подход неэффективен, т.к. оператор co порождает n процессов на каждой итерации. Создавать и уничтожать процессы намного дороже, чем реализовать их синхронизацию.

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

Process Worker [ I = 1 to n ] {

While ( true ) {

Код реализации задачи i

Ожидание завершения всех n задач

}

}

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

Барьеры могут понадобиться как в конце, так и на промежуточных стадиях.

Флаги и управляющие процессы

Можно реализовать ожидание завершения всех задач с помощью n переменных, значения которых прибавляются к одному и тому же значению. Последовательность есть целочисленный массив. Arrive[1..n] = ([n] 0)

Когда процесс завершает итерацию он присваивает arrive[i] = 1. Тогда глобальным инвариантом становится предикат count == ( arrive[1]… arrive[n] ).

Если элементы массива arrive хранятся в разных строках КЭШа, то конфликтов обращения к памяти не будет. Соответствующий оператор await можно реализовать следующим образом:

<await( ( arrive[1] + .. + arrive[n] ) == n );>

В этом случае могут быть конфликты обращения к памяти. И снижается эффективность, поскольку сумму вычисляет каждый ожидающий процесс.

Будем использовать дополнительный набор разделяемых переменных и дополнительный процесс Coordinator. Пусть каждый процесс worker вместо суммирования элементов arrive ждет пока не станет истинным единственное логическое значение.

Пусть continue[1..n] – массив целых с начальным значением 0. После того, как worker[i] присваивает 1 элементу arrive[i], он должен ждать, пока значение continue не станет == 1.

Worker[i]:

Arrive[i] = 1;

<await( continue[i] == 1 );>

Coordinator ожидает, пока все элементы массива arrive не станут == 1. После чего присваивает 1 всем элементам массива continue.

Coordinator:

For [ I = 1 to n ] <await( arrive[i] == 1);>

For [I = 1 to n ] continue[i] =1;

Каждый из операторов await здесь можно реализовать в виде while.

Поскольку, для продолжения процесса worker должны быть установлены все элементы массива arrive, процесс может проверять в любом порядке. Переменные arrive и continue обычно называют флагами. Использование флагов в синхронизации предполагает выполнение двух основных условий:

  1. Флаг синхронизации сбрасывается только тем процессом, который ожидает его установки;

  2. Флаг нельзя устанавливать до тех пор, пока неизвестно, что он сброшен.

Первое правило гарантирует, что флаг не будет сброшен, пока процесс не определит, что он установлен. В соответствии с другим правилом один процесс не устанавливает флаг, пока другой его не сбросит.

Иначе возможна взаимоблокировка.

Решение, удовлетворяющее этим условиям, может иметь вид:

Int arrive[1..n] = ( [n] 0), continue[1..n] = ([n] 0)

Process Worker[ I =1 to n ] {

While ( ture ) {

Код решения задачи I;

Arrive[i] = 1;

<await( continue[i] == 1);>

Continue[i] = 0;

}

}

Process Coordinator {

While ( true ) {

For ( I =1 to n ) {

<await( arrive[i] == 1 ); >

Arrive[i] = 0;

}

For ( I = 1 to n ) continue[i] = 1;

}

}

Можно обойтись без процесса Coordinator, если в каждый worker внести часть функций управляющего процесса. Тогда, выстроив их, например, в дерево (список), процессы могли бы сообщать друг другу о завершении работы остальных частей.

Неделимое действие – действие, во время которого параметры среды ( переменные и т.п. ) не изменяются другими процессами.

<> - Последовательность операторов в таких скобках выполняется, как неделимое действие.

Оператор co – oc: Внутри него все конструкции, разделенные // будут выполняться параллельно. Другой вариант: co [ I = 1 to n] – n параллельных запусков.

Взаимоблокировка – тупиковая ситуация, когда 2 процесса ожидают освобождения каких-либо разделяемых между собой ресурсов ( пример, один процесс ждет, когда другой освободит жесткий диск, держа у себя привод оптических дисков. Другой держит у себя жесткий диск и ждет, когда ему дадут привод .)

Мелкомодульное неделимое действие – действие, неделимость которого реализована аппаратно ( пример, inc <регистр>). Крупномодульное – неделимость обеспечивается языковыми конструкциями ( не всегда эффективно осуществимо на практике )

14. Системы шифрования с открытым и закрытым ключом

Шифрование – это сокрытие содержимого, изменение данных таким образом, что знание о том, как вернуть данные в первоначальный вид, доступно только их создателю.

Компоненты шифрования:

  1. алгоритм

  2. ключ

  3. тип шифрования

Симметри́чные криптосисте́мы(также симметричное шифрование, симметричные шифры) — способ шифрования, в котором для (за)шифрования и расшифрования применяется один и тот же криптографический ключ.

Симметричное шифрование:

Ключ при симметричном шифровании называют секретным ключом. Получатель либо знает секретный ключ, либо ключ пересылается вместе с данными.

В настоящее время симметричные шифры — это:

  • блочные шифры. Обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми раундами или проходами. (дополнение – добавление к последнему блоку дополнительной информации с целью привести все блоки к одинаковой длине; сцепление – способ соединение блоков обратно)

  • поточные шифры, в которых шифрование проводится над каждым битом либо байтом исходного (открытого) текста с использованием гаммирования. Поточный шифр может быть легко создан на основе блочного

Достоинства(по сравнению с ассимметричным)

  • скорость (по данным Applied Cryptography — на 3 порядка выше)

  • простота реализации (за счёт более простых операций)

  • меньшая требуемая длина ключа для сопоставимой стойкости

  • изученность (за счёт большего возраста)

Недостатки

  • сложность управления ключами в большой сети. Означает квадратичное возрастание числа пар ключей, которые надо генерировать, передавать, хранить и уничтожать в сети. Для сети в 10 абонентов требуется 45 ключей, для 100 уже 4950, для 1000 — 499500 и т. д.

  • сложность обмена ключами. Для применения необходимо решить проблему надёжной передачи ключей каждому абоненту, так как нужен секретный канал для передачи каждого ключа обеим сторонам.

Виды симметричных шифров:

блочные шифры

  • DES (Data Encryption Standard, стандарт шифрования данных)

  • 3DES (Triple-DES, тройной DES)

  • AES (Advanced Encryption Standard, улучшенный стандарт шифрования)

  • RC2 (Шифр Ривеста (Rivest Cipher))

  • Blowfish

  • Twofish

  • ГОСТ 28147-89

  • NUSH

  • IDEA (International Data Encryption Algorithm, интернациональный алгоритм шифрования данных)

  • CAST (по инициалам разработчиков Carlisle Adams и Stafford Tavares)

  • CRAB

потоковые шифры

  • RC4 (алгоритм шифрования с ключом переменной длины)

  • SEAL (Software Efficient Algorithm, программно-эффективный алгоритм)

  • WAKE (World Auto Key Encryption algorithm, всемирный алгоритм шифрования на автоматическом ключе)

Асимметричное шифрование(шифрование открытым ключом)

Криптографическая система с открытым ключом (или асимметричное шифрование) — система шифрования и/или электронной цифровой подписи (ЭЦП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу, и используется для проверки ЭЦП и для шифрования сообщения. Для генерации ЭЦП и для расшифрования сообщения используется секретный ключ. Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах, в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS), в SSH. Также используется в PGP, S/MIME.

Идея криптографии с открытым ключом очень тесно связана с идеей односторонних функций, то есть таких функций f(x), что по известному x довольно просто найти значение f(x), тогда как определение x из f(x) сложно в смысле теории.

Процесс шифрования состоит из следующих шагов:

  1. Джон создает два ключа: открытый и секретный.

  2. Он оправляет открытый ключ Джейн

  3. Джеин зашифровывает исходное сообщение (открытый текст) с помощью открытого ключа и посылает зашифрованное сообщение Джону

  4. Джон расшифровывает его с помощью закрытого ключа

При асимметричном шифровании следует опасаться спуфинга(имитация соединения, получение несанкционированного доступа) и фишинга(перехват сообщения).

Сценарий взлома ключа может быть следующим:

  1. Джон создает пару открытый и закрытый ключ и пересылает открытый ключ Джеин.

  2. Взломщик прослушивает канал связи и перехватывает открытый ключ. Если открытый ключ общедоступен, то перехватывать ключ не требуется

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

  4. Джеин шифруется данные и отправляет их Джону

  5. Взломщик перехватывает сообщение и расшифровывает его своим закрытым ключом. Если Джон получит сообщение, то он не сможет расшифровать его своим закрытым ключом, если взломщик не хочет вызвать подозрения, то он может зашифровать полученные данные открытым ключом Джона и переслать тому зашифрованный его открытым ключом текст. Поэтому в системах шифрования с открытым ключом необходимы системы аутентификации ключей. Еще одна форма атаки — вычисление закрытого ключа, зная открытый. Криптоаналитик знает алгоритм шифрования Ee, анализируя его, пытается найти Dd. Этот процесс упрощается, если криптоаналитик перехватил несколько криптотекстов.

Схема шифрования с открытым ключом

Пусть K — пространство ключей, а e и d — ключи шифрования и расшифрования соответственно. Ee — функция шифрования для произвольного ключа eK, такая что:

Ee(m) = c

Здесь cC, где C — пространство шифротекстов, а mM, где M — пространство сообщений.

Dd — функция расшифрования, с помощью которой можно найти исходное сообщение m, зная шифротекст c :

Dd(c) = m

{Ee: eK} — набор шифрования, а {Dd: dK} — соответствующий набор для расшифрования. Каждая пара (E,D) имеет свойство: зная Ee, невозможно решить уравнение Ee(m) = c, то есть для данного произвольного шифротекста cC, невозможно найти сообщение mM. Это значит, что по данному e невозможно определить соответствующий ключ расшифрования d. Ee является односторонней функцией.

Криптография с несколькими открытыми ключами

Пусть есть 3 ключа KA, KB, KC, распределенные так, как показано в таблице.

Лицо

Ключ

Алиса

KA

Боб

KB

Кэрол

KC

Дэйв

KA, KB

Эллен

KB, KC

Франк

KA, KC

Тогда Алиса может зашифровать сообщение ключом KA, а Эллен расшифровать ключами KB, KC, Кэрол — ключом KC, а Дэйв расшифровать ключами KA, KB. Если Дэйв зашифрует сообщение ключом KA, то сообщение сможет прочитать Эллен, если ключом KB, то его сможет прочитать Франк, если же обоими ключами KA и KB, то сообщение прочитает Кэрол. По аналогии действуют и другие участники. Таким образом, если используется одно подмножество ключей для шифрования, то для расшифрования требуются оставшиеся ключи множества. Такую схему можно использовать для n ключей.

Шифруется ключом

Расшифровывается ключом

KB и KC

KA

KA и KC

KB

KA и KB

KC

KC

KA, KB

KA

KB, KC

B

KA, KC

Преимущество этой схемы заключается в том, что для её реализации нужно только одно сообщение и n ключей (в схеме с n агентами). Если передаются индивидуальные сообщения, то есть используются отдельные ключи для каждого агента (всего n ключей) и каждого сообщения, то для передачи сообщений всем различным подмножествам требуется 2n − 2 ключей.

Недостатком такой схемы является то, что необходимо также широковещательно передавать подмножество агентов (список имён может быть внушительным), которым нужно передать сообщение. Иначе каждому из них придется перебирать все комбинации ключей в поисках подходящей. Также агентам придется хранить немалый объём информации о ключах

Алгоритмы криптосистемы с открытым ключом можно использовать

  • Как самостоятельные средства для защиты передаваемой и хранимой информации

  • Как средства распределения ключей. Обычно с помощью алгоритмов криптосистем с открытым ключом распределяют ключи, малые по объёму. А саму передачу больших информационных потоков осуществляют с помощью других алгоритмов.

  • Как средства аутентификации пользователей.

Преимущества

  • Преимущество асимметричных шифров перед симметричными шифрами состоит в отсутствии необходимости предварительной передачи секретного ключа по надёжному каналу.

  • В симметричной криптографии ключ держится в секрете для обеих сторон, а в асимметричной криптосистеме только один секретный.

  • При симметричном шифровании необходимо обновлять ключ после каждого факта передачи, тогда как в асимметричных криптосистемах пару (E,D) можно не менять значительное время.

  • В больших сетях число ключей в асимметричной криптосистеме значительно меньше, чем в симметричной.

Недостатки

  • Преимущество алгоритма симметричного шифрования над несимметричным заключается в том, что в первый относительно легко внести изменения.

  • Хотя сообщения надежно шифруются, но «засвечиваются» получатель и отправитель самим фактом пересылки шифрованного сообщения.

  • Несимметричные алгоритмы используют более длинные ключи, чем симметричные.

  • Процесс шифрования-расшифрования с использованием пары ключей проходит на два-три порядка медленнее, чем шифрование-расшифрование того же текста симметричным алгоритмом.

  • В чистом виде асимметричные криптосистемы требуют существенно больших вычислительных ресурсов, потому на практике используются в сочетании с другими алгоритмами.

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

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

Виды асимметричных шифров

  • RSA (Rivest-Shamir-Adleman, Ривест — Шамир — Адлеман)

  • DSA (Digital Signature Algorithm)

  • Elgamal (Шифросистема Эль-Гамаля)

  • Diffie-Hellman (Обмен ключами Диффи — Хелмана)

  • ECC (Elliptic Curve Cryptography, криптография эллиптической кривой)

  • ГОСТ Р 34.10-2001

  • Rabin

  • Luc

  • McEliece