Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 4 / Защита_информации_4

.doc
Скачиваний:
31
Добавлен:
01.05.2014
Размер:
223.23 Кб
Скачать

Министерство образования и науки РФ

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

кафедра математического обеспечения ЭВМ

Отчет

по лабораторной работе №4

«Алгоритмы ЭЦП и хэш-функции»

по дисциплине «Методы и средства защиты компьютерной информации»

Выполнили: студенты гр 3341 Рыжок М.С. Гвоздякова Е.И.

Проверил: доцент кафедры МО ЭВМ Горячев Г.А.

Санкт-Петербург 2008-05-05

Лабораторная работа №4

Электронная цифровая подпись

Цель работы: Ознакомление с алгоритмами хэш-функций и электронной цифровой подписи документов

Задание: Разработка и программная реализация алгоритма цифровой подписи RSA на основе однонаправленной функции MD5

Схема алгоритма : В основе алгоритма цифровой подписи RSA лежит инверсия ассиметричного алгоритма шифрования RSA. Для формирования электронной подписи отправитель выполняет над контрольной суммой документа h те же самые действия, что и при шифровании, но использует не открытый ключ получателя, а свой собственный закрытый ключ, т. е. signi = (hid mod n). Открытый и закрытый ключи просто меняются

местами. На приемной стороне получатель возводит подпись в степень открытого ключа е отправителя и получает (signie mod n) = (hide mod n) = hi (согласно тем же формулам, что и в асимметричном шифровании RSA).

Если получившееся после возведения в степень значение совпадает с вычисленной независимо на приемной стороне контрольной суммой документа, то проверка считается выполненной, а документ – подлинным. Никто, кроме отправителя, не зная d, не сможет вычислить такую подпись signi , чтобы возведение ее в степень открытого ключа е дало требуемую контрольную сумму – это та же самая трудноразрешимая задача, что и в асимметричном шифровании RSA. Следовательно снабдить документ такой подпись signi мог только истинный владелец закрытого ключа. Схема алгоритма приведена на рисунке 1

Функция MD5 обрабатывает входной текст 512-битовыми блоками, разбитые на 16 32-битовых подблоков. Выходом алгоритма является набор из 4-х 32-битовых блоков, объединяемых в одно128-битовое хэш-значение.

Во-первых сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного512: сначала приписывается 1, а потом несколько 0. Оставшиеся 64 бита заполняются значением длины сообщения (исходного, до дополнения). Это действие гарантирует, что разные сообщения не будут выглядеть одинаково после дополнения.

Инициализируются 4 переменных:

А = 0х1234567

В = 0х89abcdef

C = 0xfedcba98

D = 0x76543210

Они называются переменными сцепления

Теперь перейдем к основному блоку алгоритма. Этот блок продолжается, пока не исчерпаются 512-битовые блоки сообщения

4 переменные копируются в другие 4 переменные:A в a B в b C в c D в d. Главный цикл состоит из 4-х очень похожих этапов. На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя из a, b, c, d, затем она добавляет этот результат к 4-й переменной, подблоку текста и константе. Затем результат циклически сдвигается на переменное число бит и добавляется к одной из переменных a, b, c, d. Наконец результат заменяет одну из этих переменных.

D

Контрольный пример: например для текста

На вечернем сеансе

В небольшом городке

Пела песню актриса

На чужом языке

Сказки Венского леса

Я услышал в кино

Это было недавно

Это было давно хэш-функция равна (для удобства разбита на 16 подблоков)

184 99 114 192 25 113 155 148 0 186 246 37 242 149 58 113

Реализация алгоритма: при выполнении лабораторной работы с помощью пакета инженерных вычислений MATLAB 7.5.0 было создано приложение с графическим интерфейсом, позволяющее пользователю зашифровать любое текстовое сообщение, загруженным из файла ‘text.txt’. Ключ шифрования генерируется нажатием кнопки KeyGen Интерфейс приложения представлен на рисунке 2.

Результат шифрования/дешифрования сохраняется в файле out.txt

Результаты работы программы

1. Открытый текст: 133 96 34 224 37 8 46 243 183 139 83 211 70 62 5 49

Ключ N = 2059 E = 367

Шифротекст: 1143 5 1530 1535 1452 1075 563 392 34 489 107 408 1206 1285 196 1764

2. Открытый текст: 184 99 114192 25 113 155 148 0 186 246 37 242 149 58 113

Ключ N = 1513 E = 713

