Программная реализация библиотеки классов системы RSA и ее применение на практике

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Факультет ИТ

Базовая кафедра № 244








Курсовая работа

Дисциплина: Объектно-ориентированное программирование

По теме «Программная реализация библиотеки классов системы RSA и ее применение на практике»



Студент: Минаев Сергей Кириллович

Учебная группа: ИТО-2-09

Преподаватель: Петренко А.А.

Дата выполнения: 06.12.11







Москва, 2011

ЗАДАНИЕ

на курсовую работу


по дисциплине: Объектно-ориентированное программирование

Студент: Минаев Сергей Кириллович Учебная группа: ИТО-2-09

ТЕМА: Программная реализация библиотеки классов системы RSA и ее применение на практике.

. Перечень подлежащих разработке вопросов:

.1. Основные термины, принцип работы и уязвимости метода

.2. Обработка коэффициентов для ключа и вычисление переменных

.3. Обработка входящего текста и кодирование

.4. Обработка закодированного текста и раскодирование

. Перечень графических материалов:

.1. Алгоритм работы RSA

.2. Алгоритм цифровой подписи

.3. Внешний вид программы

.4. Программа с сгенеренными ключами

.5. Получение кодированного текста

.6. Расшифровка кода

. Стадии и этапы разработки курсовой работы

.1. Согласование, утверждение технического задания5 сем. 4 нед.

.2. Уточнение и согласование с руководителем курсовой работы состава программной реализации и исходных данных5 сем. 5 нед.

.3. Оформление пояснительной записки5 сем. 15 нед.

.4. Опытная эксплуатация программного изделия5 сем. 15 нед.

.5. Защита курсовой работы5 сем. 15 нед.

Исполнитель


Содержание


1. Введение

. Основы криптографических систем

. Алгоритм создания открытого и секретного ключей

.1 Алгоритм

.2 Алгоритм подробнее, теоретическая часть

. Схема передачи шифрованной информации

.1 Алгоритм для информации

.2 Алгоритм для цифровой подписи

. Пример действия системы

. Использование RSA в наше время

.1 Надежность RSA

.2 Попытки взлома RSA

. Функция Эйлера

. Оценка системы RSA

.1 Преимущества системы RSA

.2 Недостатки использования RSA

.3. Уязвимости RSA.

. Программная часть

.1 Библиотека RSA

.1.1 Класс Program.cs

.1.2 Класс MainForm.cs

.2 EvklidLib

.2.1 EvklidLib.cs

9.3 EncodeDecode

.3.1 Encoder.cs

.3.2 EncoderBase.cs

.3.3 IEncoder.cs

.3.4 Key.cs

. Пример работы программы

. Вывод

Приложение А

Приложение Б

Приложение В

Приложение Г

Замечания по выполнению курсовой работы

1. Введение


Опубликованная в ноябре 1976 года статья Уитфилда Диффи и Мартина Хеллмана «Новые направления в криптографии» перевернула представление о криптографических системах, заложив основы криптографии с открытым ключом. Разработанный впоследствии алгоритм Диффи-Хеллмана-Меркле позволял двум сторонам получить общий секретный ключ, используя незащищенный канал связи. Однако этот алгоритм не решал проблему аутентификации (подтверждение подлинности ключа). Без дополнительных средств, один из пользователей не мог быть уверен, что он обменялся ключами именно с тем пользователем, который ему был нужен.

Изучив эту статью, трое ученых Рональд Райвест (Ronald Linn Rivest), Ади Шамир (Adi Shamir) и Леонард Адлеман (Leonard Adleman) из Массачусетского Технологического Института (MIT) приступили к поискам математической функции, которая бы позволяла реализовать сформулированную Уитфилдом Диффи и Мартином Хеллманом модель криптографической системы с открытым ключом. После работы над более чем 40 возможными вариантами, им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел, получивший впоследствии название RSA. Система была названа по первым буквам фамилий её создателей.

2. Основы криптографических систем


Криптографические системы с открытым ключом используют так называемые однонаправленные функции, которые обладают следующим свойством:

Если известно x, то вычислить f(x) относительно просто.

Если известно y=f(x), то для x нет простого пути вычисления.

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

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

В криптографической системе с открытым ключом каждый участник располагает как открытым ключом (англ. public key), так и секретным ключом (англ. secret key). Каждый ключ - это часть информации. В криптографической системе RSA каждый ключ состоит из пары целых чисел. Каждый участник создаёт свой открытый и секретный ключ самостоятельно. Секретный ключ каждый из них держит в секрете, а открытые ключи можно сообщать кому угодно или даже публиковать их. Открытый и секретный ключи каждого участника обмена сообщениями образуют «согласованную пару» в том смысле, что они являются взаимно обратными.

Вывод ко второй главе: в данной главе мы ознакомились с историей создания RSA и некоторыми общими положениями, чтобы проще понять тонкости работы с данными методом шифрования.

3. Алгоритм создания открытого и секретного ключей


.1 Алгоритм

ключи генерируются следующим образом:

) Выбираются два случайных простых числа p и q заданного размера (например, 1024 бита каждое).

) Вычисляется их произведение n = pq, которое называется модулем.

) Вычисляется значение функции Эйлера от числа n:



) Выбирается целое число e, такое чтобы взаимно простое со значением функции . Обычно в качестве e берут простые числа, содержащие небольшое количество единичных битов в двоичной записи, например, простые числа Ферма 17, 257, или 65537. Число e называется открытой компонентой. Маленькие значение e (такие как 3) значительно ослабляют безопасность RSA (см. Уязвимости RSA.).

) Вычисляем число d, которое удволетворяет условию , где k - некоторое целое число (неважно какое, ибо d будет находиться в секретном ключе). Оно называется секретной экспонентой. Чаще всего считается при помощи расширенного алгоритма Евклида.

) Пара P = (e,n) публикуется в качестве открытого ключа RSA (англ. RSA public key).

) Пара S = (d,n) играет роль секретного ключа RSA (англ. RSA private key) и держится в секрете.


