Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOSv1_3.docx
Скачиваний:
56
Добавлен:
30.03.2015
Размер:
1.9 Mб
Скачать
  1. Криптография как наука. Основные понятия и определения

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

  • Неавторизованный доступ к информации

  • Неавторизованное изменение информации

  • Неавторизованный доступ к сетям и другим сервисам

  • Другие сетевые атаки, такие как повтор перехваченных ранее транзакций и атаки типа "отказ в обслуживании"

Криптография как наука стала уже формироваться в начале нашей эры. Основоположником можно считать Цезаря, который в своих письмах применял систему шифрования информации. Сильный толчок в развитии криптографические методы защиты информации получили во время I-й и II-й мировых войн. С развитием компьютерной техники криптографические алгоритмы все более и более усложняются.

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

Всеми этими проблемами защиты информации занимается специальная наука – криптология (kryptos – тайный, logos – наука).

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

Основная цель криптографических методов это передача и хранение важной информации в зашифрованном виде.

Основные понятия

Криптография - наука о математических методах обеспечения конфиденциальности и аутентичности информации.

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

Аутентичность - свойство докуемента(текста и т.д.) которое позволяет достоверно

определить, что сообщение создано конкретным автором

Целостность - неизменность информации в процессе ее передачи или хранения.

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

Открытый (исходный) текст – сообщение до шифрования и после расшифрования.

Закрытый (шифртекст) текст – сообщение после криптографического преобразования.

Ключ – информация, параметр криптографического преобразования, позволяющий выполнять шифрование (расшифрование)

Криптография включает следующие разделы:

  1. симметричные схемы;

  2. асимметричные схемы;

  3. хеш-функции;

  4. электронная цифровая подпись (ЭЦП)

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

К современным криптосистемам выдвигают следующие требования:

  1. Высокая скорость работы

  2. Возможность аппаратной реализации

  3. Строгое математическое обоснование стойкости криптосхемы

Симметричные схемы: ГОСТ 28147-89, AES, DES

Асимметричные схемы: RSA, Эль-Гамаль

Хеш-функции: MD5, SHA-1, ГОСТ Р 34.11-94

Электронно-цифровая подпись: DSA,ГОСТ Р 34.10-2001

  1. Разработка ПО (Основные понятия и принципы разработки ПО; архитектура ПО; структурная разработка; объектно-ориентированный анализ и разработка; компонентно-базированная разработка; разработка ПО для повторного использования)

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

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

Частотный принцип

Принцип основан на выделении в алгоритмах и данных особых групп по частоте использования. Для действий, наиболее часто встречающихся при работе программ, создаются  условия их быстрого выполнения. К часто используемым данным  обеспечивается наиболее быстрый доступ. «Частые» операции стараются  делать более короткими. Следует отметить, что лишь не более 5 %  операторов программы оказывают ощутимое влияние на скорость  выполнения программы. Этот факт позволяет значительную часть  операторов программы кодировать без учета скорости вычислений,  обращая основное внимание при этом на «красоту» и наглядность текстов.

Принцип модульности

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

Принцип функциональной избирательности

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

Принцип генерируемости

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

Принцип функциональной избыточности

Этот принцип  учитывает возможность проведения одной и той же работы различными средствами. Особенно важен учет этого принципа при разработке пользовательского интерфейса для выдачи одних и тех же данных разными способами вызова из-за психологических различий в  восприятии информации.

Принцип «по умолчанию»

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

Архитектура программного обеспечения — это структура программы или вычислительной системы, которая включает программные компоненты, видимые снаружи свойства этих компонентов, а также отношения между ними.

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.

В соответствии с данной методологией:

  1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:

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

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

    3. цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

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

Разработка программы ведётся пошагово, методом «сверху вниз».

Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

Теорема о структурном программировании:

Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и может быть дополнительных логических переменных (флагов). Эта теорема была сформулирована итальянскими математиками К.Бомом и Дж. Якопини в 1966 году и говорит нам о том, как можно избежать использование оператора перехода goto.

объектно-ориентированный анализ и разработка – данная неведомая фигня толком нигде не описана. Про ООП написано в 5м билете.

Компонентно-ориентированное программирование (далее КОП) — парадигма программирования, ключевой фигурой которой является компонент.

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

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

Для не оч программистов:

По сути КОП является наследником ООП (это НЕ значит что вместо ООП теперь используется КОП), но с отличиями:

  • Компонент — «независимый модуль программного кода, предназначенный для повторного использования и развертывания».

  • Может содержать «множественные классы».

  • Как правило, независим от конкретного языка.

Для тру задротов:

КОП = ООП + модульность (включая упрятывание информации и позднее связывание модулей, т.е. возможность подгружать необходимые модули в процессе выполнения программы, а не заранее, как это обычно делается в старых системах программирования) + безопасность (статический контроль типов переменных и автоматическое управление памятью) - наследование реализации через границы модулей.

Последняя строчка означает, что в КОП запрещено наследование от типов, реализованных в других модулях; наследовать можно только абстрактным, чисто интерфейсным типам 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]