Шифротекст: 768 1210 634 1338 1079 295 308 1042 0 16 1266 660 701 387 877 295

Ответы на контрольные вопросы:

1. Что такое хэш-функция? Зачем она нужна?

Ответ: Для формирования цифровой подписи документа обычно создается так называемый дайджест сообщения (message digest), который представляет собой свертку исходного сообщения с помощью специальной хэш-функции (англ. hash – мелко измельчать и перемешивать). Длина дайджеста с одной стороны намного меньше, чем возможные исходные сообщения, а с другой стороны такова, что полный перебор возможных значений является практически невыполнимым.

  1. Что называется электронной цифровой подписью? Ответ :. Электронная цифровая подпись – некоторая дополнительная информация, соответствующая данному электронному документу (сообщению), которая могла быть сформирована только владельцем некоторого секрета – закрытого ключа и которая позволяет с использованием специального алгоритма установить факт соответствия подписи закрытому ключу подписывающего. Под электронной цифровой подписью (ЭЦП) понимается также криптографическая система (совокупность алгоритмов и правил), позволяющая подписывать цифровые сообщения и проверять правильность формируемых цифровых подписей

  2. Для чего используется ЭЦП? Ответ : ЭЦП используется для аутентификации отправителя сообщений и того, чтобы сделать сообщение неотвергаемым

  3. Что такое дайджест-сообщение? Ответ: Дайджест-сообщение – свертка исходного сообщения с помощью хэш-функции

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

Выводы: при выполнении лабораторной работы были получены навыки в использовании алгоритмов ЭЦП и хэш-функций.

Приложение 1

Текст программы на языке среды инженерных разработок MATLAB

function varargout = MD5_RSA(varargin)

% MD5_RSA M-file for MD5_RSA.fig

% MD5_RSA, by itself, creates a new MD5_RSA or raises the existing

% singleton*.

%

% H = MD5_RSA returns the handle to a new MD5_RSA or the handle to

% the existing singleton*.

%

% MD5_RSA('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in MD5_RSA.M with the given input arguments.

%

% MD5_RSA('Property','Value',...) creates a new MD5_RSA or raises the

% existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before MD5_RSA_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application

% stop. All inputs are passed to MD5_RSA_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

% instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help MD5_RSA

% Last Modified by GUIDE v2.5 12-May-2008 16:25:53

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @MD5_RSA_OpeningFcn, ...

'gui_OutputFcn', @MD5_RSA_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before MD5_RSA is made visible.

function MD5_RSA_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% varargin command line arguments to MD5_RSA (see VARARGIN)

% Choose default command line output for MD5_RSA

handles.output = hObject;

set(handles.scrwidth, 'Enable', 'off')

set(handles.hashbutton, 'Enable', 'off')

set(handles.keygenbutton, 'Enable', 'off')

set(handles.slider, 'Enable', 'off')

set(handles.rectextbutton, 'Enable', 'off')

set(handles.autenbutton, 'Enable', 'off')

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes MD5_RSA wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = MD5_RSA_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT);

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

function messagetext_Callback(hObject, eventdata, handles)

