Решето числового поля: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
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=}}</ref>:
У [[Теорія чисел|теорії чисел]] '''метод решета числового поля''' є найдієвішим серед [[алгоритм]]ів [[Факторизація цілих чисел|факторизації чисел]], що більші ніж 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 році]] британський математик [[Джон Поллард]] ''([[:en:John_Pollard_(mathematician)|англ.]])'' описав новий метод факторизації цілих чисел спеціального вигляду <math>(2^n\pm C)</math>, продемонструвавши його розкладом сьомого числа Ферма <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|англ]].)'' та [[Х. Суяма]]. В тому листі Поллард припустив, що можливо цей метод може бути використаний для розкладу дев'ятого числа Ферма.
У [[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 році]] [[А.Ленстра]]''([[:en:Arjen_Lenstra|англ.]])'', Х.Ленстра, Марк Манассе і Поллард описали першу реалізація нового метода з певною оптимізацією. Вони показали, що на числах спеціального виду алгоритм працює швидше, ніж всі інші раніш відомі методи факторизації любих цілих чисел.
У [[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>
Пізніше Леонард Макс Адлеман запропонував застосувати ''квадратичний характер'' для пошуку квадратів у числовому полі. Це надало альтернативне розв'язання проблеми, піднятою Бухлером і {{нп|Карл Померанс|Померансом|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=}}</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=}}</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=}}</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=}}</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>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>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>\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.|last=Ribenboim, Paulo|first=|year=1972|publisher=|location=|pages=|language=|isbn=0471718041}}</ref>
Добуток двох довільних значень може бути обчислений за допомогою обрахування добутку поліномів. Тому вищеописане відкидання всіх степенів <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>\sqrt{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>.
* [[Метод факторизації Ферма]] для факторизації натуральних непарних чисел <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=}}</ref>
* Знаходження підмножини множини цілих чисел, добуток яких — квадрат.<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>.
* Визначення факторної бази: набору <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>-гладке.
* Просіювання виконується подібно до [[Решето Ератосфена|решета Ератосфена]]. Решетом слугують прості числа факторної бази та їхні степені. Під час просіювання число не «викреслюється», а ділиться на число з решета. Якщо в результаті число перетворилось на 1, то воно <math>B</math>-гладке.
* Загальна ідея заключається в тому, що замість перебору чисел та провірки, чи діляться їх квадрати по модулю <math>n</math> на прості числа із факторної бази, перебираються прості числа із бази і одразу для всіх чисел типу <math>x^2-n</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>m
</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)
</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>
# Пов'яжемо з розкладом (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>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>a - b\theta</math> з нормою (2), що є простим числом. Ці многослени — прості нерозкладні в кільці алгебраїчних цілих поля <math>K = \mathbb{Q}[\theta]</math>. Обмежимо абсолютні значення поліномів із <math>FB_1
# Нехай ''θ — корінь'' <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>B_2
</math>, що складається з усіх простих чисел, що обмежені зверху константою <math>B_2
</math>.
</math>.
# Визначимо множину <math>FB_3
# Визначимо множину <math>FB_3
</math>, що називається ''факторною базою квадратичних типів.'' Ця множина поліномів першого порядку <math>c - b\theta</math>, норма яких — просте число. Повинна виконуватися умова <math>FB_1\cap FB_3 = \emptyset .</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>M
</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>FB_1
</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>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>\mathbb{Z}[\theta]</math>. Нехай тоді <math>a(\theta)</math> є коренем із <math>g(\theta)</math> та <math>B</math> — корінь із <math>B^2</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>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>\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>(A,B)</math> , що <math>A \equiv B \pmod{n}</math>. Тоді знайдемо дільник числа <math>n</math>, обчислюючи [[Найбільший спільний дільник|НСД]]<math>(n, A\pm B)</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 року найбільш успішною реалізацією вважалось [[програмне забезпечення]] розроблене і розповсюджене Центром математики та інформатики ([[:en:Centrum_Wiskunde_&_Informatica|CWI]]) в Нідерландах, що розповсюджувалися під закритою ліцензією.
До 2007 року найбільш успішною реалізацією вважалось [[програмне забезпечення]] розроблене і розповсюджене [[Centrum_Wiskunde_&_Informatica|Центром математики та інформатики]] (CWI) у Нідерландах, що розповсюджувалося під закритою ліцензією.


