DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Формування цифрового підпису згідно стандарту DSS

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інші
Група:
КСМ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт з лабораторної роботи №2 Формування цифрового підпису згідно стандарту DSS Мета роботи: реалізувати демонстраційну програму формування цифрового підпису вхідного повідомлення згідно стандарту DSS. Теоретичні відомості Відправник і отримувач електронного документа використовують при обчисленні великі цілі числа:  і  – прості числа,  біт кожне ;  – просте число довжиною 160 розрядів (дільник числа). Числа , ,  є відкритими і можуть бути спільними для всіх користувачів мережі. Відправник вибирає випадкове ціле число (). Число  – секретний ключ відправника для формування електронного цифрового підпису. Наступним кроком відправник обчислює значення . Число  – відкритий ключ для перевірки підпису відправника. Це число передається всім отримувачам документів. Для того, щоб підписати документ , відправник хешує його в ціле хеш-значення : , після цього відправник генерує випадкове ціле число  при умові, що , і обчислює число : . Обчисливши число  відправник обчислює за допомогою секретного ключа  ціле число : . Пара чисел  і  утворюють цифровий підпис  під документом . Таким чином, підписане повідомлення складається з трьох чисел . Отримувач підписаного повідомлення  перевіряє виконання умов ,  і відкидає підпис, якщо хоча б одна з умов не виконується. Потім отримувач обчислює значення , хеш-значення  і числа Після цього отримувач за допомогою відкритого ключа  обчислює значення  і перевіряє виконання умови . Якщо умова  виконується, тоді підпис  під документом  визнається отримувачем як справжній. Можна строго математично довести , що рівність  буде виконуватися тоді і тільки тоді, коли підпис  під документом  отриманий за допомогою того секретного ключа , з якого був обчислений відкритий ключ . Таким чином, можна твердо переконатися , що відправник повідомлення володіє даним секретним ключом  (не розкриваючи при цьому значення ключа ) і що відправник підписав даний документ . Лістинг програми # include <stdio.h> # include <conio.h> # include <math.h> # include <stdlib.h> int N=200;char text[200];unsigned short h[4];unsigned long h_e;int text_l;unsigned long p;unsigned long q;unsigned long g;unsigned long k_ a;unsigned long x;unsigned long r;unsigned long s;unsigned long y;int h_g;long easy[10000];int E=10000; void take_string(void){int i; printf("Please write string to signature.\n"); scanf("%s",text);for(i=0;i<N;i++)if(text[i]!='\0') text_l++;else i=N; } void take_H (void){ int i; int j; if((text_l%4)!=0){i=4-(text_l%4);for(j=text_l;j<text_l+i;j++) text[j]=0;text[j]='\0';} for(i=0;i<4;i++)for(j=0;j<text_l;j+=4){h[i]=h[i]^text[j+i];} h_e=(unsigned long)h[0]<<24|(unsigned long)h[1]<<16|(unsigned long)h[2]<<8|(unsigned long)h[3];} void take_p_q(void){ int i=1; int j=0; int l=0; int k; int lable; int r; for(;(i<4294000000)&&(j<E);i++){lable=1;for(k=2;k<=(int)sqrt((double)i);k++){if((i%k)==0) { k=(int)sqrt(i)+1;lable=0;}} if(lable){ easy[j++]=i;}}l=j; r = (int) ((float)(5000) * (float)rand() / (float)RAND_MAX)+200; p=easy[r]; k=p-1; for(i=r-1;i>=0;i--){ if((k%easy[i])==0) {q=easy[i];i=-1;}}j=(p-1)/q; h_g = (int) ((float)(10) * (float)rand() / (float)RAND_MAX)+1; g=((int)(pow((double)h_g,(double)j)))%p; p=8039; q=4019; h_g=5; g=25; k_a=25; x=12; y = (unsigned long )pow(g,x )% p ;} void take_key(void){ r = (g*k_a % p) % q; s = ( (unsigned long )((double)(1.0/(double)k_a) *(double)(h_e + x*r)) ) % q;printf("%X %X\n",r,s);} void test(void){ouble w;unsigned long u1;unsigned long u2;unsigned long v;w = (unsigned long)((double)(1.0/(double)s) )% q; u1 =(unsigned long) ((double) h_e* w ) % q;u2 = (unsigned long)((double)r* w ) % q;v = ((unsigned long) (pow(g,u1)*s* pow(y,u2)) % p ) % q; printf("%X %X %X %X %X\n",v,r,w,u1,u2); void main(void){srand( (unsigned)time( NULL ) );take_string();take_H();take_p_q(); take_key();printf("Program working.\n");} Результати роботи програми  Висновок: в результаті виконання лабораторной роботи я реалізувала демонстраційну програму формування цифрового підпису вхідного повідомлення згідно стандарту DSS.
Антиботан аватар за замовчуванням

31.03.2013 15:00

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!