Файл: Теоретические основы разработки клиент серверных приложений на языке Java.pdf
Добавлен: 16.05.2023
Просмотров: 1097
Скачиваний: 11
СОДЕРЖАНИЕ
Глава 1. Теоретические основы разработки клиент серверных приложений на языке Java
1.1 Разработка клиент-серверных приложений
1.2 Особенности разработки приложений на языке Java
Глава 2. Разработка клиент-серверного чата на языке Java
2.1 Технология разработки клиент-сервер приложения.
Введение
Возможность передачи информации на расстоянии интересовала людей всегда. Для того чтобы обмениваться информацией не только при личной встрече, но и на больших расстояниях, люди изобретали всё новые технические средства, протягивали структурированные кабельные сети по всему миру, организовывали почтовые системы, запускали спутники связи. С развитием информационных технологий стали возможным еще более глобальные коммуникации. Сегодня люди с легкостью по всему миру могут обмениваться не только сообщениями, но и графикой и звуковой и другими видами информации. Историческим «докомпьютерным» предшественником чатов, несомненно, являлся телефон. Ни телеграф, ни почта не могли позволить общаться в реальном времени и не были доступны в домашних условиях. Изобретение и распространение телефона вызвало настоящую революцию способах и средствах общения. Возможность поговорить с собеседником в реальном времени на другом континенте казалась настоящим чудом.
Язык Java является основой практически для всевозможных типов сетевых приложений и всеобщим стандартом для разработки встроенных и мобильных приложений, веб-контента, игр, и корпоративного программного обеспечения. В мире насчитывается более девяти миллионов специалистов, разрабатывающих приложения на Java, которая позволяет эффективно разрабатывать, тестировать, внедрять и использовать программное обеспечение [14].
Объект исследования: процесс разработки клиент-серверного приложения на Java.
Предмет исследования: технология разработки клиент-сервера с двухуровневой архитектурой.
Цель исследования: создать технологию разработки клиент-сервера и клиент-серверное приложение на объектно-ориентированном языке Java.
Задачи:
1. Рассмотреть подходы и принципы создания клиент-серверных приложений.
2. Проанализировать особенности разработки клиент-серверных приложений на языке Java.
3. Обосновать технологию разработки клиент-серверных приложений.
4. Разработать клиент-серверное приложение «Chat» на языке Java и протестировать его.
5. Провести экспертную оценку разработанного приложения.
Глава 1. Теоретические основы разработки клиент серверных приложений на языке Java
1.1 Разработка клиент-серверных приложений
Процесс разработки программного обеспечения – набор правил, согласно которой построена разработка программного обеспечения. Приложение можно назвать клиент серверным если оно включает в себя клиент-серверную архитектуру. Разработку клиент-серверного приложения необходимо начинать с выбора архитектуры клиент-сервера.
Архитектура «клиент-сервер» характеризуется наличием по крайне мере двух взаимодействующих, самостоятельных процессов – клиента и сервера.
Процессы, осуществляющие некоторую службу, например, службу базы данных или файловой системы, называются серверами, а процессы, запрашивающие службы у серверов посредством посылки запроса и последующего ожидания ответа от сервера, называются клиентами. Фактически эти процессы – программное обеспечение, которое установлено на разных вычислительных машинах и взаимодействующее между собой через вычислительную сеть посредством сетевых протоколов, но они могут быть расположены также и на одной машине.
Рисунок 1. Двухуровневая архитектура клиент-сервер
Любая архитектура клиент-сервера должна включать в себя три основных компонента:
• ввод и отображение данных (интерфейс с пользователем);
• прикладные функции, характерные для данной предметной области;
• управление информационными ресурсами (базой даных или файловой системой и т.д).
В классической архитектуре клиент-сервер необходимо распределять три основные части приложения по двум физическим программным обеспечениям.
Компания Gartner Group, специализирующейся в области исследования информационных технологий, выводит следующие пять двухзвенных (two-tier, 2-tier) моделей взаимодействия клиента и сервера (двухзвенными они называются потому, что три компонента приложения различным образом аспределяются между двумя узлами) [10].
Рисунок 2. Модели взаимодействия двухзвенной (двухуровневой) архитектуры клиент-сервер
Плюсы многоуровневой архитектуры:
• Масштабируемость (за счёт горизонтальной масштабируемости сервера приложений и мультиплексирования соединений);
• Интегрируемость (за счёт изолированности уровней друг от друга);
• Доступность из веб-браузера или из тонкого клиента (т.к клиент занимается только отображением информации пользователю в удобном виде);
• Высокая безопасность; Минусы:
• Высокая стоимость, дополнительные расходы на администрирование;
• Разработка такой системы гораздо сложнее чем двухзвенной.
Клиент-серверная система должна иметь достойный уровень безопасности информации, хранимой и передаваемой между звеньями системы. Разработчику такой системы нужно добиться согласованной работы средств защиты различных звеньев, и не усложнять жизнь рядовых пользователей, дабы не заставлять их в поисках нужных данных пробираться через множество слоев защиты отвечая на однотипные вопросы: «Стой, кто идет?».
Под безопасностью информационной системы понимается защищенность системы от случайного или преднамеренного вмешательства в нормальный процесс ее функционирования, от попыток хищения (несанкционированного получения) информации и её модификации.
При передаче информации по каналам связи используются криптографические алгоритмы шифрования.
Существует несколько классификаций КА алгоритмов одна из них делит по числу ключей, применяемых в конкретном алгоритме:
• бесключевые КА – не используют в вычислениях никаких ключей;
• одноключевые КА – работают с одним ключевым параметром (секретным ключом);
• двухключевые КА – на различных стадиях работы в них применяются два ключевых параметра: секретный и открытый ключи [1].
Рисунок 4. Классификация криптоалгоритмов защиты информации
Хеширование – это метод криптозащиты, представляющий собой контрольное преобразование информации: из данных неограниченного размера путем выполнения криптографических преобразований вычисляется хэш- значение фиксированной длины, однозначно соответствующее исходным данным.
Таблица 1. Алгоритмы криптографических хеш-функций
|
Алгоритм |
Год создания |
Особенности |
|
MD2 (Message Digest 2 Algorithm) |
1989 |
После MD2 были разработаны MD4, MD5 и MD6 в 1990, 1991 и 2008 годах соответственно. В 2011 году MD2 был официально списан из-за многочисленных успешных криптоатак. Сейчас использовать MD2 рекомендуют только в целях совместимости со старыми программами, которые до сих пор полагаются на него. |
|
SHA-1 (Secure Hash Algorithm 1 |
1995 |
В настоящее время SHA-1 больше нельзя считать надежным, большинство компаний переходят на SHA-2, которые построены на основе структуры Меркла – Дамгарда. После SHA-1 были разработаны SHA-2, SHA-3 в 2002 и 2008 годах соответственно. |
|
Whirlpool |
2000 |
Основан на схеме Миагучи-Пренеля, которая использует блочный шифр с симметричными ключами вместо функции сжатия. Блочный шифр в данном случае является измененным шифром AES, который был приспособлен для этой цели. |
|
Стрибог |
2012 |
Действующий российский криптографический стандарт, определяющий алгоритм и процедуру вычисления хеш-функции. Разработан Центром защиты информации и специальной связи ФСБ России с участием ОАО «ИнфоТеКС» и введенный в действие 1 января 2013 года. |
Симметричное шифрование использует один ключ, с помощью которого производится как шифрование, так и расшифровка с использованием одного и того же алгоритма симметричного шифрования. Этот ключ передается двум участникам взаимодействия безопасным образом до передачи зашифрованных данных.
Симметричное шифрование можно разделить на два вида: блочное и поточное, в некоторых классификациях они не разделяются и считается, что поточное шифрование – это шифрование блоков единичной длины.
Блочное шифрование характеризуется тем, что информация предварительно разбивается на блоки зафиксированной длины (например, 64 или 128 бит). При этом в различных криптографических алгоритмах или даже в разных режимах работы одного и того же алгоритма блоки могут шифроваться как независимо друг от друга, так и «со сцеплением», т. е. когда результат шифрования текущего блока данных зависит от значения предыдущего блока или от результата шифрования предыдущего блока.
|
Алгоритм |
Год создания |
Размер ключа (бит) |
Размер блока (бит) |
Число раундов |
Метод построение шифра |
|
DES |
1977 |
56 + 8 про- верочных |
64 |
16 |
Сеть Фейстеля |
|
3DES |
1978 |
168 |
64 |
48 |
Сеть Фейстеля |
|
BassOmatic |
1989 |
8 до 2048 |
2048 |
от 1 до 8 |
Подстановочно- перестановочная сеть |
|
RC2 |
1989 |
8 до 1024 |
64 |
18 |
Сеть Фейстеля |
|
IDEA |
1991 |
128 |
64 |
9 |
модификация сети Фейстеля |
|
Cobra |
1996 |
8-576 |
128 |
12 |
Сеть Фейстеля |
|
CRYPTON |
1998 |
128/192/256 |
128 |
12 |
Подстановочно- перестановочная сеть |
|
Camellia |
2000 |
128/192 или 256 |
128 |
18/24 |
Сеть Фейстеля |
|
Threefish |
2008 |
256/512/1024 |
256/512/1024 |
72/80 – при ключе в 1024 |
Подстановочно- перестановочная сеть |
|
RC5 |
1994 |
0-2040 |
32/64 или 128 |
1-255 |
Сеть Фейстеля |
Таблица 2. Алгоритмы симметричного блочного шифрования
Поточное шифрование применяется, прежде всего, тогда, когда информацию невозможно разбить на блоки – например, есть некий поток данных, каждый символ которых нужно зашифровать и отправить, не дожидаясь остальных данных, достаточных для формирования блока.
Потоковые шифры на базе сдвиговых регистров активно использовались в годы войны, ещё задолго до появления электроники. Они были просты в проектировании и реализации. Алгоритмы поточного шифрования шифруют данные побитно или посимвольно.
Стойкость таких алгоритмов целиком зависит от внутренней структуры генератора ключевой последовательности. Если генератор выдает последовательность с небольшим периодом, то стойкость системы будет невелика. Напротив, если генератор будет выдавать бесконечную последовательность истинно случайных бит, то получится одноразовый блокнот с идеальной стойкостью [13].
К симметричным поточным алгоритмам относятся:
• A8 – используется для обеспечения конфиденциальности передаваемой по радиоканалу информации в стандарте мобильной сотовой связи GSM. A8 является одним из алгоритмов обеспечения секретности разговора в GSM вместе с A5 и A3.
• Decim – на основе регистра сдвига с линейной обратной связью, запатентован. Был представлен в проекте eSTREAM, где не прошёл дальше третьего этапа.
• Rabbit – разработан с целью использования в программном обеспечении, как обладающий высокой скоростью шифрования. вошл в портфолио eCRYPT, ориентированный на программную реализацию.
• MICKEY – использует нерегулярное тактирование сдвиговых регистров, а также новые методы, обеспечивающие достаточно большой период и псевдослучайность ключевой последовательности и устойчивость к атакам. Текущая версия
алгоритма – 2.0. Она вошла в портфолио eCRYPT, как потоковый шифр для аппаратной реализации.
• SEAL – описан как увеличивающая длину псевдослучайная функция, которая очевидным образом может быть использована для реализации поточного шифрования.
• SOSEMANUK – использует как основные принципы из потокового шифра SNOW 2.0, так и некоторые преобразования, выведенные из блочного шифра SERPENT. Как утверждается, любая длина ключа достигает 128-битной защиты.
• VMPC – разрабатывался в качестве усиленного варианта популярного шифра RC4. Основа шифра – генератор псевдослучайных чисел, базой которого является односторонняя необратимая функция VMPC.
Асимметричное шифрование характеризуется применением двух типов ключей: открытого (k1) – для зашифровывания информации и секретного (k2) – для ее расшифровывания. Открытый ключ вычисляется из секретного: k1=f(k2) Эти алгоритмы шифрования основаны на применении однонаправленных функций. Согласно определению, функция y=f(x) является однонаправленной, если: ее легко вычислить для всех возможных вариантов x и для большинства возможных значений y достаточно сложно вычислить такое значение x, при котором y=f(x) [19].