3.2 Алгоритм подробнее, теоретическая часть


Для защищенности информации, p и q не должны быть близкими числами, иначе их можно найти, используя метод факторизации Ферма. (Метод факторизации Ферма натурального числа n состоит в поиске таких целых чисел x и y, что x2 ? y2 = n, что ведет к разложению .) Но, так как числа выбираются отдельно, вероятность попадания их в небольшой интервал становится крайне мала (см. Уязвимости RSA.)

Функции Эйлера посвящен отдельный раздел работы (см. Функция Эйлера.)

Расширенный алгоритм Евклида - это частный случай алгоритма Евклида. Этот алгоритм представляет собой схему нахождения ряда чисел, начинающегося с заданных a и b, и последующих, с помощью правила - каждое следующее число, получается как остаток от деления предыдущего на предыдущее:



То есть:

= bq0 + r1= r1q1 + r2= r2q2 + r3

? 2 = rk ? 1qk ? 1 + rk

? 1 = rnqn


Расширенный алгоритм Евклида рассчитывается по другим формулам:

= a + b( - q0)= b ? r1q1 = a( ? q1) + b(1 + q1q0)(a,b) = rn = as + bt


где s и t - целые. Это представление наибольшего общего делителя называется соотношением Безу, а числа s и t - коэффициентами Безу. Соотношение Безу является ключевым в доказательстве леммы Евклида и основной теоремы арифметики.

Вывод к третьей главе: в этой главе мы обозначили основные формулы для создания RSA ключей шифрования.

4. Схема передачи шифрованной информации


4.1 Алгоритм для информации


Для передачи информации от пользователя В к пользователю А используется следующий алгоритм:

Для передачи некоторого сообщения М, требуется взять открытый ключ (e,n) стороны А.

Перекодировать сообщение М в вид:



Принимающая сторона принимает зашифрованную информацию.

Применив свой собственный секретный ключ (d,n), расшифровать данные по формуле:



Оба уравнения (1) и (2) основаны на самом принципе системы RSA - за счет того, что открытый и секретный ключи взаимно обратны, а значит (где D - это дешифровка, E - шифровка, М - сообщение, а P и S - открытый и секретный ключ):



В общем, алгоритм можно изобразить так:

Рис. 1 Алгоритм работы RSA


4.2 Алгоритм для цифровой подписи


Схема остается схожей для работы с цифровыми подписями.

Предположим, стороне А нужно отправить информацию стороне В, с цифровой подписью.

Алгоритм:

Сторона А создает цифровую подпись с помощью своего секретного ключа



Затем она передает пару , состоящую из сообщения и подписи.

Сторона В принимает пару, с помощью открытого ключа стороны А расшифровывает подпись стороны А, по формуле:



И проверяет ее истинность или ложность.

В общем, алгоритм можно представить как:

Рис. 2 Алгоритм цифровой подписи


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

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

5. Пример действия системы


ЭтапОписание операцииРезультат операцииГенерация ключей <#"justify" height="18" src="doc_zip23.jpg" />вычислить модульвычислить функцию Эйлера <#"justify" height="21" src="doc_zip25.jpg" />выбрать открытый показатель <#"justify" height="14" src="doc_zip26.jpg" />вычислить секретный показатель <#"justify" height="15" src="doc_zip27.jpg" />опубликовать открытый ключсохранить секретный ключШифрование <#"justify" height="14" src="doc_zip30.jpg" />вычислить шифротекстРасшифрованиевычислить исходное сообщение

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

Время, необходимое для шифрования с использованием быстрого возведения в степень, пропорционально числу единичных бит в e.

6. Использование RSA в наше время


.1 Надежность RSA


На 2009 год система шифрования на основе RSA считается надёжной, начиная с размера в 1024 бита.


6.2 Попытки взлома RSA


В этом году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта RSA длиной 768 бит. По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только RSA-ключи длиной 1024 бита и более. Причём от шифрования ключом длиной в 1024 бит стоит отказаться в ближайшие три-четыре года, до 2013.

На первый шаг (выбор пары полиномов степени 6 и 1) было потрачено около полугода вычислений на 80 процессорах, что составило около 3 % времени, потраченного на главный этап алгоритма (просеивание), который выполнялся на сотнях компьютеров в течение почти двух лет. Если интерполировать это время на работу одного процессора AMD Opteron 2.2ГГц с 2Гб памяти, то получилось бы порядка 1500 лет. Обработка данных после просеивания для следующего ресурсоёмкого шага (линейной алгебры) потребовалось несколько недель на малом количестве процессоров. Заключительный шаг после занял не более 12 часов.

Расшифровка проводилась на нескольких раздельных кластерах и длилось чуть менее 4 месяцев. При этом размер разреженной матрицы составил 192 796 550х192 795 550 при наличии 27 795 115 920 ненулевых элементов (то есть в среднем 144 ненулевых элементов на строку). Для хранения матрицы на жёстком диске понадобилось около 105 гигабайт. В то же время понадобилось около 5 терабайт сжатых данных для построения данной матрицы.

В итоге группе удалось вычислить 232-цифровой ключ, открывающий доступ к зашифрованным данным.

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

Вывод к шестой главе: в этой главе было рассмотрено, что система RSA имеет свои недостатки, но в современных реалиях (на конец 2011 года) она считается надежной и недоступной для взлома, при соблюдении особых правил генерации ключа.

