Всем доброго времени суток.
Передо мною сейчас стоит такая практическая задача: необходимо строить многочлены над кольцами вычетов

, где M и N — простые числа бит эдак от 256. Желаемая "на глазок" степень таких многочленов около 32. Впрочем, и степень, и мощность кольца можно увеличивать. Однако, к этим многочленам есть несколько требований разной степени критичности.
- Их должно быть трудно факторизовать. Грубо говоря, их факторизация должна иметь примерно ту же трудоемкость, что и факторизация 1024-битных чисел.
- Очень хочется, чтобы построенный полином был приводим над полем
и неприводим — над кольцом
.
Собственно, вопросов у меня несколько.
Во-первых, я был бы благодарен за ссылки на актуальные методы факторизации полиномов над кольцами вычетов, с учетом достаточно большой степени полиномов и мощности кольца. Насколько я в курсе, это сейчас делается исключительно путем разложения кольца

в

, решением над каждым из этих полей и восстановлением окончательного решения по китайской теореме об остатках. Первая сложность на этом пути — это факторизация числа

, что уже неплохо. Это приводит к двум подвопросам: насколько эффективные существуют алгоритмы решения полиномиальных уравнений над конечными полями вида

, и насколько сложно восстановить итоговое решение? Теория мне более-менее понятна, но практика вызывает вопросы...
Во-вторых, как строить полиномы, удовлетворяющие второму требованию? Тут у меня вообще внятных идей нет, может быть посоветуете направление поиска?
UPD. И да, хотелось бы, чтобы генерация таких полиномов была достаточно быстрой :)
UPD2. По второй проблеме единственное, что приходит в голову — строить полиномы, приводимые над

и неприводимые над

, тогда они будут удовлетворять основному требованию. Но опять же, как это сделать, я не имею представления.