Автор работы: Пользователь скрыл имя, 06 Марта 2013 в 23:26, курсовая работа
Протокол - это порядок действий, предпринимаемых двумя или более сторонами, предназначенный для решения определенной задачи. Это важное определение. "Порядок действий" означает, протокол выполняется в определенной последовательности, с начала до конца. Каждое действие должно выполняться в свою очередь и только после окончания предыдущего. "Предпринимаемых двумя или более сторонами" означает, что для реализации протокола требуется по крайней мере два человека, один человек не сможет реализовать протокол.
Введение…………………………………………………………………………………………….4
1. Передача информации с использованием криптографии с открытыми ключами...………..5
1.1. Основные требования к алгоритмам асимметричного шифрования……………………6
1.2. Криптоанализ алгоритмов с открытым ключом………………………………………….8
1.3. Основные способы использования алгоритмов с открытым ключом…………………..9
1.4. Схема идентификации FIAT-SHAMIR.……………………………………………….....11
2. Электронная цифровая подпись………………………………………………………………15
2.1. Общая схема цифровой подписи…………………………………………………………15
2.2. Алгоритм цифровой подписи ГОСТ……………………………………………………..16
3. Контроль целостности передаваемых сообщений ГОСТ……………………………..……17
3.1. Общая концепция алгоритма ………………………………………………………….…17
3.2. Режим выработки имитоприставки………………………………………………………21
4. Разработка протокола установления связи с абонентом…………………………………….23
4.1. Протокол установления связи с абонентом……………………………………………..23
4.2. Программная реализация протокола……………………………………………………..25
Заключение……...………………………………………………………………………….………31
Приложение………………………………………………………………………………………..32
Список использованной литературы………………………………………………………..……33
void initAlgorithm()
{
randomize();
/* параметры криптосистемы */
p = findPrime(); OUTN(p);
q = findPrime(); OUTN(q);
n = p * q; OUTN(n);
/* генерация ключей */
for (int i=0; i<2; i++)
for (int j=0; j<k; j++) {
ss[i][j] = random(n - 1) + 1;
vv[i][j] = ss[i][j] * ss[i][j] % n;
}
outArray(L"Private key 1 = ", &ss[0][0], k);
outArray(L"Public key 1 = ", &vv[0][0], k);
outArray(L"Private key 2 = ", &ss[1][0], k);
outArray(L"Public key 2 = ", &vv[1][0], k);
}
bool roll()
{
return rand() % 2 == 1;
}
bool fiatShamir(int side)
{
/* step 1 */
uint32 r = random(n - 2) + 1; OUTN(r);
uint32 x = r * r % n; OUTN(x);
/* step 2 */
bool e = roll(); OUTBOOL(e);
/* step 3 */
uint32 y[k];
for (int i=0; i<k; i++)
y[i] = (e ? (r * ss[side][i] % n) : r);
outArray(L"y = ", y, k);
/* step 4 */
uint32 z[k];
for (int i=0; i<k; i++)
z[i] = y[i] * y[i] % n;
outArray(L"z = ", z, k);
bool result = true;
for (int i=0; i<k; i++) {
bool result1 = (e ? (z[i] == x * vv[side][i] % n) : (z[i] == x) );
if (!result1) {
result = false;
break;
}
}
return result;
}
Результат выполнения программы:
Зашифрованное сообщение находится в файле message.bin:
®М%я^d*Ё™ЈЅPдиY[І Ўb–J*€€Љ-
В курсовом проекте разработан протокол установления связи с абонентом, в соответствии с заданным вариантом.
Приложение
Фиат-Шамир:
Общеизвестные числа v и n:
n = 89a2eb31
v = c18c40ae
Закрытый ключ:
s = 79e0c13
Генерируется случайное число r = c904f54a:
Вычисляется х =r2 mod n и посылается принимающему абоненту
x = 3acff0ad
у = r*s mod n
y = a5901ce6
Вычисляется
х =y2*v mod n
x1= 3a0cffad
x2 = 3a0cffad
x1 = x2 = K – ключ шифрования.
Подпись ГОСТ:
Находим параметры щифрования:
q = 137
r = 20
Генерация ключа:
Подписывание:
f - хэш-ф-я GOST, М – текст сообщения, || - операция сложения строк
е = 1701894956
Проверка подписи:
e = eV, подпись сошлась.
Список использованной литературы
1. Брюс Шнайер. Прикладная криптография. 2-е издание. Протоколы, алгоритмы и исходные тексты на языке С.
2. James Nechvatal, Elaine Barker, Lawrence
Bassham, William Burr, Morris Dworkin, James Foti, Edward Roback. Report on the Development of the Advanced Encryption Standard (AES)
Computer Security Division Information Technology Laboratory National
Institute of Standards and Technology Technology Administration U.S.
Department of Commerce. 2000г. 116c.
Информация о работе Передача аутентичного информационного сообщения по каналу связи