<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
		<id>https://wiki.tntu.edu.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_RSA</id>
		<title>Алгоритм RSA - Історія редагувань</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.tntu.edu.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_RSA"/>
		<link rel="alternate" type="text/html" href="https://wiki.tntu.edu.ua/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_RSA&amp;action=history"/>
		<updated>2026-04-08T22:34:54Z</updated>
		<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.tntu.edu.ua/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_RSA&amp;diff=6317&amp;oldid=prev</id>
		<title>Natal ka: Створена сторінка: '''RSA'''&amp;nbsp;— криптографічна система з відкритим ключем.  RSA став першим алгори…</title>
		<link rel="alternate" type="text/html" href="https://wiki.tntu.edu.ua/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_RSA&amp;diff=6317&amp;oldid=prev"/>
				<updated>2011-05-12T00:53:13Z</updated>
		
		<summary type="html">&lt;p&gt;Створена сторінка: &amp;#039;&amp;#039;&amp;#039;RSA&amp;#039;&amp;#039;&amp;#039; — &lt;a href=&quot;/%D0%A8%D0%B8%D1%84%D1%80%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F&quot; title=&quot;Шифрування&quot;&gt;криптографічна&lt;/a&gt; система з відкритим ключем.  RSA став першим алгори…&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''RSA'''&amp;amp;nbsp;— [[шифрування|криптографічна]] система з відкритим ключем.&lt;br /&gt;