7. Функция Эйлера


Функция Эйлера , где n - натуральное число, равна количеству натуральных чисел, не больших n и взаимно простых с ним. Названа в честь Эйлера, который впервые использовал ее в своих работах по теории чисел.

У любого числа n существуют такие

=p0 * p1 * … * pk


Тогда функция


,


где ?i - степень рассматриваемого множителя в разложении n - называется функцией Эйлера.


Некоторые ее значения:

+0+1+2+3+4+5+6+7+8+90+11224264610+4104126881661820+81210228201218122830+830162016241236182440+1640124220242246164250+2032245218402436285860+1660303632482066324470+2470247236403660247880+3254408224644256408890+24724460467232964260

Таким образом, когда p и q простые, то и n простое, причем n=p*k.

Значит можно использовать функцию Эйлера, которая переходит к знакомому нам виду:



Результат функции можно найти с помощью кода, указанного в Приложении А.

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

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

8. Оценка системы RSA


.1 Преимущества системы RSA


Преимуществами системы RSA являются:

) Система позволяла проверить не только правильность ключа, но и быть уверенным, что обмен произошел именно с тем человеком, который был нужен пользователю.

) Проверить подпись может каждый имеющий сообщение и в любой момент. Достаточно обратиться за открытым ключом пользователя и установить подлинность подписи или сообщения.

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


8.2 Недостатки использования RSA


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

) Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2 ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным ключом (сеансовый ключ), а с помощью RSA шифруют лишь этот ключ. Такой механизм имеет потенциальные уязвимости ввиду необходимости использовать криптостойкий генератор случайных чисел для формирования случайного сеансового ключа симметричного шифрования и эффективно противостоящий атакам симметричный криптоалгоритм.

8.3 Уязвимости RSA


) Как было сказано выше, на случайные простые числа и накладываются следующие дополнительные ограничения:

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

Необходимо выбирать «сильные» простые числа, чтобы нельзя было воспользоваться p-1 методом Полларда (алгоритм разложения натурального числа N на простые множители. Он предназначен для нахождения простых делителей p, у которых p ? 1 хорошо раскладывается на множители, то есть имеет небольшой максимальный простой делитель.). «Сильными» простыми числами называют простые числа, если оно больше, чем среднее арифметическое из предыдущего и следующего простого числа. То есть:



Для примера - рассмотрим ряд простых чисел 79, 97, 101.

> (79+101)/2 = 90, а значит 97 - «сильное» простое число.

) Если, чтобы избежать генерирования различных модулей для каждого пользователя, защищённый сервер использует единый n=p*q для шифрования всех сообщений. Сторона A использует этот сервер для получения сообщения M. Не смотря на видимую неприступность, узнать сообщение стороны А можно, используя свои чтобы разложить модуль n и, зная e, вычислить секретную экспоненту d.

) В 1990 году Михаэль Винер (Michael J. Wiener) показал, что в случае малого значения d возможен взлом системы RSA, а именно - если, чтобы увеличить скорость расшифрования (или создания цифровой подписи), было уменьшено число ненулевых битов двоичного представления секретной экспоненты, то существует эффективный случай вычислить d.

) Чтобы увеличить скорость шифрования и проверки цифровой подписи, используют малые значения открытой экспоненты. Наименьшее из них e=3. Однако, чтобы повысить криптоустойчивость алгоритма RSA, рекомендовано использовать .

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

В общем случае, если все открытые экспоненты равны , противник может восстановить при .

Этот тип атаки был назван в честь Хастада (Johan Hastad), который показал, что в этом случае, противник может восстановить сообщение М при достаточном количестве пользователей.

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

Так же возможно несколько атак на систему RSA при малых е, в связи с тем, что чем меньше е, тем меньше требуется времени на взлом системы при некоторых начальных условиях.

) Атака из области теории - с помощью квантового компьютера, если он будет построен, можно будет взломать RSA, так как квантовый алгоритм Шора позволяет осуществить факторизацию больших чисел за достаточно короткое время. Разложив модуль n на простые множители, можно будет вычислить секретный показатель d.

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

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

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

9. Программная часть


Проект реализован на языке программирования C#.

Реализация программы состоит из трех библиотек.


.1 Библиотека RSA


.1.1 Класс Program.cs

Помимо формы, закрепленной к данной библиотеке, в нем есть класс Program.cs. Состоит он из системных функций, созданных автоматически.


.1.2 Класс MainForm.cs

Форма данного класса (и программы в целом) выглядит вот таким образом:


Рис. 3 Внешний вид программы


Код класса MainForm состоит из переменных, необходимых для расчета кодов, а так же функций:- функция открытия документа- функция поиска наибольшего общего делителя- функция поиска числа d/e, взаимно простого указанному.- функция проверки делителей p и q. Если у них есть некий делитель, отличный от единицы - данные числа не подходят для алгоритма._Click - функция обработки введеных p и q, поиска остальных чисел для ключей кодирования

СlearButton_Click - функция очистки данных ключа_Click - основная (внешняя) функция шифрования_Click - основная (внешняя) функция дешифрования


9.2 EvklidLib


Библиотека для реализации метода Евклида


.2.1 EvklidLib.cs

Функции в классе:- поиск подходящего числа по методу Евклида.


9.3 EncodeDecode


Библиотека реализующая конкретное кодирование данных.


.3.1 Encoder.cs

Класс кодирования (посредник)

В данном классе есть функции:- функция, которая кодирует строку символов (функция посредник)

Decode - функция, которая раскодирует строку символов (функция посредник)


.3.2 EncoderBase.cs

Класс кодирования, основной.

Функции:- функция кодирования и раскодирования пришедшего снаружи массива символов. Работает на основе ключа.- функция обработки кода-числа на базе ключа, основная функция метода RSA