У 2007 році Джейсон Пападопулос реалізував частину алгоритму, що займається кінцевою обробкою даних, так, щоб вона працювала швидше версії CWI. Цей код входить у бібліотеку msieve. Msieve написана Пападопулосом та іншими учасниками проекта на [[C (мова програмування)|С]] і вміщує в собі реалізації метода числового поля і квадратичного решета.
У 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@]] розповсюджується під [[:ru:GNU_General_Public_License|GPL]].
* [[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 році за допомогою алгоритма було отримано розклад числа RSA-130. Згодом за допомогою того ж метода були факторизовані числа RSA-140 та RSA-155. На розклад останнього було витрачено 8000 MIPS-років машинного часу. 9 травня 2005 року Ф. Бар, М. Бом, Є. Франке та Т. Клейнжунг заявили, що вони розклали RSA-200 за допомогою загального метода решета числового поля.
У 1996 році цим методом було розкладено число RSA-130. Згодом цим же ж методом факторизували числа RSA-140 та RSA-155. На розклад останнього було витрачено 8000 [[MIPS]]-років машинного часу. 9 травня 2005 року Ф. Бар, М. Бом, Є. Франке та Т. Клейнжунг заявили, що за допомогою метода загального решета числового поля вони розклали RSA-200.


У 2009 році групі науковців із Швейцарії, Японії, Франції, Нідерландів, Германії та США вдалося вдало обчислити дані, закодовані за допомогою криптокрафічного ключа стандарту RSA довжиною 768 бітів. Згідно з описом роботи, обчислення значень ключа здійснювалось загальним методом решета числового поля. Після їх роботи як надійну систему шифрування можна розглядати тільки RSA-ключі довжиною не менше ніж 1024 біти.
У 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. Виберемо степінь незвідного многочлена (при цей метод не буде швидшим у порівнянні з методом квадратичного решета).
  2. Оберемо таке ціле , що , і розкладемо за основою : (1)
  3. Пов'яжемо з розкладом (1) незвідний в кільці поліномів з цілими коефіцієнтами многочлен
  4. Визначимо поліном просіювання як однорідний многочлен від двох змінних a та b:(2).
  5. Визначимо другий поліном і відповідний однорідний многочлен
  6. Оберемо два додатні числа та , що визначають область просіювання:
  7. Нехай θ — корінь Розглянемо кільце поліномів . Визначимо множину, що називається алгебраїчною факторною базою , що складається з многочленів першого порядку типу з нормою (2), що є простим числом. Ці многочлени — прості нерозкладні в кільці алгебраїчних цілих поля . Обмежимо абсолютні значення поліномів із константою .
  8. Визначимо раціональну факторну базу , що складається з усіх простих чисел, що обмежені зверху константою .
  9. Визначимо множину , що називається факторною базою квадратичних характерів. Ця множина поліномів першого порядку , норма яких — просте число. Має виконуватися умова
  10. Виконаємо просіювання многочленів з факторною базою і цілих чисел по факторній базі . У результаті отримаємо множину , що складається з гладких пар , тобто таких пар , що НСД, поліном та число і розкладаються повністю по та відповідно.
  11. Знайдемо таку підмножину , що
  12. Визначимо многочлен , де — похідна .
  13. Многочлен є повним квадратом у кільці поліномів . Нехай тоді є коренем із та — корінь із .
  14. Будуємо відображення , замінюючи поліном числом . Це відображення є кільцевим гомоморфізмом кільця алгебраїчних цілих чисел в кільце , звідки отримуємо співвідношення:
  15. Нехай . Знайдемо пару таких чисел , що . Тоді знайдемо дільник числа , обчислюючи НСД, як це робиться в методі квадратичного решета.

Більш детальний опис алгоритму можна знайти тут[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 біти.

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Pomerance, Carl (1996). A Tale of Two Sieves (PDF). Архів оригіналу (PDF) за 11 листопада 2020. Процитовано 23 листопада 2016.
  2. Adleman, Leonard M. (1991). Factoring numbers using singular integers. ISBN 0-89791-397-3.
  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.
  4. J.P. Buhler, H.W. Lenstra, Carl Pomerance (1993). Factoring integers with the number field sieve. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
  5. Couveignes, Jean-Marc (1993). Computing A Square Root For The Number Field Sieve. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
  6. A. K. Lenstra, H. W. Lenstra (1993). The Development of the Number Field Sieve, Springer. ISBN 9783540570134.
  7. Couveignes, Jean-Marc (1993). A general number field sieve implementation. Архів оригіналу за 24 листопада 2016. Процитовано 23 листопада 2016.
  8. Ribenboim, Paulo (1972). Algebraic Numbers. Wiley-Interscience. ISBN 0471718041.
  9. И. В. Агафонова. Факторизация больших целых чисел и криптография (PDF). Архів оригіналу (PDF) за 26 лютого 2015. Процитовано 28 листопада 2016.
  10. Ишмухаметов, Ш. Т. (2011). Методы факторизации натуральных чисел (PDF).[недоступне посилання з квітня 2019]
  11. Briggs M. (1998). An Introduction to the General Number (PDF). Архів оригіналу (PDF) за 8 серпня 2017. Процитовано 28 листопада 2016.
  12. Msieve announcements. mersenneforum.org. Процитовано 13 жовтня 2023. {{cite web}}: Cite має пустий невідомий параметр: |1= (довідка)