В математике и информатике сертификат простоты или доказательство простоты — это краткое формальное доказательство того, что число является простым. Сертификаты простоты позволяют быстро проверить простоту числа без необходимости проводить дорогостоящий или ненадежный тест на простоту . «Краткость» обычно означает, что доказательство должно быть не более чем полиномиально больше, чем количество цифр в самом числе (например, если число имеет b бит, доказательство может содержать примерно b 2 бит).
Сертификаты простоты ведут непосредственно к доказательствам того, что такие проблемы, как проверка простоты и дополнение целочисленной факторизации, лежат в NP — классе проблем, проверяемых за полиномиальное время при наличии решения. Эти проблемы уже тривиально лежат в co-NP . Это было первое весомое доказательство того, что эти проблемы не являются NP-полными , поскольку если бы они были таковыми, это означало бы, что NP является подмножеством co-NP, результат, который широко считался ложным; на самом деле, это была первая демонстрация проблемы в NP, пересекающей co-NP, о которой в то время не было известно, что она находится в P.
Создание сертификатов для задачи дополнения, чтобы установить, что число является составным, является простым: достаточно указать нетривиальный делитель. Стандартные вероятностные тесты на простоту, такие как тест простоты Бейли-ПСВ , тест простоты Ферма и тест простоты Миллера-Рабина, также производят сертификаты составности в случае, когда входные данные являются составными, но не производят сертификаты для простых входных данных.
Концепция сертификатов простоты была исторически введена сертификатом Пратта , задуманным в 1975 году Воганом Праттом [1] , который описал его структуру и доказал, что он имеет полиномиальный размер и может быть проверен за полиномиальное время. Он основан на тесте простоты Лукаса , который по сути является обратной теоремой малой теоремы Ферма с дополнительным условием, чтобы сделать его истинным:
При наличии такого a (называемого свидетелем ) и разложения на простые множители n − 1, легко и быстро проверить вышеуказанные условия: нам нужно только выполнить линейное число модульных возведений в степень, поскольку каждое целое число имеет меньше простых множителей, чем битов, и каждое из них можно выполнить путем возведения в степень путем возведения в квадрат за O(log n ) умножений (см. обозначение big-O ). Даже при умножении целых чисел в начальной школе это занимает всего O((log n ) 4 ) времени; используя алгоритм умножения с самым известным асимптотическим временем выполнения, созданный Дэвидом Харви и Йорисом ван дер Хувеном, мы можем снизить это время до O((log n ) 3 (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 . По индуктивной гипотезе, дерево с корнем в p i содержит не более значений, поэтому все дерево содержит не более
так как 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 , M y , A, B и q , затем рекурсивно кодируем доказательство простоты для q < n , продолжая до тех пор, пока не достигнем известного простого числа. Этот сертификат имеет размер O((log n ) 2 ) и может быть проверен за время O((log n ) 4 ). Более того, можно показать, что алгоритм, который генерирует эти сертификаты, имеет ожидаемое полиномиальное время для всех, кроме небольшой доли простых чисел, и эта доля экспоненциально уменьшается с размером простых чисел. Следовательно, он хорошо подходит для генерации сертифицированных больших случайных простых чисел, применение, которое важно в криптографических приложениях, таких как генерация доказуемо действительных ключей RSA .
Генерация доказуемых простых чисел на основе вариантов теоремы Поклингтона (см. тест на простоту Поклингтона ) [4] может быть эффективным методом генерации простых чисел (стоимость обычно меньше, чем у вероятностной генерации) с дополнительным преимуществом встроенных сертификатов простоты. Хотя они могут показаться особыми простыми числами, обратите внимание, что каждое простое целое число может быть сгенерировано с помощью алгоритма доказуемой генерации на основе Поклингтона.
Пусть где — различные простые числа с целым числом больше нуля и свидетелем, таким что:
Тогда P является простым, если выполняется одно из следующих условий:
Сертификат простоты Поклингтона состоит из простого числа P, набора простых чисел, делящих , каждое из которых имеет свой собственный сертификат простого числа Поклингтона или достаточно мало, чтобы быть известным простым числом, и свидетеля .
Количество бит, необходимое для этого сертификата (и порядок вычислительной стоимости), должно варьироваться приблизительно от для версии ( b ) до для версии ( a )
Пусть . Заметим, что и , .
"PRIMES is in P" [7] стала прорывом в теоретической информатике. Эта статья, опубликованная Маниндрой Агравалом , Нитином Саксеной и Нираджем Каял в августе 2002 года, доказывает, что знаменитая задача проверки простоты числа может быть решена детерминированно за полиномиальное время. Авторы получили за эту работу премию Гёделя 2006 года и премию Фулкерсона 2006 года.
Поскольку проверка простоты теперь может быть выполнена детерминированно за полиномиальное время с использованием теста простоты AKS , простое число само по себе может считаться сертификатом своей собственной простоты. Этот тест выполняется за время Õ((log n ) 6 ). На практике этот метод проверки более затратен, чем проверка сертификатов Pratt, но не требует никаких вычислений для определения самого сертификата.