&lt;br /&gt;
RSA став першим алгоритмом такого типу, придатним і для [[шифрування]] і для [[цифровий підпис|цифрового підпису]]. Алгоритм використовується у великій кількості криптографічних [[застосунок|застосунків]].&lt;br /&gt;
&lt;br /&gt;
== Історія ==&lt;br /&gt;
Опис RSA було опубліковано у [[1977]] році [[Райвест, Рональд|Рональдом Райвестом]] (Ronald Linn Rivest), [[Шамір, Аді|Аді Шаміром]] (Adi Shamir) і [[Адлеман, Леонард|Леонардом Адлеманом]] (Leonard Adleman) з Масачусетського Технологічного Інституту (MIT).&lt;br /&gt;
&lt;br /&gt;
Британський математик [[Кліфорд Кокс]] (Clifford Cocks), що працював в [[GCHQ|центрі урядового зв'язку]] (GCHQ) [[Великобританія|Великобританії]], описав аналогічну систему в [[1973]] році у внутрішніх документах центру, але ця робота не була розкрита до [[1997]] року, тож Райвест, Шамір і Адлеман розробили RSA незалежно від роботи Коксу.&lt;br /&gt;
&lt;br /&gt;
В [[1983]] році був виданий [http://v3.espacenet.com/textdoc?DB=EPODOC&amp;amp;IDX=US4405829 патент 4405829] США, термін дії якого минув 21 вересня 2000 року.&lt;br /&gt;
&lt;br /&gt;
== Опис алгоритму ==&lt;br /&gt;
Безпека алгоритму RSA побудована на принципі складності [[Факторизація|факторизації]]. Алгоритм використовує два [[Ключі (криптографія)|ключі]]&amp;amp;nbsp;— відкритий (public) і секретний (private), разом відкритий і відповідний йому секретний ключі утворюють пари ключів (keypair). Відкритий ключ не потрібно зберігати в таємниці, він використовується для шифрування даних. Якщо повідомлення було зашифровано відкритим ключем, то розшифрувати його можна тільки відповідним секретним ключем.&lt;br /&gt;
&lt;br /&gt;
=== Генерація ключів ===&lt;br /&gt;
Для того, щоб згенерувати пари ключів виконуються такі дії:&lt;br /&gt;
&lt;br /&gt;
# вибираються два великих [[просте число|простих числа]] &amp;lt;math&amp;gt;p\,&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q\,&amp;lt;/math&amp;gt;&lt;br /&gt;
# обчислюється їх добуток &amp;lt;math&amp;gt;n=pq \,&amp;lt;/math&amp;gt;&lt;br /&gt;
# обчислюється [[Функція Ейлера]] &amp;lt;math&amp;gt;\varphi(n)=(p-1)(q-1)&amp;lt;/math&amp;gt;&lt;br /&gt;
# вибирається ціле &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; таке, що &amp;lt;math&amp;gt;1&amp;lt;e&amp;lt;\varphi(n)&amp;lt;/math&amp;gt; та &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; [[взаємно прості числа|взаємно просте]] з &amp;lt;math&amp;gt;\varphi(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
# за допомогою [[Алгоритм Евкліда|розширеного алгоритма Евкліда]] знаходиться число &amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt; таке, що &amp;lt;math&amp;gt;ed\equiv 1\pmod{\varphi(n)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Число &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; називається модулем, а числа &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt;&amp;amp;nbsp;— відкритою й секретною експонентами, відповідно. Пари чисел &amp;lt;math&amp;gt;(n,\,e)&amp;lt;/math&amp;gt; є відкритою частиною ключа, а &amp;lt;math&amp;gt;(n,\,d)&amp;lt;/math&amp;gt;&amp;amp;nbsp;— секретною. Числа &amp;lt;math&amp;gt;p\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;q\,&amp;lt;/math&amp;gt; після генерації пари ключів можуть бути знищені, але в жодному разі не повинні бути розкриті.&lt;br /&gt;
&lt;br /&gt;
=== Шифрування й розшифрування ===&lt;br /&gt;
Для того, щоб зашифрувати повідомлення &amp;lt;math&amp;gt;m&amp;lt;n\,&amp;lt;/math&amp;gt; обчислюється&lt;br /&gt;
: &amp;lt;math&amp;gt;c=m^e\bmod\,n \,&amp;lt;/math&amp;gt;.&lt;br /&gt;
Число &amp;lt;math&amp;gt;c\,&amp;lt;/math&amp;gt; і використовується в якості шифртексту.&lt;br /&gt;
Для розшифрування потрібно обчислити&lt;br /&gt;
: &amp;lt;math&amp;gt;m=c^d\bmod\,n \,&amp;lt;/math&amp;gt;.&lt;br /&gt;
Неважко переконатися, що при розшифруванні ми відновимо вихідне повідомлення:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;c^d\equiv (m^e)^d\equiv m^{ed}\pmod n\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
З умови&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;ed\equiv 1\pmod{\varphi(n)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
виходить, що&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;ed=k\varphi(n)+1&amp;lt;/math&amp;gt; для деякого цілого &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;, отже&lt;br /&gt;
: &amp;lt;math&amp;gt;m^{ed}\equiv m^{k\varphi(n)+1}\pmod n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Згідно [[Теорема Ейлера|теореми Ейлера]]:&lt;br /&gt;
: &amp;lt;math&amp;gt;m^{\varphi(n)}\equiv 1\pmod n&amp;lt;/math&amp;gt;,&lt;br /&gt;
тому&lt;br /&gt;
: &amp;lt;math&amp;gt;m^{k\varphi(n)+1}\equiv m \pmod n&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;c^d\equiv m\pmod n\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Цифровий підпис ===&lt;br /&gt;
RSA може використовуватися не тільки для шифрування, але й для цифрового підпису. Підпис &amp;lt;math&amp;gt;s\,&amp;lt;/math&amp;gt; повідомлення &amp;lt;math&amp;gt;m\,&amp;lt;/math&amp;gt; обчислюється з використанням секретного ключа за формулою:&lt;br /&gt;
: &amp;lt;math&amp;gt;s=m^d\bmod\ n\,&amp;lt;/math&amp;gt;&lt;br /&gt;
Для перевірки правильності підпису потрібно переконатися, що виконується рівність&lt;br /&gt;
: &amp;lt;math&amp;gt;m=s^e\bmod\ n\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Деякі особливості алгоритму ==&lt;br /&gt;
=== Генерація простих чисел ===&lt;br /&gt;
Для знаходження двох великих [[просте число|простих чисел]] &amp;lt;math&amp;gt;p\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;q\,&amp;lt;/math&amp;gt;, при генерації ключа, звичайно використовуються ймовірносні тести чисел на простоту, які дозволяють швидко виявити й відкинути [[складне число|складні числа]].&lt;br /&gt;
&lt;br /&gt;
Для генерації &amp;lt;math&amp;gt;p\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;q\,&amp;lt;/math&amp;gt; необхідно використовувати криптографічно надійний генератор випадкових чисел. У порушника не має бути можливості одержати будь-яку інформацію про значення цих чисел.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;q\,&amp;lt;/math&amp;gt; не повинні бути занадто близькими одне до одного, інакше можна буде знайти їх використовуючи [[метод факторизації Ферма]]. Крім того, необхідно вибирати [[Сильне просте число|«сильні» прості числа]], щоб не можна було скористатися [[p-1 алгоритм Поларда|p-1 алгоритмом Поларда]].&lt;br /&gt;
&lt;br /&gt;
=== Доповнення повідомлень ===&lt;br /&gt;
При практичному використанні необхідно деяким чином доповнювати повідомлення. Відсутність доповнень може призвести до деяких проблем:&lt;br /&gt;
* значення &amp;lt;math&amp;gt;m=0\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;m=1\,&amp;lt;/math&amp;gt; дадуть при зашифруванні шифртексти 0 і 1 при будь-яких значеннях &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt;.&lt;br /&gt;
* при малому значенні відкритого показника (&amp;lt;math&amp;gt;e=3\,&amp;lt;/math&amp;gt;, наприклад) можлива ситуація, коли виявиться, що &amp;lt;math&amp;gt;m^e&amp;lt;n\,&amp;lt;/math&amp;gt;. Тоді &amp;lt;math&amp;gt;c=m^e\bmod\ n=m^e\,&amp;lt;/math&amp;gt;, і зловмисник легко зможе відновити вихідне повідомлення обчисливши корінь ступеня &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; з &amp;lt;math&amp;gt;c\,&amp;lt;/math&amp;gt;.&lt;br /&gt;
* оскільки RSA є детермінованим алгоритмом, тобто не використовує випадкових значень у процесі роботи, то зловмисник може використати атаку з обраним відкритим текстом.&lt;br /&gt;
&lt;br /&gt;
Для розв'язання цих проблем повідомлення доповнюються перед кожним зашифруванням деяким випадковим значенням. Доповнення виконується таким чином, щоб гарантувати, що &amp;lt;math&amp;gt;m\neq0\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m\neq1\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;m^e&amp;gt;n\,&amp;lt;/math&amp;gt;. Крім того, оскільки повідомлення доповнюється випадковими даними, то зашифровуючи той самий відкритий текст ми щораз будемо одержувати інше значення шифртексту, що робить атаку з обраним відкритим текстом неможливою.&lt;br /&gt;
&lt;br /&gt;
=== Вибір значення відкритого показника ===&lt;br /&gt;
RSA працює значно повільніше симетричних алгоритмів. Для підвищення швидкості шифрування відкритий показник &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; вибирається невеликим, звичайно 3, 17 або 65537. Ці числа у двійковому вигляді містять тільки по двох одиниці, що зменшує число необхідних операцій множення при піднесенні до степеня. Наприклад, для піднесення числа &amp;lt;math&amp;gt;m\,&amp;lt;/math&amp;gt; до степеня 17 потрібно виконати тільки 5 операцій множення:&lt;br /&gt;
: &amp;lt;math&amp;gt;m^2= m\cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;m^4=m^2\cdot m^2&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;m^8=m^4\cdot m^4&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;m^{16}=m^8\cdot m^8&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;m^{17}=m^{16}\cdot m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вибір малого значення відкритого показника може призвести до розкриття повідомлення, якщо воно відправляється відразу декільком одержувачам, але ця проблема вирішується за рахунок доповнення повідомлень.&lt;br /&gt;
&lt;br /&gt;
=== Вибір значення секретного показника ===&lt;br /&gt;
Значення секретного показника &amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt; повинне бути досить великим. У [[1990]] році Міхаель Вінер (Michael J. Wiener) показав, що якщо &amp;lt;math&amp;gt;q&amp;lt;p&amp;lt;2q\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;d&amp;lt;n^{\frac14}/3&amp;lt;/math&amp;gt;, то є ефективний спосіб обчислити &amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt; по &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; і &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt;. Однак, якщо значення &amp;lt;math&amp;gt;e\,&amp;lt;/math&amp;gt; вибирається невеликим, те &amp;lt;math&amp;gt;d\,&amp;lt;/math&amp;gt; виявляється досить великим і проблеми не виникає.&lt;br /&gt;
&lt;br /&gt;
== Довжина ключа ==&lt;br /&gt;
Число ''n'' повинне мати розмір не менше 512 біт. У даний момент (2007 рік) система шифрування на основі RSA вважається надійною, починаючи з величини N в 1024 біта.&lt;br /&gt;
&lt;br /&gt;
== Застосування RSA ==&lt;br /&gt;
Система RSA використовується для захисту програмного забезпечення й у схемах [[цифровий підпис|цифрового підпису]].&lt;br /&gt;
Також вона використовується у відкритій системі шифрування [[PGP]].&lt;br /&gt;
&lt;br /&gt;
Через низьку швидкість шифрування (близько 30 кбіт/сек при 512 бітному ключі на процесорі 2 ГГц), повідомлення звичайно шифрують за допомогою більш продуктивних [[симетричний алгоритм шифрування|симетричних алгоритмів]] з випадковим ключем (''сеансовий ключ''), а за допомогою RSA шифрують лише цей ключ.&lt;/div&gt;</summary>
		<author><name>Natal ka</name></author>	</entry>

	</feed>