асимметриялық криптожүйелерде пайдаланушылар арасында кілттерді бөлудің күрделі мәселесі шешілген, өйткені әр пайдаланушы өзінің кілт жұбын өзі құра алады, ал пайдаланушылардың ашық кілттері желілік байланыс арқылы еркін жарияланып, таратыла алады;
кілттер санының пайдаланушылар санына квадраттық тәуелділігі жоғалады; асимметриялық криптожүйеде қолданылатын кілттер саны симметриялы жүйелердегідей квадраттық емес, сызықтық тәуелділік абоненттерінің санына байланысты;
асимметриялық криптожүйелер бір-біріне сенбейтін тараптардың өзара әрекеттесу хаттамаларын жүзеге асыруға мүмкіндік береді, өйткені асимметриялық криптожүйелерді пайдалану кезінде жеке кілт тек иесіне белгілі болуы керек.
Асимметриялық криптожүйелердің кемшіліктері:
қазіргі уақытта асимметриялық алгоритмдерде қолданылатын функциялардың қайтымсыздығының математикалық дәлелі жоқ;
асимметриялық шифрлау симметриялыққа қарағанда әлдеқайда баяу, өйткені шифрлау және шифды ашу кезінде көп ресурстарды қажет ететін операциялар қолданылады.
ашық кілттерді ауыстырудан қорғау қажеттілігі туындайды.
салыстырмалы тұрақтылық үшін қажетті ұзындықтың аздығы
зерттелуінде
Кемшіліктері
үлкен желідегі кілттерді басқарудың күрделілігі
кілттермен алмасудың күрделілігі. Қолдану үшін әр абонентке кілттерді сенімді беру мәселесін шешу қажет, өйткені әр кілтті екі жаққа да беру үшін құпия арна қажет
RSA алгоритмі арқылы «BBC» хабарламасын шифрлап, шифрын ашайық. Қарапайымдылық үшін шағын сандарды алайық - бұл біздің есептеулерімізді қысқартады.
Алдымен ашық және жабық кілттерді генерациялау керек:
Екі үлкен p және q жай сандарын алайық.
N көбейтудің нәтижесі ретінде анықтайық p on q (n= p * q).
Кездейсоқ санды таңдайық, біз оны d деп атаймыз. Бұл сан (p-1)*(q-1) көбейту нәтижесімен тең болуы керек.
Келесі (e*d) mod ((p-1)*(q-1))=1 қатынасы ақиқат болатын e санын анықтайық.
Ашық кілтті e және n сандарын, ал құпияны - d және n деп атаймыз.
{e,n} ашық кілтінің көмегімен деректерді шифрлау үшін сізге мыналар қажет:
шифрланған мәтінді блоктарға бөліңіз, олардың әрқайсысы M(i)=0,1,2..., n-1 (яғни тек n-1-ге дейін) саны ретінде ұсынылуы мүмкін.
C(i)=(M(I)^e)mod n формуласы бойынша M(i) сандар тізбегі ретінде қарастырылатын мәтінді шифрлау.
{d,n} құпия кілтін пайдаланып бұл деректердің шифрын ашу үшін келесі есептеулерді орындау қажет: M(i) = (C(i)^d) mod n. Нәтижесінде түпнұсқа мәтінді білдіретін M(i) сандар жинағы алынады.
Рассмотрим алгоритм RSA с практической точки зрения.
Для начала необходимо сгенерировать открытый и секретные ключи:
Возьмем два больших простых числа p and q.
Определим n, как результат умножения p on q (n= p*q).
Выберем случайное число, которое назовем d. Это число должно быть взаимно простым (не иметь ни одного общего делителя, кроме 1) с результатом умножения (p-1)*(q-1).
Определим такое число е, для которого является истинным следующее соотношение (e*d) mod ((p-1)*(q-1))=1.
Hазовем открытым ключем числа e и n, а секретным - d и n.
Для того, чтобы зашифровать данные по открытому ключу {e,n}, необходимо следующее:
разбить шифруемый текст на блоки, каждый из которых может быть представлен в виде числа M(i)=0,1,2..., n-1( т.е. только до n-1).
зашифровать текст, рассматриваемый как последовательность чисел M(i) по формуле C(i)=(M(I)^e)mod n.
Чтобы расшифровать эти данные, используя секретный ключ {d,n}, необходимо выполнить следующие вычисления: M(i) = (C(i)^d) mod n. В результате будет получено множество чисел M(i), которые представляют собой исходный текст.
Consider the RSA algorithm from a practical point of view.
First you need to generate public and private keys:
Take two large primes p and q.
Let's define n as the result of multiplying p on q (n= p*q).
Let's choose a random number, which we will call d. This number must be coprime (have no common divisor other than 1) with the result of multiplication (p-1)*(q-1).
Let's define a number e for which the following relation (e*d) mod ((p-1)*(q-1))=1 is true.
Let's call the public key the numbers e and n, and the secret - d and n.
In order to encrypt data using the public key {e,n}, you need the following:
split the ciphertext into blocks, each of which can be represented as a number M(i)=0,1,2..., n-1 (i.e. only up to n-1).
encrypt the text, considered as a sequence of numbers M(i) according to the formula C(i)=(M(I)^e)mod n.
To decrypt this data using the secret key {d,n}, you need to perform the following calculations: M(i) = (C(i)^d) mod n. As a result, a set of numbers M(i) will be obtained, which represent the original text.
Следующий пример наглядно демонстрирует алгоритм шифрования RSA:
Зашифруем и расшифруем сообщение "САВ" по алгоритму RSA. Для простоты возьмем небольшие числа - это сократит наши расчеты.
Выберем p=3 and q=11.
Определим n= 3*11=33.
Hайдем (p-1)*(q-1)=20. Следовательно, d будет равно, например, 3: (d=3).
Выберем число е по следующей формуле: (e*3) mod 20=1. Значит е будет равно, например, 7: (e=7).
Представим шифруемое сообщение как последовательность чисел в диапозоне от 0 до 32 (незабывайте, что кончается на n-1). Буква А =1, В=2, С=3.
Теперь зашифруем сообщение, используя открытый ключ {7,33}
C1 = (3^7) mod 33 = 2187 mod 33 = 9; C2 = (1^7) mod 33 = 1 mod 33 = 1; C3 = (2^7) mod 33 = 128 mod 33 = 29; Теперь расшифруем данные, используя закрытый ключ {3,33}.
M1=(9^3) mod 33 =729 mod 33 = 3(С); M2=(1^3) mod 33 =1 mod 33 = 1(А); M3=(29^3) mod 33 = 24389 mod 33 = 2(В); Данные расшифрованы!
The following example clearly demonstrates the RSA encryption algorithm:
Let's encrypt and decrypt the message "CAB" using the RSA algorithm. For simplicity, let's take small numbers - this will shorten our calculations.
Let's choose p=3 and q=11.
Let's define n= 3*11=33.
Find (p-1)*(q-1)=20. Therefore, d will be equal to, for example, 3: (d=3).
We choose the number e according to the following formula: (e*3) mod 20=1. So e will be equal to, for example, 7: (e=7).
Let's represent the encrypted message as a sequence of numbers in the range from 0 to 32 (don't forget that it ends with n-1). Letter A=1, B=2, C=3.
Now let's encrypt the message using the public key {7,33}
C1 = (3^7) mod 33 = 2187 mod 33 = 9; C2 = (1^7) mod 33 = 1 mod 33 = 1; C3 = (2^7) mod 33 = 128 mod 33 = 29; Now let's decrypt the data using the private key {3,33}.
M1=(9^3) mod 33 =729 mod 33 = 3(C); M2=(1^3) mod 33 =1 mod 33 = 1(A); M3=(29^3) mod 33 = 24389 mod 33 = 2(B);
The data has been decrypted!