120 likes | 239 Views
Алгоритми с публичен ключ за цифров подпис. 1. Алгоритми за цифров подпис (Digital Signature Algorithm -DSA)
E N D
Алгоритми с публичен ключ за цифров подпис 1. Алгоритми за цифров подпис(Digital Signature Algorithm -DSA) През август 1991, The National Institute of Standards and Technology (NIST) предлага алгоритъм за цифров подпис - Digital Signature Algorithm (DSA) за употреба в техния стандарта за цифров подпис (DSS). Съгласно федералния регистър (Federal Register): Federal Information Processing Standard (FIPS) за Digital Signature Standard (DSS) е бил предложен. Този стандарт определя един алгоритъм за публичен ключ (DSA) подходящ за приложения на цифров подпис. Предлаганият DSS употребява публичен ключ за да удостовери на един получател целостността на данната и идентифицира подателя на данната. DSS може да бъде употребен също от трета партия за установяване на идентичността на подписа и данна та асоциирана с нея. Този стандарт приема една схема на цифров подпис, която употребява една двойка от трансформации за да се генерира и удостовери цифровата стойност наречена подпис. Реакции на съобщенията Критиките срещу DSA една по една са: 1. DSA не може да се употреби за шифриране или за разпространение на ключ. 2. DSA може да бъде развит чрез NSA и това е един трап в алгоритъма. 3. DSA е по-бавен от RSA. 4. RSA е de facto стандарт. 5. Процесът на селекция на DSA не е публичен. 6. DSA може да наруши други патенти . 7. Размерът на ключа е твърде малък.
Алгоритми с публичен ключ за цифров подписПродължение Описание на DSA Алгоритъмът употребява следните параметри: p - едно просто число L бита дълго от 512 до 1024 и е съставено от части 64. q - е 160-битов прост коефициент на p – 1. g - h(p-1)/q mod p, където h е кое и да е число по-малко от p – 1, такова че h(p - 1)/q mod p е по-голямо от 1. x - е число по-малко от q. y = gx mod p. Алгоритъмът употребява еднопосочна Хаш функция: H(m). Алгоритъмът определя секретен Хаш алгоритъм - Secure Hash Algorithm. Първите три параметъра p, q и g, са публични и могат да се получат през мрежите от потребителите. Частният ключ е x; публичният ключ е y. За да се подпише съобщението m: (1) Алис генерира случайно число k, по-малко от q. (2) Алис генерира r = (gk mod p) mod q s = (k-1 (H(m) + xr)) mod q Параметрите r и s са нейния подпис – тя ги изпраща на Боб. (3) Боб проверява подписа с изчисляването на w = s-1 mod q u1 = (H(m) * w) mod q u2 = (rw) mod q v = ((gu1 * yu2) mod p) mod q Ако v = r, тогава подписът е верен
Алгоритми с публичен ключ за цифров подписПродължение Ускоряване на предварителните изчисления Реалните приложения на DSA могат често да се ускорят с предварителните изчисления. Забелязва се, че стойността r не зависи от съобщението. Може да се създаде стринг от k случайни стойности и след това да се преизчисли r за всяка от тях. Може също да се преизчисли k-1 за всяка от тези k стойности. Тогава когато едно идващо съобщение може да се определи s за дадено r и k-1. DSA Speeds for Different Modulus Lengths with a 160-bit Exponent (on a SPARC II) 512 bits 768 bits 1024 bits Sign 0.20 sec 0.43 sec 0.57 sec Verify 0.35 sec 0.80 sec 1.27 sec DSA генерацияна прости числа NIST препоръчва един специфичен метод за генериране на две прости числа p и q, където q дели p – 1. Простото p е L бита дълго, между 512 и 1024 бита в някои съставно от 64 бита. Простото q е 160 бита дълго. Нека L – 1 = 160n + b, където L е с дължината на p и n и b са две числа и b е по-малко от 160.
Алгоритми с публичен ключ за цифров подписПродължение (1) Избира се една произволна последователност от поне 160 бита и се нарича S. Нека g да бъде с дължината на S в битове. (2) Определя се U = SHA(S) ⊕ SHA ((S + 1) mod 2g), където SHA е секретен Хаш алгоритъм. (3) Образува се q чрез поставяне на най-старшият бит и най-младшият битове на U в 1. (4) Проверява се дали q е просто. (5) Ако q не е просто се връща обратно към стъпка (1). (6) Нека C = 0 и N = 2. (7) За k = 0, 1,..., n, нека Vk = SHA ((S + N + k) mod 2g) (8) Нека Wда е цяло число W = V0 + 2160V1 +...+ 2160(n - 1)Vn - 1 + 2160n(Vn mod 2b) и нека X = W + 2L - 1 Забележете, че X е едно L-битово число. (9) Нека p = X – ((X mod 2q) – 1). Забележете, че p е конгруентно на 1 mod 2q. (10) Ако p < 2L - 1, тогава се отива в стъпка (13). (11) Проверява се дали p е просто. (12) Ако p е просто се отива в стъпка (15). (13) Нека C = C + 1 и N = N + n + 1. (14) Ако C = 4096, тогава се отива в стъпка (1). В обратния случай - стъпка (7). (15) Съхранява се стойността за S и стойността за C, употребена за да се генерира pи q. Променливата S се нарича „семе”, C – брояч и N - “offset.”
Алгоритми с публичен ключ за цифров подписПродължение ElGamal шифриране с DSA Приема се, че алгоритъмът DSA се прилага с една отделна функция наречена: DSAsign (p,q,g,k,x,h,r,s) Дават се числата p, q, g, k, x и h, и функцията връща параметрите на подписа: r и s. За да се направи шифриране ElGamal на съобщение m с публичен ключ y, избира се едно случайно число k, и се вика DSAsign (p,p,g,k,0,0,r,s) Стойността за r връща a в схемата на ElGamal. Изхвърля s . Тогава се вика DSAsign (p,p,y,k,0,0,r,s) Преименува се стойността за r на u; изхвърля се s. Вика DSAsign (p,p,m,1,u,0,r,s) Изхвърля се r. Стойността за s връща b в схемата на ElGamal. Сега имаме шифротекста a и b. Дешифрирането е също толкова лесно. Употребявайки секретния ключ x и шифрования текст на съобщението a и b, вика DSAsign (p,p,a,x,0,0,r,s) Стойността r е ax mod p. Вика се това e. Тогава се вика DSAsign (p,p,1,e,b,0,r,s) Стойността s е явния текст на съобщението m.
Алгоритми с публичен ключ за цифров подписПродължение RSA шифриране с DSA RSA шифрирането е дори по-лесно. С един модул n, съобщението m и публичния ключ e се вика DSAsign (n,n,m,e,0,0,r,s) Стойността за r връща шифрован текст. RSA дешифрирането е същото нещо. Ако d е частният ключ тогава DSAsign (n,n,m,d,0,0,r,s) Връща явният текст като стойност r. Секретност на DSA Атаки срещу k Опасности от общи модули Подпрагов канал в DSA 2. Варианти на DSA. Тези варианти правят изчисленията по-лесни за подписващия без да го кара да изчислява k-1 . Всички параметри са като в DSA.
Алгоритми с публичен ключ за цифров подписПродължение За да подпише Алис едно съобщение m, тя генерира две случайни числа k и d, двете по-малки от q. Подписът е r = (gkmod p) mod q s = (H(m) + xr) * d mod q t = kd mod q Боб проверява подписа с изчислението w = t /s mod q u1 = (H(m) * w) mod q u2 = (rw) mod q Ако r = ((gu1 * yu2) mod p) mod q, тогава подписът е верен. Следният вариант прави изчислението по-лесно за проверяващия. Всички параметри са като на DSA. За да се подпише едно съобщение m, Алис генерира едно случайно число k, по-малко от q. Подписът е r = (gk mod p) mod q s = k * (H(m) + xr)-1 mod q Боб проверява подписа с изчислението u1 = (H(m) * s) mod q u2 = (sr) mod q Ако r = ((gu1 * yu2) mod p) mod q, тогава подписът е верен.
Алгоритми с публичен ключ за цифров подпис Продължение Има също един вариант за генерация на прости за DSA, един който поставя q и параметрите, употребени за генериране на прости числа с p. (1) Избира се произволна последователност от поне 160 бита и се нарича S. Нека g да бъде дължината на S в битове. (2) Изчислява се U = SHA(S) ⊕ SHA ((S + 1) mod 2g), където SHA е Secure Hash Algorithm . (3) Образува се q чрез поставяне на най-старшият и най-младшият битове на U в 1. (4) Проверява се дали q е просто (5) Нека p да бъде серия (свързване) от q, S, C и SHA(S). C е множество от 32 бита нули. (6) p = p – (p mod q) + 1. (7) p = p + q. (8) Ако C в p е 0x7fffffff, се отива в стъпка (1). (9) Проверява се дали p е просто. (10) Ако p е сложно, се отива в стъпка (7). Подреденото нещо в този вариант е, че не трябва да се съхраняват стойностите за C и S употребени за генериране на p и q; те са закрепени вътре в p. За приложения без много памет, като смарт карти, това може да бъде добре.
Алгоритми с публичен ключ за цифров подпис Продължение 3. Алгоритъм GOST за цифров подпис Това е руски стандарт, официално наречен GOST R 34.10-94. Алгоритъмът е много подобен на DSA и употребява следните параметри: p - е просто число, между 509 и 512 бита дълго или между 1020 и 1024 бита. q- едно 254- до 256-бита прост множител на p – 1. a- всяко число по-малко от p – 1 такова че aq mod p = 1. x - едно число по-малко отq. y = axmod p. Алгоритъмът употребява еднопосочна Хаш функция: H(x). Първите три параметъра p, q и a са публични и могат да бъдат общи през мрежата за потребители. Частният ключ е x; публичният - y. За да се подпише съобщението m (1) Алис генерира случайно число k, по-малко от q (2) Алис генерира r = (akmod p) mod q s = (xr + k(H(m))) mod q Ако H(m) mod q = 0, тогава множеството е равно на 1. Ако r = 0, тогава се избира друго k и се започва отново. Подписът е две числа: r mod 2256и s mod 2256. Тя ги изпраща на Боб. (3) Боб проверява подписите с изчисленията v = H(m)q-2 mod q z1 = (sv) mod q z2 = ((q – r) * v) mod q u = ((az1 * yz2) mod p) mod q Ако u = r, тогава подписът е проверен
Алгоритми с публичен ключ за цифров подпис Продължение 4. Схеми на подписи с дискректи логаритми. Избира се p, едно голямо просто число и q, или p – 1 или един прост голям множител на p – 1. Тогава се избира g, едно число между 1 и p такова че gq ≡ 1 (mod p). Всички тези числа са публични и могат да бъдат общи за една група потребители. Частният ключ е x, по-малко от q. Публичният ключ е y = gx mod p. За да се подпише едно съобщение m, първо се избира случайно kпо-малко от и взаимно просто на q. Ако q е също просто всяко k по-малко отq работи. Първо се изчислява r = gk mod p Обобщеното уравнение на подписа - signature equation сега става ak = b + cx mod q Коефициентите a, b и c могат да бъдат кои да е от разнообразието. Всеки ред в табл. 20.4 дава шест възможности. За да се провери подписа, приемникът трябва да приеме, че ra= gbyc mod p Това е уравнение на проверката - verification equation. 5. Ong-Schnorr-Shamir Избира се едно голямо цяло число n(трябва да се знае как се разлага на множители n). След това се избита едно случайно цяло число k, такова че k и n да са взаимно прости. Определя се h по формулата h = –k-2 mod n = -(k-1)2 mod n Публичният ключ е h и n; kе частният ключ. За да се подпише съобщението M, първо се генерира случайно число r, такова че r и n да са взаимно прости. След това се изчислява: S1 = 1/2 * (M /r + r) mod nS2 = k/2 * (M /r – r) mod n Двойката S1 и S2, е подписът. Зада се провери подписът, се приема че S12 + h * S22 ≡ M (mod n)
Алгоритми с публичен ключ за цифров подписПродължение 6. ESIGN Частният ключ е една двойка от големи прости числа p и q. Пуличният ключ е n, когато n = p2q Hе Хаш функция, която работи над съобщението m, такова че H(m) е между 0 и n – 1. Има и един секретен параметър k, който е бил за кратко дискутиран. (1) Алис избира едно случайно число x, където x е по-малко от pq. (2) Алис изчислява: w, последното цяло число, което е по-голямо или равно на (H(m) – xkmod n)/pq s = x + ((w / kxk - 1) mod p)pq (3) Алис изпраща s на Bob. (4) За да провери подписа, Боб изчислява sk mod n. Той също определя a, което е последното цяло число по-голямо или равно на два пъти броя на битовете на n разделено на 3. Ако H(m) е по-малко или равно на skmod n и ако skmod n е по-малко от H(m) + 2a, тогава подписът се разглежда като валиден.
Алгоритми с публичен ключ за цифров подпис Продължение Whitfield Diffie забелязва, че повечето алгоритми с публичен ключ се основават на три трудни проблема: 1. Раницата: дадено е множество от уникални числа, да се намери подмножество чиято сума да е N. 2. Дискретни логаритми: ако p е просто число и g и m са цели числа, да се намери x ,такова че gx≡ M (mod p). 3. Разлагане на множители: ако N е произведението на две прости или a) множителят е N, b) дадени цели числа M и C, намира се d такова че Md≡ C (mod N), c) дадени са целите числа e и C, да се намери M, такова че Me≡ C (mod N), или d) дадено е едно цяло число x, да се реши дали то съдържа едно цяло число y , такова че x ≡ y2 (mod N).