.3.3 IEncoder.cs

Интерфейс класса Encode Decode.

криптографический шифрование цифровой передача

9.3.4 Key.cs

Класс ключа. Состоит из функции Key, работающей с данными и данные E/D и N.

10. Пример работы программы


Сначала задаются числовые коэффициенты p и q (для примера, взяты стандартные) - активируются кнопки «Шифровать» и «Дешифровать».


Рис. 4 Программа с сгенеренными ключами


После этого, в поле «Исходный документ» вводится некий текст, или открывается через кнопку «Открыть документ…». Далее нажимается кнопка шифровать. В полях «Результат шифрования» выводятся полученные коды.

Рис. 5 Получение кодированного текста


Расшифровка кодов происходит по нажатию кнопки «Дешифровать»


Рис. 6 Расшифровка кода

11. Вывод


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

Список использованных источников


1.Нильс Фергюсон, Брюс Шнайер Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems - М.: «Диалектика», 2004 г.

.Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C - М.: Триумф, 2002 г.

3. Статья в Википедии RSA (<#"justify">Приложение А

.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.IO;System.Numerics;EncodeDecode;EvklidLib;RSA

{

public partial class MainForm : Form

{

public long P, Q, D, E, M, N = 0;// коэф. расчитанные для ключей

string Source, fn = "";

public long[] cipherText;

public MainForm()

{

InitializeComponent();

label1.Visible = false;

#region FileDialog Settings

openFileDialog1.DefaultExt = "txt";

openFileDialog1.Filter = "Текстовые документы|*.txt";

openFileDialog1.Title = "Открыть документ";

openFileDialog1.Multiselect = false;

#endregion

}

/// <summary>

/// Основная функция открытия документа

/// </summary>

private void OpenDocument() // Функция открытия документа

{

openFileDialog1.FileName = string.Empty;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

fn = openFileDialog1.FileName;enc = Encoding.GetEncoding(1251);

try

{

// Чтение файла

StreamReader sr = new StreamReader(fn, enc); //Открывает поток для чтения файла

SourceTextBox.Text = sr.ReadToEnd(); // Считываем документ до конца

SourceTextBox.SelectionStart = SourceTextBox.TextLength;

sr.Close(); // Закрываем поток

}

catch (Exception exc) // Отлавливание ошибки

{

MessageBox.Show("Ошибка чтения файла.\n"

+ exc.ToString(), "Error!",

MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

}

/// <summary>

/// Функция обработки клавиши "Открыть документ"

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void button3_Click(object sender, EventArgs e)

{

OpenDocument();

TextBox1Length.Text = Convert.ToString(SourceTextBox.TextLength);

} // Кнопка "Открыть Документ"

/// <summary>

/// Поиск наибольшего общего делителя для двух чисел

/// </summary>

/// <param name="x">Первое число</param>

/// <param name="y">Второе число</param>

/// <returns>Возвращает НОД для двух чисел (единица учитывается как НОД)</returns>

private static long gcd(long x, long y)

{

long g;

g = y;//создается временное число g равное у

while (x > 0) // Пока остаток не станет равен нулю (то есть, деление прошло нацело)

{

g = x; //в g записывается y

x = y % x;//От числа х "отрезается" лишняя часть, остается только остаток

y = g;//в у переписывается этот остаток, для следующей проверки

}

return g;//когда деление прошло нацело, в g хранится НОД для двух чисел

/// <summary>

/// Выборка числа d (e), взаимно простого к указанному

/// </summary>

/// <param name="m">Заданное число, относительно которого должно быть простым d</param>

/// <returns>Число d, взаимно простое к заданному</returns>

private static long MutuallySimple(long m)

{

Random rd = new Random(DateTime.Now.Millisecond);//Создание рандома основанного на сейчашнем времени

int tmp_d;

long d = 0, check;

bool quit = false;

while (quit == false)//до тех пор, пока число не простое

{

tmp_d = rd.Next(2, 100);//выбирается временное d, от 2 до 100

d = Convert.ToInt64(tmp_d);//конвертируется в нужный формат

check = gcd(m, d);//проверяется на взаимную простоту с числом m, путем поиска наибольшего общего делителя

if (check == 1) // Если НОД == 1 то d - простое число

{

quit = true;//поднятие "флага" о том, что число готово

}

}

return d;//число возвращается в вызвавшую функцию

}

/// <summary>

/// Функция, проверяющая переменные p и q на наличие общих делителей

/// </summary>

/// <param name="p">Первое число для проверки</param>

/// <param name="q">Второе число для проверки</param>

/// <returns>Правда или ложь, как ответ на вопрос, есть ли общие делители</returns>

public static bool Checkpq(long p, long q)

{

long t = p;//Выборка наименьшего числа

if (q < p)

t = q;

for (int i = 2; i < t-1; i++)

{

if (((p % i) == 0) && (q % i == 0))//если заданное i является общим делителем

{

return true;//выход

}

}

return false;//если общих делителей не было, возвращается 1

}

/// <summary>

/// Функция, вызываемая по нажатию клавиши применить. Расчитывает коэффициенты для кодирования.

/// </summary>

/// <param name="sender">Системный входной параметр</param>

/// <param name="e">Системный входной параметр</param>

private void ApplyPQButton_Click(object sender, EventArgs e)

{

if (PTextBox.Text.Length == 0 && QTextBox.Text.Length == 0 )// Проверка на то, введены ли значения

{

MessageBox.Show("Введите значение P и Q!");

return;

} else if (PTextBox.Text.Length == 0)//проверка на введеное значение Р

{

MessageBox.Show("Введите значение P!");

return;

}

else if (QTextBox.Text.Length == 0)//Провера на введенное значений Q

{

MessageBox.Show("Введите значение Q!");

return;

}= Convert.ToUInt32(PTextBox.Text);//Обработка числа Р= Convert.ToUInt32(QTextBox.Text);//Обработка числа Q(Checkpq(P, Q))//Проверка, подходят ли указанные числа P и Q

{

MessageBox.Show("Значения P и Q не удволетворяют условиям метода!");;

}

N = P * Q;//Подсчет коэф. N

M = (P - 1) * (Q - 1);//подсчет коэф. M

D = MutuallySimple(M);//Первая выборка числа d (e), взаимно простого к m

long tmp_E;

Evklid evk = new Evklid();//создается класс, для работы алгоритма Евклида

tmp_E = evk.ExtGCD(D, M);//алогитмом евклида выбирается число для D и М

if (tmp_E <= 0)//Если заданное число меньше нуля

{

while (tmp_E < 0)//и до тех, пока оно меньше нуля

{

D = MutuallySimple(M);// ищется новое D, а для него, ищется новое tmp_E

tmp_E = evk.ExtGCD(D, M);

}

}

E = Convert.ToInt64(tmp_E);//полученное положительное Е обрабатыватеся.

p_label.Text = Convert.ToString(P);//вывод результатов на приборную доску. Ярр

q_label.Text = Convert.ToString(Q);//вывод результатов на приборную доску.

e_label.Text = Convert.ToString(E);//вывод результатов на приборную доску.

d_label.Text = Convert.ToString(D);//вывод результатов на приборную доску.

n_label.Text = Convert.ToString(N);//вывод результатов на приборную доску.

m_label.Text = Convert.ToString(M);//вывод результатов на приборную доску. .Enabled = true;//восстановление работоспособности кнопок шифрации

DecryptButton.Enabled = true;//восстановление работоспособности кнопок дешифрации

}

/// <summary>

/// Обнуление данных формы

/// </summary>

/// <param name="sender">Системный параметр</param>

/// <param name="e">Системный параметр</param>

private void ClearButton_Click(object sender, EventArgs e)

{

p_label.Text = "0";

q_label.Text = "0";

n_label.Text = "0";

m_label.Text = "0";

d_label.Text = "0";

e_label.Text = "0";

CryptButton.Enabled = false;//блокирование работоспособности кнопок шифрации

DecryptButton.Enabled = false;//блокирование работоспособности кнопок дешифрации

}

/// <summary>

/// Операция кнопки "Шифровать"

/// </summary>

/// <param name="sender">Системный параметр</param>

/// <param name="e">Системный параметр</param>

private void CryptButton_Click(object sender, EventArgs e)

{

if (SourceTextBox.Text.Length == 0)//Проверка на наличие текста для шифрации

{

MessageBox.Show("Нет текста для шифрации");

return;

}.ResetText();//обнуление текста в поле вывода.ResetText();//обнуление текста в поле вывода2publicKey = new Key(E, N);//создание нового ключа класса Key, основанного на подсчитанных E и N.Encoder enc = new EncodeDecode.Encoder();//Создание класса кодировщика= SourceTextBox.Text;= enc.Encode(Source, publicKey);//Обработка текста с помощью ключа, получение массива закодированных символов

for (int i = 0; i < cipherText.Length; i++)

{

textBox1.Text += cipherText[i];//вывод кодов в текст бокс слитно

ResultTextBox.Text += cipherText[i];//и с пробелами, для большей наглядности

ResultTextBox.Text += " ";

}Length.Text = Convert.ToString(ResultTextBox.TextLength);//вывод длины получившегося кода

}

/// <summary>

/// Функция, обрабатывающая дешифрацию кода по нажатию кнопки "Дешифровать"

/// </summary>

/// <param name="sender">Системный параметр</param>

/// <param name="e">Системный параметр</param>

private void DecryptButton_Click(object sender, EventArgs e)

{

if (ResultTextBox.Text.Length == 0)//проверка поля дешифрации

{

MessageBox.Show("Нет текста для дешифрации");

return;

}

ResultTextBox.ResetText();//сброс поля для вывода результата

Key privateKey = new Key(D, N);//создание ключа на основе D и N

EncodeDecode.Encoder enc = new EncodeDecode.Encoder();//создание кодировщика по соотв. классу

ResultTextBox.Text = enc.Decode(cipherText, privateKey);//декодирование и вывод в текст бокс

TextBox2Length.Text = Convert.ToString(ResultTextBox.TextLength);

if (SourceTextBox.Text == ResultTextBox.Text)//проверка на то, что стартовый тест и полученный одинаковые

{

label1.Visible = true;

label1.Text = "Дешифрование успешно!";

label1.ForeColor = Color.Green;

}

else//если нет

{

label1.Visible = true;

label1.Text = "Дешифрование неудачно!";

label1.ForeColor = Color.Red;

}

}

private void SourceTextBox_TextChanged(object sender, EventArgs e)

{

TextBox1Length.Text = Convert.ToString(SourceTextBox.TextLength);

}

}

}.csSystem;System.Collections.Generic;System.Linq;System.Text;EvklidLib

{

/// <summary>

/// Класс работы с алгоритмом Евклида

/// </summary>

public class Evklid

{

/// <summary>

/// Алгоритм Евклида

/// </summary>

/// <param name="x">Первый параметр</param>

/// <param name="y">Второй параметр</param>

/// <returns>Возвращает число, удволетворяющее алгоритму для заданных x и y</returns>

public long ExtGCD(long x, long y)

{

long a, b, q, r, u1, u2;

long t;

a = Convert.ToInt64(x);//конвертация числа а

b = Convert.ToInt64(y);// и числа b

u1 = 1;

u2 = 0;

while (b != 0)//цикл, который действует до тех пор, пока в число b не попадет 0

{

q = a / b;

r = a % b;

a = b;

b = r;

t = u2;

u2 = u1 - q * u2;

u1 = t;

}

return u1;//возвращает число, найденное по алгоритму Евклида

}

}

}.csSystem;System.Collections.Generic;System.Linq;System.Text;EncodeDecode

{

/// <summary>

/// Класс кодирует и декодирует строку

/// </summary>

public class Encoder : EncoderBase, IEncoder<long>

{

/// <summary>

/// Кодирование строки символов (внешняя функция)

/// </summary>

/// <param name="sMessage">Строка символов для кодирования</param>

/// <param name="oKey">Ключ кодирования</param>

/// <returns>Возвращает массив закодированных кодов символов</returns>

public virtual long[] Encode(string sMessage, Key oKey)

{

long[] numericMessage = new long[sMessage.Length];//создание массива кодов

int length = sMessage.Length;

for (int i = 0; i < length; i++)

{

numericMessage[i] = (long)sMessage[i];//обработка каждого символа, запись его кода

}

return Process(numericMessage, oKey);//обработка строки кодов

}

/// <summary>

/// Декодирование строки символов

/// </summary>

/// <param name="numericMessage">массив кодированных данных</param>

/// <param name="oKey">Ключ декодирования</param>

/// <returns>Возвращает текст сообщение</returns>

public virtual string Decode(long[] numericMessage, Key oKey)

{

long[] processedMessage = Process(numericMessage, oKey);//массив кодов символов для раскодирования

StringBuilder message = new StringBuilder();//переменная для работы со стринг

int length = processedMessage.Length;

for (int i = 0; i < length; i++)

{

message.Append((char)processedMessage[i]);//обработка кода символа в символ

}

return message.ToString();//возвращения стринг текста

}

/// <summary>

/// Функция для получения хэшкода

/// </summary>

/// <returns>Возвращает хэш код</returns>

public override int GetHashCode()

{

return base.GetHashCode();

}

/// <summary>

/// Переопределенная функция обработки в стринг

/// </summary>

/// <returns>Возвращает текст в формате string</returns>

public override string ToString()

{

return "Encoder";

}

}

}.csSystem;System.Collections.Generic;System.Linq;System.Text;

namespace EncodeDecode

{

/// <summary>

/// Базовый класс для работы с кодированием

/// </summary>

public class EncoderBase

{

/// <summary>

/// Внутреняя функция кодирования/раскодирования (зависит от ключа) текста

/// </summary>

/// <param name="src_text">Массив кодов символов строки</param>

/// <param name="oKey">Ключ кодирования</param>

/// <returns></returns>

protected long[] Process(long[] src_text, Key oKey)

{

long[] ciphertext = new long[src_text.Length];//массив перекодированных символов

int length = src_text.Length;

for (int i = 0; i < length; i++)

{

ciphertext[i] = ModularExponantiation(src_text[i], oKey);//обработка кода на базе ключа

}

return ciphertext;//возвращение массива кодов

}

/// <summary>

/// Функция обработки кода-числа на базе ключа

/// </summary>

/// <param name="num">Конкретный код</param>

/// <param name="oKey">Ключ</param>

/// <returns>Возвращает кодированный код символа</returns>

protected long ModularExponantiation(long num, Key oKey)

{

long C = 1;

long E = 0;

while (E++ < oKey.index)

{

C = (C * num) % oKey.N;//остаток от деления на N ключа - ответ для кодирования системы RSA

}

return C;

}

}

}.csSystem;System.Collections.Generic;System.Linq;System.Text;EncodeDecode

{

/// <summary>

/// Интерфейс класса Encoder (шаблон)

/// </summary>

/// <typeparam name="T">Тип для работы кодировщика (для шаблона)</typeparam>

public interface IEncoder<T> where T :struct

{

T[] Encode(string sMessage, Key oKey);

string Decode(T[] numericMessage, Key oKey);

}

}.csSystem;System.Collections.Generic;System.Linq;System.Text;

namespace EncodeDecode

{

/// <summary>

/// Структура для представдения ключа кодирования

/// </summary>

public struct Key

{

public long index;

public long N;

/// <summary>

/// Конструктор ключа кодирования

/// </summary>

/// <param name="lIndex">Параметр E (для шифрации) или D (для дешифрации)</param>

/// <param name="lN">Параметр N</param>

///

public Key(long lIndex, long lN)

{

index = lIndex;

N = lN;

}

}

}

Приложение Б


. Техническое задание на программу по ГОСТ 19.201-78

1.1.Введение

1.1.1.Наименование программы

Наименование - «Алгоритм RSA».

1.1.2.Краткая характеристика области применения

Энкодер методом RSA можно применять для кодирования и раскодирования текстовых данных с помощью ключа RSA.

1.2.1.Основание для проведения разработки

Основанием для проведения разработки является курс Объектно-ориентированного программирования, которым предусмотрена курсовая работа. Курсовая работа согласована с преподавателем МГТУ МИРЭА Петренко А. А, именуемым в дальнейшем Заказчиком, и утвержден студентом МГТУ МИРЭА, Минаевым С.К., именуемым в дальнейшем Исполнителем.

1.2.2.Наименование и условное обозначение темы разработки

Наименование темы разработки - «Программная реализация библиотеки классов системы RSA и ее применение на практике».

1.2.Назначение разработки

1.3.1.Функциональное назначение

Функциональным назначением программы является проверка работоспособности метода шифрования RSA, в сторону кодирования и раскодирования.

1.3.2.Эксплуатационное назначение

Программа должна эксплуатироваться по усмотрению Заказчика.

Конечными пользователями программы должны являться по усмотрению Заказчика.

1.3.Требования к программе или программному изделию

1.4.1. Требования к функциональным характеристикам

1.4.1.1.Требования к составу выполняемых функций

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

а) функция создания ключа RSA

б) функция кодирования введенного текста

в) функция раскодирования зашифрованной информации

г) функция загрузки текста из файла в форму

