Dear all,
We would like to announce an analysis on NTRU+, one of three lattice-based KEMs proposed in the 1st round of KpqC competition. NTRU+ is based on the NTRU and the LWE assumption (LWE with binary secrets and ternary errors).
In NTRU+, they propose a new message encoding technique, SOTP (Semi-generalized One-Time Pad), which takes n-bit input (m) together with 2n-bit input (u), and outputs an n-dimensional ternary vector (M). It is defined by M:=SOTP(m,u=(u_1, u_2))=(m \oplus u_1) – u_2. In addition, a decoding algorithm called Inv is provided that inputs an n-dimensional ternary vector (M) with 2n-bit (u) and outputs n-bit (m), and is defined by m:=Inv(M, u=(u_1, u_2))=(M+u_2) \oplus u_1.
In the Inv algorithm, we observed that if the input ternary vector (M) is maliciously formed, it may be the case that the output is not a binary n-bit bit string. We also checked that, in the implementation, after they compute (M+u_2) \oplus u_1, they *enforce* the output to be a binary bit string (by putting &0x1 operation at the end, see the line 313, 337 in poly.c of the NTRU+ implementation). Shortly, the idea is to exploit this observation and construct a malicious ternary vector M’ (\neq M) from M (a legitimate output of SOTP function) satisfying that the decoding of M’, Inv(M’, u), is equal to m=Inv(M,u). This breaks the rigidity of SOTP, since SOTP(Inv(M’,u), u) is again M.
The attack strategy for the CCA-NTRU+ is summarized as follows. In the IND-CCA game, upon receiving the challenge ciphertext c*, an attacker can add a constant (e.g., 2) to the first component of the challenge ciphertext, and ask the decryption oracle to decrypt c’=c*+(2,0,\cdots,0). Then, the decryption oracle produces a decryption result which equals to the decryption of the challenge ciphertext with probability 1/4, and aborts with probability 3/4. If the decryption oracle aborts, then the attacker does the same for the second component of the challenge ciphertext, and repeat it for the next component until she achieves the secret key corresponding to c* as an answer (the attack succeeds in the 4-th trial in average). In the attached summary, we demonstrate the attack idea for small n (since it works regardless how large n is) and how to win the IND-CCA game.
To defend the attack, we recommend to add a verification process in the Inv algorithm to check if the output (or the intermediate value M+u_2) is binary and abort otherwise.
Best regards,
Joohee Lee.
--
You received this message because you are subscribed to the Google Groups "KpqC-bulletin" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kpqc-bulleti...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/kpqc-bulletin/85046215-f7fc-467b-97f5-23abaeae2ae0n%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/kpqc-bulletin/feeb30dc-21f0-4f7d-b4a5-fd7786083faen%40googlegroups.com.