% hObject handle to messagetext (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of messagetext as text

% str2double(get(hObject,'String')) returns contents of messagetext as a double

% --- Executes during object creation, after setting all properties.

function messagetext_CreateFcn(hObject, eventdata, handles)

% hObject handle to messagetext (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in loadbutton.

function loadbutton_Callback(hObject, eventdata, handles)

k = fopen('in.txt', 'r');

textstring = '';

fileflag = fgets(k);

textstring = fileflag;

while fileflag ~= -1

fileflag = fgets(k);

textstring = strvcat(textstring, fileflag);

end

set(handles.messagetext, 'String', textstring);

binstring = num2bin(textstring);

l = length(binstring);

fclose(k);

if mod(l, 512) ~= 448

while mod(length(binstring), 512) ~= 448

binstring = [binstring, 0];

end

binstring(l+1) = 1;

end

lengstring = num2bin(l, 64);

binstring = [binstring, lengstring];

handles.Data = binstring;

handles.Text = textstring;

set(handles.scrwidth, 'Enable', 'on')

set(handles.hashbutton, 'Enable', 'on')

set(handles.answertext, 'String', '')

guidata(hObject, handles);

% hObject handle to loadbutton (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on slider movement.

function scrwidth_Callback(hObject, eventdata, handles)

textstring = handles.Text;

N = size(textstring);

p = get(hObject, 'Value');

begin = round(p*N(1));

newstring = textstring(begin:N, :);

set(handles.messagetext, 'String', newstring);

%set(handles.messagetext, 'Extent', px);

%set(handles.messagetext, 'Position', px);

% hObject handle to scrwidth (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider

% get(hObject,'Min') and get(hObject,'Max') to determine range of slider

% --- Executes during object creation, after setting all properties.

function scrwidth_CreateFcn(hObject, eventdata, handles)

% hObject handle to scrwidth (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

% --- Executes on button press in hashbutton.

function hashbutton_Callback(hObject, eventdata, handles)

message = handles.Data;

dygest = MD5(message);

dygest = arr2matr(dygest, 8);

dygest = bin2str(dygest);

handles.dgs = dygest;

set(handles.dygesttext, 'String', num2str(dygest));

set(handles.dygesttext, 'BackgroundColor', [1, 1, 1]);

set(handles.keygenbutton, 'Enable', 'on')

set(handles.answertext, 'String', '')

guidata(hObject, handles);

% hObject handle to hashbutton (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in keygenbutton.

function keygenbutton_Callback(hObject, eventdata, handles)

K = keygenerate();

textstring = strvcat(['N = ', num2str(K.basic)], ['E = ', num2str(K.open)]);

handles.basic = K.basic;

handles.open = K.open;

handles.close = K.close;

Data = handles.dgs;

Cypher = zeros(1, length(Data));

n = handles.basic;

f = handles.close;

for i = 1:length(Data)

Cypher(i) = quickpower(Data(i), f, n);

end

handles.cypher = Cypher;

set(handles.keytext, 'String', textstring);

set(handles.dygesttext, 'String', num2str(Cypher));

set(handles.dygesttext, 'BackgroundColor', [1, 1, 0.5]);

set(handles.answertext, 'String', '')

set(handles.recievetext, 'String', '');

set(handles.decrypttext, 'String', '');

set(handles.rectextbutton, 'Enable', 'on')

set(handles.autenbutton, 'Enable', 'off');

guidata(hObject, handles);

% hObject handle to keygenbutton (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in autenbutton.

function autenbutton_Callback(hObject, eventdata, handles)

e = handles.open;

n = handles.basic;

Cypher = handles.cypher;

Uncypher = zeros(1, length(Cypher));

for i = 1:length(Cypher)

Uncypher(i) = quickpower(Cypher(i), e, n);

end

Data = handles.RData;

dgs = MD5(Data);

dgs = arr2matr(dgs, 8);

dgs = bin2str(dgs);

if Uncypher == dgs

set(handles.answertext, 'String', 'YES')

else

set(handles.answertext, 'String', 'NO')

end

set(handles.decrypttext, 'String', num2str(dgs));

set(handles.dygesttext, 'String', num2str(handles.dgs));

set(handles.dygesttext, 'BackgroundColor', [1, 1, 1]);

% hObject handle to autenbutton (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in rectextbutton.

function rectextbutton_Callback(hObject, eventdata, handles)

k = fopen('in.txt', 'r');

textstring = '';

fileflag = fgets(k);

textstring = fileflag;

while fileflag ~= -1

fileflag = fgets(k);

textstring = strvcat(textstring, fileflag);

end

fclose(k);

binstring = num2bin(textstring);

l = length(binstring);

if mod(l, 512) ~= 448

while mod(length(binstring), 512) ~= 448

binstring = [binstring, 0];

end

binstring(l+1) = 1;

end

lengstring = num2bin(l, 64);

binstring = [binstring, lengstring];

handles.RText = textstring;

handles.RData = binstring;

set(handles.recievetext, 'String', textstring);

set(handles.slider, 'Enable', 'on')

set(handles.autenbutton, 'Enable', 'on')

guidata(hObject, handles);

% hObject handle to rectextbutton (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% --- Executes on slider movement.

function slider_Callback(hObject, eventdata, handles)

textstring = handles.RText;

N = size(textstring);

p = get(hObject, 'Value');

begin = round(p*N(1));

newstring = textstring(begin:N, :);

set(handles.recievetext, 'String', newstring);

% hObject handle to slider (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider

% get(hObject,'Min') and get(hObject,'Max') to determine range of slider

% --- Executes during object creation, after setting all properties.

function slider_CreateFcn(hObject, eventdata, handles)

% hObject handle to slider (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end