1.4.1.2.Требования к организации входных данных

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

1.4.1.3.Требования к организации выходных данных

Не требуется, так как вывод данных происходит непосредственно на монитор.

1.4.1.4.Требования к временным характеристикам

Каждая функция программы не должна выполняться более пяти минут.

1.4.2.Требования к надежности

1.4.2.1.Требования к обеспечению надежного (устойчивого) функционирования программы

Надежное (устойчивое) функционирование программы должно быть обеспечено выполнением Заказчиком совокупности организационно-технических мероприятий, перечень которых приведен ниже:

а)организацией бесперебойного питания технических средств;

б)использованием лицензионного программного обеспечения;

в)регулярным выполнением рекомендаций Министерства труда и социального развития РФ, изложенных в Постановлении от 23 июля 1998 г. «Об утверждении межотраслевых типовых норм времени на работы по сервисному обслуживанию ПЭВМ и оргтехники и сопровождению программных средств»;

г)регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов.

1.4.2.2.Время восстановления после отказа

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

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

1.4.2.3.Отказы из-за некорректных действий оператора

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

1.4.3.Условия эксплуатации

1.4.3.1. Климатические условия эксплуатации

По согласованию с Заказчиком описание данного пункта не требуется.

1.4.3.2.Требования к видам обслуживания

