В математике и информатике сертификат простоты или доказательство простоты — это краткое формальное доказательство того, что число простое. Сертификаты простоты позволяют быстро проверить простоту числа без необходимости запуска дорогостоящего или ненадежного теста на простоту . «Краткое» обычно означает, что доказательство должно быть не более чем полиномиально большим, чем количество цифр в самом числе (например, если число имеет b бит, доказательство может содержать примерно b 2 бита).
Сертификаты простоты приводят непосредственно к доказательствам того, что такие проблемы, как проверка простоты и дополнение целочисленной факторизации, лежат в NP , классе проблем, проверяемых за полиномиальное время при наличии решения. Эти проблемы уже тривиально лежат в co-NP . Это было первое убедительное доказательство того, что эти проблемы не являются NP-полными , поскольку в противном случае это означало бы, что NP является подмножеством co-NP, а этот результат широко считается ложным; Фактически, это была первая демонстрация проблемы пересечения NP со-NP, о которой в то время не было известно, что она существует в P.
Получить сертификаты для задачи о дополнении, позволяющие установить, что число является составным, несложно: достаточно указать нетривиальный делитель. Стандартные вероятностные тесты на простоту, такие как тест на простоту Бэйли-ПСВ , тест на простоту Ферма и тест на простоту Миллера-Рабина, также создают сертификаты составности в случае, если входные данные являются составными, но не создают сертификаты для простых входных данных.
Концепция сертификатов простоты исторически была введена сертификатом Пратта , придуманным в 1975 году Воаном Праттом [1] , который описал его структуру и доказал, что он имеет полиномиальный размер и поддается проверке за полиномиальное время. Он основан на тесте простоты Люка , который по сути является обратной маленькой теоремой Ферма с добавленным условием, чтобы сделать ее истинной:
Учитывая такой a (называемый свидетелем ) и разложение на простые множители n - 1, легко быстро проверить вышеуказанные условия: нам нужно всего лишь выполнить линейное количество модульных возведений в степень, поскольку каждое целое число имеет меньше простых множителей, чем битов, и каждое из этих действий можно выполнить путем возведения в степень путем возведения в квадрат умножения O(log n ) (см. обозначение big-O ). Даже при умножении целых чисел в начальной школе это занимает всего O((log n ) 4 ) времени; используя алгоритм умножения с наиболее известным асимптотическим временем выполнения, алгоритм Шёнхаге – Штрассена , мы можем снизить это время до O((log n ) 3 (log log n )(log log log n )) времени или используя обозначение soft-O Õ((log n ) 3 ).
Однако можно обманом заставить верификатор принять составное число, задав ему «простую факторизацию» n - 1, включающую составные числа. Например, предположим, что мы утверждаем, что n = 85 является простым, предоставляя a = 4 и n - 1 = 6 × 14 в качестве «простой факторизации». Тогда (используя q = 6 и q = 14):
Мы могли бы ошибочно заключить, что 85 — простое число. Мы не хотим просто заставлять верификатор факторизовать число, поэтому лучший способ избежать этой проблемы — предоставить сертификаты простоты также для каждого из простых множителей n - 1, которые являются лишь меньшими экземплярами исходной проблемы. . Мы продолжаем рекурсивно таким образом, пока не достигнем числа, которое, как известно, является простым, например 2. В конечном итоге мы получаем дерево простых чисел, каждое из которых связано со свидетелем a . Например, вот полный сертификат Пратта на номер 229:
С помощью простого индуктивного доказательства (основанного на теореме 2 Пратта) можно показать, что это дерево доказательств содержит не более значений, отличных от 2. Результат справедлив для 3; вообще, возьмите p > 3 и пусть его дочерними элементами в дереве будут p 1 , ..., p k . По индуктивному предположению дерево с корнем в точке pi содержит не более значений, поэтому все дерево содержит не более
поскольку k ≥ 2 и p 1 ... p k = p - 1. Поскольку каждое значение имеет не более log n бит, это также демонстрирует, что размер сертификата составляет O((log n ) 2 ) бит.
Поскольку существуют значения O(log n ), отличные от 2, и для проверки каждого требуется не более одного возведения в степень (а возведение в степень доминирует во времени выполнения), общее время составляет O((log n ) 3 (log log n )(log log log n )), или Õ((log n ) 3 ), что вполне осуществимо для чисел в диапазоне, с которым обычно работают специалисты по теории вычислительных чисел.
Однако, хотя это полезно в теории и легко проверить, на самом деле создание сертификата Пратта для n требует факторизации n - 1 и других потенциально больших чисел. Это просто для некоторых специальных чисел, таких как простые числа Ферма , но в настоящее время гораздо сложнее, чем простая проверка на простоту для больших простых чисел общего вида.
Чтобы решить проблему эффективной генерации сертификатов для большего числа пользователей, в 1986 году Шафи Голдвассер и Джо Килиан описали новый тип сертификатов, основанный на теории эллиптических кривых . [2] Это, в свою очередь, было использовано AOL Аткином и Франсуа Мореном в качестве основы для сертификатов Аткина-Голдвассера-Килиана-Морена, которые представляют собой тип сертификатов, генерируемых и проверяемых системами проверки простоты эллиптических кривых . [3] Так же, как сертификаты Пратта основаны на теореме Лукаса, сертификаты Аткина-Голдвассера-Килиана-Морена основаны на следующей теореме Гольдвассера и Килиана (лемма 2 из «Почти все простые числа могут быть быстро сертифицированы»):
Технически эллиптическая кривая может быть построена только над полем и является полем только в том случае, если n простое, поэтому мы, похоже, предполагаем результат, который пытаемся доказать. Трудность возникает в алгоритме сложения эллиптических кривых, который принимает обратные значения в поле, которое может не существовать в . Однако можно показать (лемма 1 из «Почти все простые числа могут быть быстро сертифицированы»), что если мы просто выполняем вычисления так, как будто кривая четко определена, и ни в коем случае не пытаемся инвертировать элемент без обратного, результат все еще действителен; если мы встречаем элемент, не имеющий обратного, это устанавливает, что n является составным.
Чтобы получить сертификат из этой теоремы, мы сначала кодируем M x , My , A, B и q , затем рекурсивно кодируем доказательство простоты для q < n , продолжая до тех пор, пока не достигнем известного простого числа. Этот сертификат имеет размер O((log n ) 2 ) и может быть проверен за время O((log n ) 4 ). Более того, можно показать, что алгоритм, генерирующий эти сертификаты, требует полиномиального времени для всех простых чисел, кроме небольшой, и эта доля экспоненциально уменьшается с размером простых чисел. Следовательно, он хорошо подходит для генерации сертифицированных больших случайных простых чисел, что важно в криптографических приложениях, таких как генерация доказуемо действительных ключей RSA .
Доказуемая генерация простых чисел на основе вариантов теоремы Поклингтона (см. тест на простоту Поклингтона ) [4] может быть эффективным методом генерации простых чисел (затраты обычно меньше, чем вероятностная генерация) с дополнительным преимуществом встроенных сертификатов простоты. Хотя это может показаться особым простым числом, обратите внимание, что каждое простое целое число может быть сгенерировано с помощью доказуемого алгоритма генерации, основанного на Поклингтоне.
Пусть где где — различные простые числа с целым числом больше нуля и свидетелем таким, что:
Тогда P является простым, если выполняется одно из следующих условий:
Сертификат простоты Поклингтона состоит из простого числа P, множества простых чисел , делящих , каждое из которых имеет свой собственный сертификат простого числа Поклингтона или достаточно малое, чтобы быть известным простым числом, и свидетеля .
Биты, необходимые для этого сертификата (и порядок вычислительных затрат), должны варьироваться от приблизительно для версии ( b ) до версии ( a ).
Позволять . Обратите внимание, что и , .
«ПРАЙМС находится в Р» [7] стал прорывом в теоретической информатике. Эта статья, опубликованная Маниндрой Агравалом , Нитином Саксеной и Нираджем Каялом в августе 2002 года, доказывает, что знаменитая проблема проверки простоты числа может быть решена детерминированно за полиномиальное время. За эту работу авторы получили премию Гёделя 2006 г. и премию Фулкерсона 2006 г.
Поскольку тестирование на простоту теперь можно проводить детерминированно за полиномиальное время с помощью теста на простоту AKS , простое число само по себе может рассматриваться как сертификат своей собственной простоты. Этот тест выполняется за время Õ((log n ) 6 ). На практике этот метод проверки дороже, чем проверка сертификатов Пратта, но не требует каких-либо вычислений для определения самого сертификата.