Решето числового поля: відмінності між версіями
[неперевірена версія] | [неперевірена версія] |
NSArray (обговорення | внесок) мНемає опису редагування |
Tolsai (обговорення | внесок) Функція пропозицій посилань: додано 3 посилання. |
||
(Не показані 29 проміжних версій 16 користувачів) | |||
Рядок 1: | Рядок 1: | ||
У [[Теорія чисел|теорії чисел]] '''метод решета числового поля''' є |
У [[Теорія чисел|теорії чисел]] '''метод решета числового поля''' є найдієвішим серед [[алгоритм]]ів [[Факторизація цілих чисел|факторизації чисел]], що більші ніж 10<sup>100</sup>. [[Теорія складності обчислень|Складність]] факторизації цілого числа n за допомогою методу решета числового поля оцінюється евристичною формулою<ref>{{Cite book|url=http://www.ams.org/notices/199612/pomerance.pdf|title=A Tale of Two Sieves|last=Pomerance|first=Carl|year=1996|publisher=|location=|pages=|language=|isbn=|accessdate=23 листопада 2016|archive-date=11 листопада 2020|archive-url=https://web.archive.org/web/20201111201448/https://www.ams.org/notices/199612/pomerance.pdf}}</ref>: |
||
<math>\exp(\sqrt[3]{64 \over 9}(\ln n)^{1 \over 3}(\ln \ln n)^{2 \over 3}) = L_n \left [ {1 \over 3},\sqrt[3]{64 \over 9} \right ]</math> |
<math>\exp(\sqrt[3]{64 \over 9}(\ln n)^{1 \over 3}(\ln \ln n)^{2 \over 3}) = L_n \left [ {1 \over 3},\sqrt[3]{64 \over 9} \right ]</math> |
||
Метод є узагальненням спеціального |
Метод є узагальненням спеціального решета числового поля. На відміну від останнього, котрий факторизує тільки числа спеціального вигляду, працює на всій множині цілих чисел, окрім степенів простих чисел. |
||
== Історія == |
== Історія == |
||
У [[1988|1988 році]] британський математик |
У [[1988|1988 році]] британський математик {{нп|Джон Поллард||en|John_Pollard_(mathematician)}} описав новий метод факторизації цілих чисел вигляду <math>2^n\pm c</math> (де ''c'' — невелике число), і продемонстрував його розкладом сьомого [[числа Ферма]] <math>F_7=2^{128}+1</math>. На відміну від [[Квадратичне решето|методу квадратичного решета]], в якому просіювання здійснюється в кільці [[прості числа|простих натуральних чисел]], він пропонував застосувати [[Кільце (алгебра)|кільце]] простих чисел <math>Z([2^{ \frac{3}{2}}])</math> над числовим полем <math>Q(2^{\frac{3}{2}})</math>. Рукопис було вкладено в листа, адресованого польському математику {{нп|Андрій Одлизко|Андрію Одлизко|en|Andrew_Odlyzko}}. Копії цього листа отримали також {{нп|Річард Брент||en|Richard_P._Brent}}, [[Дж. Бріллхарт]], {{нп|Хедріх Ленстра||en|Hendrik_Lenstra}}, {{нп|Клаус Шорр||en|Claus_P._Schnorr}} та [[Х. Суяма]]. У тому листі Поллард припустив, що можливо цей метод можна застосувати для розкладу дев'ятого числа Ферма. |
||
У [[1990|1990 році]] |
У [[1990|1990 році]] {{нп|Ар'єн Ленстра|А. Ленстра||Arjen_Lenstra}}, Х. Ленстра, Марк Манассе і Поллард описали першу реалізацію нового методу з певною оптимізацією. Вони показали, що на числах спеціального виду алгоритм працює швидше, ніж усі інші раніше відомі алгоритми факторизації. |
||
Пізніше Леонард Макс Адлеман |
Пізніше Леонард Макс Адлеман запропонував застосувати ''квадратичний характер'' для пошуку квадратів у числовому полі. Це надало альтернативне розв'язання проблеми, піднятою Бухлером і {{нп|Карл Померанс|Померансом|en|Carl_Pomerance}}, і покращило очікуваний час роботи методу решета числового поля для чисел, які не мають спеціального виду<ref>{{Cite book|title=Factoring numbers using singular integers|last=Adleman|first=Leonard M.|year=1991|publisher=|location=|pages=|language=|isbn=0-89791-397-3}}</ref>. |
||
Того ж року А. Ленстра, Х. Ленстра, Манассе і Поллард |
Того ж року А. Ленстра, Х. Ленстра, Манассе і Поллард розклали методом решета числового поля дев'яте число Ферма й опублікували працю з багатьма подробицями цього розкладу<ref>{{Cite book|url=http://www.ams.org/journals/mcom/1993-61-203/S0025-5718-1993-1182953-4/home.html|title=The Factorization of the Ninth Fermat Number|last=A.K. Lenstra, H.W. Lenstra, Jr., M.S. Manasse, J.M. Pollard|first=|year=1993|publisher=|location=|pages=|language=|isbn=|accessdate=23 листопада 2016|archive-date=24 листопада 2016|archive-url=https://web.archive.org/web/20161124025611/http://www.ams.org/journals/mcom/1993-61-203/S0025-5718-1993-1182953-4/home.html}}</ref>. |
||
Нарешті, у |
Нарешті, у праці «Факторизація цілих чисел за допомогою решета числового поля» Бухлер, Х. Ленстра і Померанс описали застосування методу решета числового поля до чисел, які не мають спеціального виду<ref>{{Cite book|url=http://link.springer.com/chapter/10.1007%2FBFb0091539|title=Factoring integers with the number field sieve|last=J.P. Buhler, H.W. Lenstra, Carl Pomerance|first=|year=1993|publisher=|location=|pages=|language=|isbn=|accessdate=23 листопада 2016|archive-date=24 листопада 2016|archive-url=https://web.archive.org/web/20161124024937/http://link.springer.com/chapter/10.1007%2FBFb0091539}}</ref>. Їх алгоритм містив крок, що потребував обчислень із дуже великими числами. Джин-Марк Кувейгнес у своїй праці описав спосіб обійти цю потребу<ref>{{Cite book|url=http://link.springer.com/chapter/10.1007%2FBFb0091540|title=Computing A Square Root For The Number Field Sieve|last=Couveignes|first=Jean-Marc|year=1993|publisher=|location=|pages=|language=|isbn=|accessdate=23 листопада 2016|archive-date=24 листопада 2016|archive-url=https://web.archive.org/web/20161124025132/http://link.springer.com/chapter/10.1007%2FBFb0091540}}</ref>. |
||
Усі крапки над «і» було поставлено в збірці статей під редакцією А. Ленстри та Х. Ленстри.<ref>{{Cite book|title=The Development of the Number Field Sieve, Springer|last=A. K. Lenstra, H. W. Lenstra|first=|year=1993|publisher=|location=|pages=|language=|isbn=9783540570134}}</ref> Зокрема, збірка містила статтю Берштейна і А. Ленстри, яка описувала реалізацію загального решета числового поля<ref>{{Cite book|url=http://link.springer.com/chapter/10.1007%2FBFb0091541|title=A general number field sieve implementation|last=Couveignes|first=Jean-Marc|year=1993|publisher=|location=|pages=|language=|isbn=|accessdate=23 листопада 2016|archive-date=24 листопада 2016|archive-url=https://web.archive.org/web/20161124024802/http://link.springer.com/chapter/10.1007%2FBFb0091541}}</ref>. |
|||
== Числове поле == |
== Числове поле == |
||
Нехай <math>f</math> — це |
Нехай <math>f</math> — це многочлен <math>k</math>-го порядку на множині [[Раціональне число|раціональних чисел]] та <math>r</math> — це комплексний корінь <math>f</math>. Тоді <math>f(r) = 0</math>, що може бути перебудовано для того, щоб виразити <math>r^k</math>, як лінійну комбінацію степенів <math>r</math>, що менші ніж <math>k</math>. Цю рівність можна використати, щоб відкинути всі степені <math>r</math>, що більші або рівні <math>k</math>. Для прикладу <math>f(x) = x^2 + 1</math> та <math>r</math> — це уявна частина <math>i</math>, тоді <math>i^2+1 = 0</math> або <math>i^2 = -1</math>. Це дозволяє визначити добуток [[Комплексне число|комплексних чисел]]: |
||
<math>(a+bi)(c+di) = ac+(ad+bc)i + (bd)i^2 = (ac-bd)+(ad+bc)i</math>. |
<math>(a+bi)(c+di) = ac+(ad+bc)i + (bd)i^2 = (ac-bd)+(ad+bc)i</math>. |
||
У цілому, це прямо стосується [[Алгебраїчне числове поле|алгебраїчного числового поля]] <math>\mathbb{Q}[r]</math>, що може бути визначено як множина дійсних чисел типу: |
|||
<math>a_{k-1}r^{k-1}+...+a_1r^1+a_0r^0,</math> де <math>a_0,...,a_{k-1} \in \mathbb{Q}</math>. |
<math>a_{k-1}r^{k-1}+...+a_1r^1+a_0r^0,</math> де <math>a_0,...,a_{k-1} \in \mathbb{Q}</math>. |
||
Добуток двох довільних значень може бути обчислений за допомогою обрахування добутку поліномів. Тому |
Добуток двох довільних значень може бути обчислений за допомогою обрахування добутку поліномів. Тому вищеописане відкидання всіх степенів <math>r</math>, більших або рівних <math>k</math>, видає результат у тій самій формі. Щоб впевнитися, що поле є справді <math>k</math>-го порядку й не руйнується в меншому полі, достатньо показати, що <math>f</math> — [[незвідний многочлен]] на дійсних числах. Простіше кажучи, воно має утворювати [[кільце цілих чисел]] <math>\mathbb{O}_{\mathbb{Q}[r]}</math> як підмножину <math>\mathbb{Q}[r]</math>, де <math>a_0,...,a_{k-1}</math> — також цілі числа. У деяких випадках це кільце [[Ізоморфізм|ізоморфне]] кільцю <math>\mathbb{Z}[r]</math>.<ref>{{Cite book|title=Algebraic Numbers. Wiley-Interscience.|url=https://archive.org/details/algebraicnumbers0027ribe|last=Ribenboim, Paulo|first=|year=1972|publisher=|location=|pages=|language=|isbn=0471718041}}</ref> |
||
== Суть методу == |
== Суть методу == |
||
Метод решета числового поля (як |
Метод решета числового поля (як спеціального, так і загального) можна подати у вигляді вдосконаленого простішого методу раціонального решета, або ж методу [[квадратичне решето|квадратичного решета]]. Подібні до них алгоритми потребують знаходження [[гладке число|гладких чисел]] порядку <math>\sqrt{n}</math>. Розмір цих чисел експоненційно зростає зі зростанням <math>n</math>. Метод решета числового поля, в свою чергу потребує знаходження [[Гладке число|гладких чисел]] субекспоненційно відносно розміру <math>n</math>. Завдяки тому, що ці числа менші, імовірність того, що число такого розміру виявиться гладким, вища, що і є причиною ефективності методу решета числового поля. Для прискорення обчислення в тілі методу виконуються в [[Алгебраїчне числове поле|числових полях]], що ускладнює алгоритм, у порівнянні з простішим методом раціонального решета. |
||
=== Загальні принципи === |
=== Загальні принципи === |
||
* [[Метод факторизації Ферма]] для факторизації натуральних непарних чисел <math>n</math>, що |
* [[Метод факторизації Ферма]] для факторизації натуральних непарних чисел <math>n</math>, що полягає в пошуку таких цілих чисел <math>x</math> та <math>y</math>, що <math>x^2-y^2=n</math>, що веде до розкладу <math>n = (x-y)(x+y)</math>. |
||
* Знаходження підмножини множини |
* Знаходження підмножини множини цілих чисел, добуток яких — квадрат.<ref>{{Cite book|url=http://dha.spb.ru/PDF/cryptoFACTOR.pdf|title=Факторизация больших целых чисел и криптография|last=И. В. Агафонова|first=|year=|publisher=|location=|pages=|language=|isbn=|accessdate=28 листопада 2016|archive-date=26 лютого 2015|archive-url=https://web.archive.org/web/20150226032307/http://dha.spb.ru/PDF/cryptoFACTOR.pdf}}</ref> |
||
* Визначення |
* Визначення факторної бази: набору <math>\{ -1,p_1,p_2,.. .,p_n\}</math>, де <math>p_i</math> — це прості числа, причому такі, що <math>p_i \leq B</math>, для деякого <math>B</math>. |
||
* Просіювання виконується подібно до [[Решето Ератосфена|решета Ератосфена]]. Решетом |
* Просіювання виконується подібно до [[Решето Ератосфена|решета Ератосфена]]. Решетом слугують прості числа факторної бази та їхні степені. Під час просіювання число не «викреслюється», а ділиться на число з решета. Якщо в результаті число перетворилось на 1, то воно <math>B</math>-гладке. |
||
* Загальна ідея |
* Загальна ідея полягає в тому, що замість перебору чисел та перевірки, чи діляться їхні квадрати по модулю <math>n</math> на прості числа з факторної бази, перебираються прості числа із бази і одразу для всіх чисел типу <math>x^2-n</math> перевіряється, чи воно ділиться на дане просте число або його степінь. |
||
== |
== Алгоритм == |
||
Нехай <math>n</math> — непарне складене число, яке потрібно факторизувати. |
Нехай <math>n</math> — непарне [[складене число]], яке потрібно факторизувати. |
||
# Виберемо степінь [[Незвідний многочлен|незвідного многочлена]] <math>d\geq3</math> (при <math>d = 2</math> |
# Виберемо степінь [[Незвідний многочлен|незвідного многочлена]] <math>d\geq3</math> (при <math>d = 2</math> цей метод не буде швидшим у порівнянні з методом [[квадратичне решето|квадратичного решета]]). |
||
# |
# Оберемо таке ціле <math>m |
||
</math>, що <math>\lfloor n^{1/(d+1)}\rfloor < m < \lfloor n^{1/d} \rfloor</math>, і |
</math>, що <math>\lfloor n^{1/(d+1)}\rfloor < m < \lfloor n^{1/d} \rfloor</math>, і розкладемо <math>n</math> за основою <math>m</math>: <math>n = m^d + a_{d-1}x^{d-1}+...+a_0</math> (1) |
||
# |
# Пов'яжемо з розкладом (1) незвідний в [[Кільце (алгебра)|кільці]] <math>\mathbb{Z}[x]</math> поліномів з цілими коефіцієнтами многочлен <math>f_1(x) = x^d+a_{d-1}x^{d-1}+...+a_0</math> |
||
# Визначимо поліном просіювання <math>F_1(a,b)</math> як [[однорідний многочлен]] від двох змінних ''a'' та ''b:''<math>F_1(a,b) = b^df_1(a/b) = a^d+a_{d-1}a^{d-1}b+a_{d-2}a^{d-2}b^2+...+a_0b^d</math>(2). |
# Визначимо поліном просіювання <math>F_1(a,b)</math> як [[однорідний многочлен]] від двох змінних ''a'' та ''b:''<math>F_1(a,b) = b^df_1(a/b) = a^d+a_{d-1}a^{d-1}b+a_{d-2}a^{d-2}b^2+...+a_0b^d</math>(2). |
||
# Визначимо другий поліном <math>f_2(x) = x - m</math> і відповідний однорідний многочлен <math>F_2(a,b) = a - bm.</math> |
# Визначимо другий поліном <math>f_2(x) = x - m</math> і відповідний однорідний многочлен <math>F_2(a,b) = a - bm.</math> |
||
# |
# Оберемо два додатні числа <math>L_1</math> та <math>L_2 |
||
</math>, що визначають область просіювання: <math>SR = \{1<b<L_1-L_2\leq a \leq L_2 \}</math> |
</math>, що визначають область просіювання: <math>SR = \{1<b<L_1-L_2\leq a \leq L_2 \}</math> |
||
# Нехай ''θ — корінь'' <math>f_1(x).</math> Розглянемо кільце поліномів <math>\mathbb{Z}[\theta]</math>. Визначимо множину, що називається ''алгебраїчною факторною'' базою <math>FB_1</math>, що |
# Нехай ''θ — корінь'' <math>f_1(x).</math> Розглянемо кільце поліномів <math>\mathbb{Z}[\theta]</math>. Визначимо множину, що називається ''алгебраїчною факторною'' базою <math>FB_1</math>, що складається з многочленів першого порядку типу <math>a - b\theta</math> з нормою (2), що є простим числом. Ці многочлени — прості нерозкладні в кільці алгебраїчних цілих поля <math>K = \mathbb{Q}[\theta]</math>. Обмежимо абсолютні значення поліномів із <math>FB_1 |
||
</math>константою <math>B_1 |
</math>константою <math>B_1 |
||
</math>. |
</math>. |
||
# Визначимо ''раціональну факторну'' базу <math>FB_2 |
# Визначимо ''раціональну факторну'' базу <math>FB_2 |
||
</math>, що складається |
</math>, що складається з усіх простих чисел, що обмежені зверху константою <math>B_2 |
||
</math>. |
</math>. |
||
# Визначимо множину <math>FB_3 |
# Визначимо множину <math>FB_3 |
||
</math>, що називається ''факторною базою квадратичних |
</math>, що називається ''факторною базою квадратичних характерів''. Ця множина поліномів першого порядку <math>c - b\theta</math>, норма яких — просте число. Має виконуватися умова <math>FB_1\cap FB_3 = \emptyset .</math> |
||
# Виконаємо просіювання многочленів <math>\{ a - b\theta | (a,b)\in SR \}</math> з факторною базою <math>FB_1 |
# Виконаємо просіювання многочленів <math>\{ a - b\theta | (a,b)\in SR \}</math> з факторною базою <math>FB_1 |
||
</math> і цілих чисел <math>\{ a - bm | (a,b) \in SR \}</math>по факторній базі <math>FB_2 |
</math> і цілих чисел <math>\{ a - bm | (a,b) \in SR \}</math> по факторній базі <math>FB_2 |
||
</math>. |
</math>. У результаті отримаємо множину <math>M |
||
</math>, що складається з ''гладких пар'' <math>(a,b) |
</math>, що складається з ''гладких пар'' <math>(a,b) |
||
</math>, тобто таких пар <math>(a,b) |
</math>, тобто таких пар <math>(a,b) |
||
Рядок 68: | Рядок 68: | ||
</math>, поліном та число <math>a - b\theta |
</math>, поліном та число <math>a - b\theta |
||
</math> і <math>a - bm |
</math> і <math>a - bm |
||
</math> |
</math> розкладаються повністю по <math>FB_1 |
||
</math> та <math>FB_2 |
</math> та <math>FB_2 |
||
</math> відповідно. |
</math> відповідно. |
||
# |
# Знайдемо таку підмножину <math>S\subseteq M</math>, що <math>\prod_{(a,b) \in S} Nr(a - b\theta) = H^2, H \in \mathbb{Z};</math> <math>\prod_{(a,b) \in S} (a - bm) = B^2, B \in \mathbb{Z}</math> |
||
# Визначимо многочлен <math>g(\theta) = {f'_1}^2(\theta)\cdot \prod_{(a,b) \in S} (a - b\theta)</math>, де <math>{f'_1}(x)</math> — похідна <math>{f_1}(x)</math>. |
# Визначимо многочлен <math>g(\theta) = {f'_1}^2(\theta)\cdot \prod_{(a,b) \in S} (a - b\theta)</math>, де <math>{f'_1}(x)</math> — похідна <math>{f_1}(x)</math>. |
||
# Многочлен <math>g(\theta)</math> є повним квадратом |
# Многочлен <math>g(\theta)</math> є повним квадратом у кільці поліномів <math>\mathbb{Z}[\theta]</math>. Нехай тоді <math>a(\theta)</math> є коренем із <math>g(\theta)</math> та <math>B</math> — корінь із <math>B^2</math>. |
||
# Будуємо відображення <math>\phi : 0 \to m</math>, замінюючи поліном <math>\alpha(\theta)</math> числом <math>\alpha(m)</math>. Це відображення є кільцевим гомоморфізмом кільця алгебраїчних цілих чисел <math>\mathbb{Z}_K</math> в кільце <math>\mathbb{Z}</math>, звідки |
# Будуємо відображення <math>\phi : 0 \to m</math>, замінюючи поліном <math>\alpha(\theta)</math> числом <math>\alpha(m)</math>. Це відображення є кільцевим гомоморфізмом кільця алгебраїчних цілих чисел <math>\mathbb{Z}_K</math> в кільце <math>\mathbb{Z}</math>, звідки отримуємо співвідношення: <math>A^2 = g(m)^2 \equiv \phi(g(\alpha))^2 \equiv \phi({f'_1}^2(\theta)) \cdot \prod_{(a,b) \in S}(a-b\theta) \equiv {f'_1}^2(m) \cdot \prod (a-bm) \equiv {f'_1}^2(m)\cdot C^2 \pmod{n}</math> |
||
# Нехай <math>B = f'(m) \cdot C</math>. |
# Нехай <math>B = f'(m) \cdot C</math>. Знайдемо пару таких чисел <math>(A,B)</math>, що <math>A \equiv B \pmod{n}</math>. Тоді знайдемо дільник числа <math>n</math>, обчислюючи [[Найбільший спільний дільник|НСД]]<math>(n, A\pm B)</math>, як це робиться в методі квадратичного решета. |
||
Більш детальний опис алгоритму можна знайти тут<ref>{{Cite book|url=http://window.edu.ru/window_catalog/files/r73980/Monograph_ishm.pdf|title=Методы факторизации натуральных чисел|last=Ишмухаметов, Ш. Т.|first=|year=2011|publisher=|location=|pages=|language=|isbn=}}</ref> та тут<ref>{{Cite book|url=http://www.math.vt.edu/people/brown/doc/briggs_gnfs_thesis.pdf|title=An Introduction to the General Number|last=Briggs M.|first=|year=1998|publisher=|location=|pages=|language=|isbn=}}</ref> |
Більш детальний опис алгоритму можна знайти тут<ref>{{Cite book|url=http://window.edu.ru/window_catalog/files/r73980/Monograph_ishm.pdf|title=Методы факторизации натуральных чисел|last=Ишмухаметов, Ш. Т.|first=|year=2011|publisher=|location=|pages=|language=|isbn=}}{{Недоступне посилання|date=квітень 2019 |bot=InternetArchiveBot }}</ref> та тут<ref>{{Cite book|url=http://www.math.vt.edu/people/brown/doc/briggs_gnfs_thesis.pdf|title=An Introduction to the General Number|last=Briggs M.|first=|year=1998|publisher=|location=|pages=|language=|isbn=|accessdate=28 листопада 2016|archiveurl=https://web.archive.org/web/20170808213904/https://www.math.vt.edu/people/brown/doc/briggs_gnfs_thesis.pdf|archivedate=8 серпня 2017|deadurl=yes}}</ref> |
||
== Реалізації == |
== Реалізації == |
||
До 2007 року найбільш успішною реалізацією вважалось [[програмне забезпечення]] розроблене і розповсюджене Центром математики та інформатики ( |
До 2007 року найбільш успішною реалізацією вважалось [[програмне забезпечення]] розроблене і розповсюджене [[Centrum_Wiskunde_&_Informatica|Центром математики та інформатики]] (CWI) у Нідерландах, що розповсюджувалося під закритою ліцензією. |
||
У 2007 році Джейсон Пападопулос реалізував частину алгоритму, що займається кінцевою обробкою даних, так, щоб вона працювала швидше версії CWI. Цей код |
У 2007 році Джейсон Пападопулос реалізував частину алгоритму, що займається кінцевою обробкою даних, так, щоб вона працювала швидше версії CWI. Цей код увійшов у бібліотеку msieve<ref>{{cite web|title=Msieve announcements |url=https://www.mersenneforum.org/showthread.php?t=10144|work=mersenneforum.org|date=||accessdate=2023-10-13}}</ref>. Msieve написали Пападопулос та інші учасники проекту на [[C (мова програмування)|С]]. Вона містить реалізації метода решета числового поля й квадратичного решета. |
||
Деякі інші реалізації загального |
Деякі інші реалізації метода загального решета числового поля: |
||
* [https://escatter11.fullerton.edu/nfs/ NFS@Home] — дослідницький проект, |
* [https://escatter11.fullerton.edu/nfs/ NFS@Home] — дослідницький проект, який вивчає факторизацію великих чисел методом загального решета числового поля, що використовує мережу під'єднаних до проекту комп'ютерів для просіювання. |
||
* [[sourceforge:projects/ggnfs/|GGNFS@]] розповсюджується під [[ |
* [[sourceforge:projects/ggnfs/|GGNFS@]] розповсюджується під [[GPL]]. |
||
* [http://pgnfs.org pGNFS] |
* [http://pgnfs.org pGNFS] |
||
* [[sourceforge:projects/factor-by-gnfs/|factor by gnfs]] |
* [[sourceforge:projects/factor-by-gnfs/|factor by gnfs]] |
||
Рядок 93: | Рядок 93: | ||
== Досягнення == |
== Досягнення == |
||
У 1996 році |
У 1996 році цим методом було розкладено число RSA-130. Згодом цим же ж методом факторизували числа RSA-140 та RSA-155. На розклад останнього було витрачено 8000 [[MIPS]]-років машинного часу. 9 травня 2005 року Ф. Бар, М. Бом, Є. Франке та Т. Клейнжунг заявили, що за допомогою метода загального решета числового поля вони розклали RSA-200. |
||
У 2009 році групі науковців |
У 2009 році групі науковців зі Швейцарії, Японії, Франції, Нідерландів, Німеччини та США вдалося розкласти ключ стандарту RSA довжиною 768 бітів (тобто, близько 220 десяткових знаків). Згідно з описом роботи{{Джерело?}}, обчислення здійснювалось методом решета загального числового поля. Після публікації їх праці як надійну систему шифрування можна розглядати тільки RSA-ключі довжиною не менше 1024 біти. |
||
== |
== Див. також == |
||
* [[Факторизація цілих чисел]]. |
* [[Факторизація цілих чисел]]. |
||
== Примітки == |
== Примітки == |
||
{{reflist}} |
|||
{{Алгоритми теорії чисел}} |
|||
[[Категорія:Теорія чисел]] |
|||
[[Категорія:Алгоритми факторизації]] |
Поточна версія на 03:22, 23 квітня 2024
У теорії чисел метод решета числового поля є найдієвішим серед алгоритмів факторизації чисел, що більші ніж 10100. Складність факторизації цілого числа n за допомогою методу решета числового поля оцінюється евристичною формулою[1]:
Метод є узагальненням спеціального решета числового поля. На відміну від останнього, котрий факторизує тільки числа спеціального вигляду, працює на всій множині цілих чисел, окрім степенів простих чисел.
У 1988 році британський математик Джон Поллард[en] описав новий метод факторизації цілих чисел вигляду (де c — невелике число), і продемонстрував його розкладом сьомого числа Ферма . На відміну від методу квадратичного решета, в якому просіювання здійснюється в кільці простих натуральних чисел, він пропонував застосувати кільце простих чисел над числовим полем . Рукопис було вкладено в листа, адресованого польському математику Андрію Одлизко[en]. Копії цього листа отримали також Річард Брент[en], Дж. Бріллхарт, Хедріх Ленстра[en], Клаус Шорр[en] та Х. Суяма. У тому листі Поллард припустив, що можливо цей метод можна застосувати для розкладу дев'ятого числа Ферма.
У 1990 році А. Ленстра[en], Х. Ленстра, Марк Манассе і Поллард описали першу реалізацію нового методу з певною оптимізацією. Вони показали, що на числах спеціального виду алгоритм працює швидше, ніж усі інші раніше відомі алгоритми факторизації.
Пізніше Леонард Макс Адлеман запропонував застосувати квадратичний характер для пошуку квадратів у числовому полі. Це надало альтернативне розв'язання проблеми, піднятою Бухлером і Померансом[en], і покращило очікуваний час роботи методу решета числового поля для чисел, які не мають спеціального виду[2].
Того ж року А. Ленстра, Х. Ленстра, Манассе і Поллард розклали методом решета числового поля дев'яте число Ферма й опублікували працю з багатьма подробицями цього розкладу[3].
Нарешті, у праці «Факторизація цілих чисел за допомогою решета числового поля» Бухлер, Х. Ленстра і Померанс описали застосування методу решета числового поля до чисел, які не мають спеціального виду[4]. Їх алгоритм містив крок, що потребував обчислень із дуже великими числами. Джин-Марк Кувейгнес у своїй праці описав спосіб обійти цю потребу[5].
Усі крапки над «і» було поставлено в збірці статей під редакцією А. Ленстри та Х. Ленстри.[6] Зокрема, збірка містила статтю Берштейна і А. Ленстри, яка описувала реалізацію загального решета числового поля[7].
Нехай — це многочлен -го порядку на множині раціональних чисел та — це комплексний корінь . Тоді , що може бути перебудовано для того, щоб виразити , як лінійну комбінацію степенів , що менші ніж . Цю рівність можна використати, щоб відкинути всі степені , що більші або рівні . Для прикладу та — це уявна частина , тоді або . Це дозволяє визначити добуток комплексних чисел:
.
У цілому, це прямо стосується алгебраїчного числового поля , що може бути визначено як множина дійсних чисел типу:
де .
Добуток двох довільних значень може бути обчислений за допомогою обрахування добутку поліномів. Тому вищеописане відкидання всіх степенів , більших або рівних , видає результат у тій самій формі. Щоб впевнитися, що поле є справді -го порядку й не руйнується в меншому полі, достатньо показати, що — незвідний многочлен на дійсних числах. Простіше кажучи, воно має утворювати кільце цілих чисел як підмножину , де — також цілі числа. У деяких випадках це кільце ізоморфне кільцю .[8]
Метод решета числового поля (як спеціального, так і загального) можна подати у вигляді вдосконаленого простішого методу раціонального решета, або ж методу квадратичного решета. Подібні до них алгоритми потребують знаходження гладких чисел порядку . Розмір цих чисел експоненційно зростає зі зростанням . Метод решета числового поля, в свою чергу потребує знаходження гладких чисел субекспоненційно відносно розміру . Завдяки тому, що ці числа менші, імовірність того, що число такого розміру виявиться гладким, вища, що і є причиною ефективності методу решета числового поля. Для прискорення обчислення в тілі методу виконуються в числових полях, що ускладнює алгоритм, у порівнянні з простішим методом раціонального решета.
- Метод факторизації Ферма для факторизації натуральних непарних чисел , що полягає в пошуку таких цілих чисел та , що , що веде до розкладу .
- Знаходження підмножини множини цілих чисел, добуток яких — квадрат.[9]
- Визначення факторної бази: набору , де — це прості числа, причому такі, що , для деякого .
- Просіювання виконується подібно до решета Ератосфена. Решетом слугують прості числа факторної бази та їхні степені. Під час просіювання число не «викреслюється», а ділиться на число з решета. Якщо в результаті число перетворилось на 1, то воно -гладке.
- Загальна ідея полягає в тому, що замість перебору чисел та перевірки, чи діляться їхні квадрати по модулю на прості числа з факторної бази, перебираються прості числа із бази і одразу для всіх чисел типу перевіряється, чи воно ділиться на дане просте число або його степінь.
Нехай — непарне складене число, яке потрібно факторизувати.
- Виберемо степінь незвідного многочлена (при цей метод не буде швидшим у порівнянні з методом квадратичного решета).
- Оберемо таке ціле , що , і розкладемо за основою : (1)
- Пов'яжемо з розкладом (1) незвідний в кільці поліномів з цілими коефіцієнтами многочлен
- Визначимо поліном просіювання як однорідний многочлен від двох змінних a та b:(2).
- Визначимо другий поліном і відповідний однорідний многочлен
- Оберемо два додатні числа та , що визначають область просіювання:
- Нехай θ — корінь Розглянемо кільце поліномів . Визначимо множину, що називається алгебраїчною факторною базою , що складається з многочленів першого порядку типу з нормою (2), що є простим числом. Ці многочлени — прості нерозкладні в кільці алгебраїчних цілих поля . Обмежимо абсолютні значення поліномів із константою .
- Визначимо раціональну факторну базу , що складається з усіх простих чисел, що обмежені зверху константою .
- Визначимо множину , що називається факторною базою квадратичних характерів. Ця множина поліномів першого порядку , норма яких — просте число. Має виконуватися умова
- Виконаємо просіювання многочленів з факторною базою і цілих чисел по факторній базі . У результаті отримаємо множину , що складається з гладких пар , тобто таких пар , що НСД, поліном та число і розкладаються повністю по та відповідно.
- Знайдемо таку підмножину , що
- Визначимо многочлен , де — похідна .
- Многочлен є повним квадратом у кільці поліномів . Нехай тоді є коренем із та — корінь із .
- Будуємо відображення , замінюючи поліном числом . Це відображення є кільцевим гомоморфізмом кільця алгебраїчних цілих чисел в кільце , звідки отримуємо співвідношення:
- Нехай . Знайдемо пару таких чисел , що . Тоді знайдемо дільник числа , обчислюючи НСД, як це робиться в методі квадратичного решета.
Більш детальний опис алгоритму можна знайти тут[10] та тут[11]
До 2007 року найбільш успішною реалізацією вважалось програмне забезпечення розроблене і розповсюджене Центром математики та інформатики (CWI) у Нідерландах, що розповсюджувалося під закритою ліцензією.
У 2007 році Джейсон Пападопулос реалізував частину алгоритму, що займається кінцевою обробкою даних, так, щоб вона працювала швидше версії CWI. Цей код увійшов у бібліотеку msieve[12]. Msieve написали Пападопулос та інші учасники проекту на С. Вона містить реалізації метода решета числового поля й квадратичного решета.
Деякі інші реалізації метода загального решета числового поля:
- NFS@Home — дослідницький проект, який вивчає факторизацію великих чисел методом загального решета числового поля, що використовує мережу під'єднаних до проекту комп'ютерів для просіювання.
- GGNFS@ розповсюджується під GPL.
- pGNFS
- factor by gnfs
- CADO-NFS
- kmGNFS
У 1996 році цим методом було розкладено число RSA-130. Згодом цим же ж методом факторизували числа RSA-140 та RSA-155. На розклад останнього було витрачено 8000 MIPS-років машинного часу. 9 травня 2005 року Ф. Бар, М. Бом, Є. Франке та Т. Клейнжунг заявили, що за допомогою метода загального решета числового поля вони розклали RSA-200.
У 2009 році групі науковців зі Швейцарії, Японії, Франції, Нідерландів, Німеччини та США вдалося розкласти ключ стандарту RSA довжиною 768 бітів (тобто, близько 220 десяткових знаків). Згідно з описом роботи[джерело?], обчислення здійснювалось методом решета загального числового поля. Після публікації їх праці як надійну систему шифрування можна розглядати тільки RSA-ключі довжиною не менше 1024 біти.
- ↑ Pomerance, Carl (1996). A Tale of Two Sieves (PDF). Архів оригіналу (PDF) за 11 листопада 2020. Процитовано 23 листопада 2016.
- ↑ Adleman, Leonard M. (1991). Factoring numbers using singular integers. ISBN 0-89791-397-3.
- ↑ A.K. Lenstra, H.W. Lenstra, Jr., M.S. Manasse, J.M. Pollard (1993). The Factorization of the Ninth Fermat Number. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
- ↑ J.P. Buhler, H.W. Lenstra, Carl Pomerance (1993). Factoring integers with the number field sieve. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
- ↑ Couveignes, Jean-Marc (1993). Computing A Square Root For The Number Field Sieve. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
- ↑ A. K. Lenstra, H. W. Lenstra (1993). The Development of the Number Field Sieve, Springer. ISBN 9783540570134.
- ↑ Couveignes, Jean-Marc (1993). A general number field sieve implementation. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
- ↑ Ribenboim, Paulo (1972). Algebraic Numbers. Wiley-Interscience. ISBN 0471718041.
- ↑ И. В. Агафонова. Факторизация больших целых чисел и криптография (PDF). Архів оригіналу (PDF) за 26 лютого 2015. Процитовано 28 листопада 2016.
- ↑ Ишмухаметов, Ш. Т. (2011). Методы факторизации натуральных чисел (PDF).[недоступне посилання з квітня 2019]
- ↑ Briggs M. (1998). An Introduction to the General Number (PDF). Архів оригіналу (PDF) за 8 серпня 2017. Процитовано 28 листопада 2016.
- ↑ Msieve announcements. mersenneforum.org. Процитовано 13 жовтня 2023.
{{cite web}}
: Cite має пустий невідомий параметр:|1=
(довідка)