We all know that in NTRUEncrypt, we need to generate private key $f$ such that:
\begin{equation} F_q(x)\equiv f(x)^{-1} \text{ in } \mathbb{Z}_q[x]/(x^N-1) \end{equation}
exists. However, Algorithm 1 in this article says that to guarantee the existence of $F_q(x)$ , we may set:
\begin{equation} f=1+pF(x) \end{equation} where $F(x)$ is a polynomial with very small coefficients. I am wondering:
- Why is it reasonable to have such choice to guarantee the existence of $F_q(x)$?(or say with a high probability)
- Whether this choice has been modified currently? For example, are there any better algorithms to accelerate the finding of $f$?
Remark: Actually, I am swamped in my final year project, which asks me to implement the NTRU PKC using cpp. I am confused about which algorithms should I choose to generate $f$.