1.4.3.3.По согласованию с Заказчиком описание данного пункта не требуется.

1.4.3.4.Требования к численности и квалификации персонала

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

Системный администратор должен иметь высшее профильное образование и сертификаты компании-производителя операционной системы. В перечень задач, выполняемых системным администратором, должны входить:

а)задача поддержания работоспособности технических средств;

б)задачи установки (инсталляции) и поддержания работоспособности системных программных средств - операционной системы;

в)задача установки (инсталляции) программы.

Конечный пользователь программы (оператор) должен обладать практическими навыками работы с графическим пользовательским интерфейсом операционной системы.

Персонал должен быть аттестован на II квалификационную группу по электробезопасности (для работы с конторским оборудованием).

1.4.4.Требования к составу и параметрам технических средств

В состав технических средств должен входить IBM-совместимый персональный компьютер (ПЭВМ), включающий в себя:

а) процессор Pentium-4 с тактовой частотой, ГГц - 2, не менее;

б) жесткий диск объемом, Гб - 100, не менее;

в) оперативную память объемом, Гб - 1, не менее;

г) средства ввода и вывода.

1.4.5.Требования к информационной и программной совместимости

1.4.5.1. Требования к информационным структурам и методам решения

По согласованию с Заказчиком описание данного пункта не требуется.

