Во-первых, это очевидно верно без каких-либо ограничений на $b$. Например, для $b = 2^n-2$ мы получаем это $2^n - b = 2^n - (2^n-2) = 2$ является простым. Это скучно и, вероятно, не то, что вы имеете в виду (и вместо этого, я думаю, вы хотите $b$ небольшой).
Насколько мало $b$ мы должны ожидать, что это будет продолжаться?
Одна из интерпретаций теоремы о простых числах состоит в том, что простые числа имеют «плотность $1/\ln х$".
Это к тому, что когда $х = 2^{40}$ к $2^{60}$, мы (примерно) ожидаем $\примерно 1/40$ к $1/60$ числа быть простыми.
Существуют различные способы формализации этого (в зависимости от того, верите ли вы в гипотезу Римана), см. эта страница, особенно раздел "обобщения".
В любом случае, вывод должен быть таким.
- простые числа относительно «многочисленны», поэтому
- чтобы найти простые числа (желаемой формы), "просто посмотрите".
Это означает, что легко написать программу, которая ищет наименьшее положительное значение. $b$ такой, что $2^n-b$ является простым.
Ниже приведена программа Sage, которая должна продемонстрировать, насколько все просто (при условии, что реализовано тестирование на простоту).
защита find_b(n):
д = 2**п
б = 0
пока нет (q-b).is_prime():
б += 1
вернуть б
Поскольку вас интересуют случаи $2^{40}$ к $2^{60}$, я вычислил их для вас ниже
[(40, 87),
(41, 21),
(42, 11),
(43, 57),
(44, 17),
(45, 55),
(46, 21),
(47, 115),
(48, 59),
(49, 81),
(50, 27),
(51, 129),
(52, 47),
(53, 111),
(54, 33),
(55, 55),
(56, 5),
(57, 13),
(58, 27),
(59, 55),
(60, 93)].
Формат данных такой $(а,б)$ обозначает число $2^а-б$, так что, например, первая запись - это число $2^{40}-87$.
Все числа в приведенном выше списке являются простыми.
Более того, выбор $b$ в приведенном выше (как упоминалось ранее) всегда минимальный выбор такой, что $(а,б)$ является простым.
Выполнение этой программы чрезвычайно эффективно, на моем рабочем столе это заняло меньше секунды.
При этом точная структура $q_i$ которые допускают эффективную арифметику, немного сложнее, чем то, что вы описываете, по крайней мере, когда вы делаете вещи типа Ring-LWE (где вы используете полиномиальную арифметику).
Здесь возможность использовать теоретико-числовые преобразования (даже если только «неполные») весьма полезна.
Это накладывает довольно жесткие требования на точный вид выбранных модулей (для полных НТТ нужно $q\экв 1\bmod 2n$ при работе в $\mathbb{Z}_q[x]/(x^n+1)$ iirc). При этом эти оптимизации, возможно, немного сложнее с технической точки зрения, поэтому, возможно, их следует пропустить при изучении шифрования.