1.4.5.2.Требования к исходным кодам и языкам программирования

Исходные коды программы должны быть реализованы на языке C#.

1.4.5.3. Требования к программным средствам, используемым программой

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

1.4.5.4.Требования к защите информации и программ

По согласованию с Заказчиком описание данного пункта не требуется.

.4.6. Требования к маркировке и упаковке

По согласованию с Заказчиком описание данного пункта не требуется.

1.4.7.Требования к транспортированию и хранению

По согласованию с Заказчиком описание данного пункта не требуется.

1.4.8.Специальные требования

По согласованию с Заказчиком описание данного пункта не требуется.

1.5. Требования к программной документации

.5.1. Предварительный состав программной документации

Состав программной документации должен включать в себя:

а)техническое задание;

б)программу и методики испытаний;

в)руководство оператора;

.6. Технико-экономические показатели

Ориентировочная экономическая эффективность не рассчитывается.

.7. Стадии и этапы разработки

Согласование, утверждение технического задания5 сем. 4 нед.

Уточнение и согласование с руководителем курсовой работы состава программной реализации и исходных данных5 сем. 5 нед.

Оформление пояснительной записки5 сем. 15 нед.

Опытная эксплуатация программного изделия5 сем. 15 нед.

Защита курсовой работы5 сем. 15 нед.

.8. Порядок контроля и приемки

1.8.1.Виды испытаний

Все необходимые испытания Исполнитель описывает в Расчетно-Пояснительной Записке.

1.8.2.Общие требования к приемке работы

На основании Расчетно-Пояснительной Записки, Исполнитель, совместно с Заказчиком, подписывает Акт приемки-сдачи программы.


Приложение В


1.1. Назначение программы

Описание данного пункта находится в Техническом Задании.

1.2.Условия выполнения программы

Описание данного пункта находится в Техническом Задании.

1.3.Требования к персоналу (пользователю)

Описание данного пункта находится в Техническом Задании.

1.4.Выполнение программы

Описание данного пункта находится в Техническом Задании.

1.5.Сообщения оператору

а) при вводе ошибочных данных p и q программа выдает сообщение «Неверные значения p и q»

б) при ошибке открытия файла программа выдает сообщение «Ошибка открытия файла»


Приложение Г


. Программа и методики испытаний по ГОСТ 19.301-79

1.1.1. Объект испытаний

1.1.2. Наименование

Наименование - «Алгоритм RSA».

1.1.3. Область применения

Программа предназначена к применению в профильных подразделениях на объектах Заказчика.

1.1.4. Обозначение программы

Наименование темы разработки - «Программная реализация библиотеки классов системы RSA и ее применение на практике».

1.2. Цель испытаний

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

1.3. Общие положения

1.3.1. Основания для проведения испытаний

Испытания проводятся по договоренности с Заказчиком.

1.3.2. Место и продолжительность испытаний

Приемо-сдаточные испытания должны проводиться до 21.12.11.

Приемо-сдаточные испытания программы должны проводиться согласно разработанной Исполнителем и согласованной Заказчиком Программы и методик испытаний.

1.3.3. Организации, участвующие в испытаниях

Испытания проводятся Исполнителем и Заказчиком.

1.3.4. Перечень документов, предъявляемых на испытания

Состав программной документации должен влючать в себя:

а)техническое задание;

б)программу и методики испытаний;

в)руководство оператора;

1.4. Объем испытаний

.4.1. Перечень этапов испытаний

Испытания проводятся в два этапа:

1.ознакомительный;

2.испытания.

1.4.1.1. Перечень проверок, проводимых на 1 этапе испытаний

Перечень проверок, проводимых на 1 этапе испытаний, должен включать в себя:

а)проверку комплектности программной документации;

б)проверку комплектности состава технических и программных средств.

Методики проведения проверок, входящих в перечень по 1 этапу испытаний, изложены в документе Приложение Б.

1.4.1.2. Перечень проверок, проводимых на 2 этапе испытаний

Перечень проверок, проводимых на 2 этапе испытаний, должен включать в себя:

а)проверку соответствия технических характеристик программы;

б)проверку степени выполнения требований функционального назначения программы.

Методики проведения проверок, входящих в перечень по 2 этапу испытаний, изложены в документе Приложение В.

1.4.2.Количественные и качественные характеристики, подлежащие оценке

1.4.2.1.Количественные характеристики, подлежащие оценке

В ходе проведения приемо-сдаточных испытаний оценке подлежат количественные характеристики, такие как:

а)комплектность программной документации;

б)комплектность состава технических и программных средств.

1.4.2.2.Качественные характеристики, подлежащие оценке

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

а) функция создания ключа RSA

б) функция кодирования введенного текста

в) функция раскодирования зашифрованной информации

г) функция загрузки текста из файла в форму

1.4.3.Последовательность проведения и режимы испытаний

Испытания проводятся в последовательности, указанной в п. Перечень этапов испытаний.

1.4.4.Перечень работ, проводимых после завершения испытаний

В случае успешного проведения испытаний в полном объеме Исполнитель совместно с Заказчиком утверждают Акт приемки-сдачи работ.

Исполнитель передает Заказчику программное изделие, программную (эксплуатационную) документацию и т.д.

Мелкие, несущественные недоработки могут быть устранены после начала эксплуатации.

1.5.Требования к программе

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

1.6.Требования к программной документации

Состав программной документации должен включать в себя:

а)техническое задание;

б)программу и методики испытаний;

в)руководство оператора;

1.7.Условия и порядок проведения испытаний

1.7.1.Условия проведения испытаний

По согласованию с Заказчиком описание данного пункта не требуется.

1.7.2.Условия начала и завершения отдельных этапов испытаний

Необходимым и достаточным условием завершения 1 этапа испытаний и начала 2 этапа испытаний является успешное завершение проверок, проводимых на 1 этапе (см. п. Перечень проверок, проводимых на 1 этапе испытаний).

Условием завершения 2 этапа испытаний является успешное завершение проверок, проводимых на 2 этапе испытаний.

1.7.3.Ограничения в условиях проведения испытаний

По согласованию с Заказчиком описание данного пункта не требуется.

1.7.4.Требования к техническому обслуживанию

Требования к техническому обслуживанию не предъявляются.

1.7.5.Меры, обеспечивающие безопасность и безаварийность проведения испытаний

При проведении испытаний Заказчик должен обеспечить соблюдение требований безопасности, установленных ГОСТ 12.2.007.0-75, ГОСТ 12.2.007.3 - 75, «Правилами техники безопасности при эксплуатации электроустановок потребителей», и «Правилами технической эксплуатации электроустановок потребителей».

1.7.6.Порядок взаимодействия организаций, участвующих в испытаниях

Исполнитель устно извещает Заказчика о готовности к проведению приемосдаточных испытаний не раньше, чем за 30 минут до намеченного срока проведения испытаний.

Заказчик совместно с Исполнителем проводят все подготовительные мероприятия для проведения испытаний на объекте Заказчика, а так же проводят испытания в соответствии с настоящей Программой и методиками.

1.7.7.Требования к персоналу, проводящему испытания

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

1.8.Методы испытаний

1.8.1.Методика проведения проверки комплектности программной документации

Проверка комплектности программной документации на программное изделие производится визуально Заказчиком. В ходе проверки сопоставляется состав и комплектность программной документации, представленной Исполнителем, с перечнем программной документации, приведенным в п. Перечень документов, предъявляемых на испытания настоящего документа.

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

1.8.2. Методика проведения проверки комплектности и состава технических и программных средств

Проверка комплектности и состава технических и программных средств, производится визуально Заказчиком. Комплектность программных средств, проводится также визуально.

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

По результатам проведения проверки представитель Заказчика вносит запись в Протокол испытаний - «Комплектность технических и программных средств соответствует (не соответствует) требованиям п. Технические средства, используемые во время испытаний настоящего документа».

1.8.3. Методика проверки выполнения всех функция программы

Проверка комплектности и состава технических и программных средств, производится визуально представителем Заказчика. Все функции должны выполняться в соответствии с Расчетно-пояснительно запиской и Техническим Заданием.


Замечания по выполнению курсовой работы

№ п/пДата сдачи на проверкуДата возвратаДоработка замечанийПодпись преподавателяФ.И.О. преподавателя


МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) Факульт

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