如何将消息转换为多项式?

时间:2009-10-13 19:52:28

标签: encryption cryptography ntruencrypt

我正在做一个我必须实现NTRUEncrypt公钥密码系统的项目。这是根据他们加密指南的第一步 - “爱丽丝,想要向Bob发送一个秘密消息,将她的消息以多项式m的形式放入系数{-1,0,1}”。我想知道如何将我的信息变成多项式。谢谢。

2 个答案:

答案 0 :(得分:6)

你可以随心所欲地去做。也许最直接的方法是将您的消息转换为三元表示

"Hello" -> 72, 101, 108, 108, 111 -> 02200, 10202, 11000, 11000, 11010

所以我将字符转换为ASCII表示,然后将这些表示转换为三元表示(假设我只限于7位ASCII空间,我只需要五个三进制数字)。

然后通过将三进制数字{-1, 0, 1}映射到0,将三进制数字0映射到1,将三元表示转换为1上的多项式三元数2-1并假设对应于3 ^ k的数字是x ^ k 1 的系数:

02200 -> p1(x) = 0 +    0 * x + (-1) * x^2 + (-1) * x^3 + 0 * x^4
10202 -> p2(x) = (-1) + 0 * x + (-1) * x^2 +    0 * x^3 + 1 * x^4
11000 -> p3(x) = 0    + 0 * x +    0 * x^2 +    1 * x^3 + 1 * x^4
11000 -> p4(x) = 0    + 0 * x +    0 * x^2 +    1 * x^3 + 1 * x^4
11010 -> p5(x) = 0    + 1 * x +    0 * x^2 +    1 * x^3 + 1 * x^4

然后我的消息是

p1(x) + x^5 * p2(x) + (x^5)^2 * p3(x) + (x^5)^3 * p4(x) + (x^5)^4 * p5(x)

这样我的多项式系数

(0, 0, -1, -1, 0, -1, 0, -1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1).

无论你如何做,重点是你可以将你的信息表示为多项式,无论你喜欢什么。您最好找到从消息空间到{-1, 0, 1}上的多项式空间的双射,该空间很容易计算并且具有容易计算的逆。

1 这是转型的关键。五位三位数a 4 a 3 a {{ 1}} 2 a 1 a 完全对应于评估多项式{{1 }} 0 a 4 * x^4 + a 3 {{ 1}} {sub> * x^3 + a 2 * x^2 +a 1 * x + a。因此0上的多项式与三元数之间存在明显的一对一关系。

答案 1 :(得分:3)

我为NTRU工作,所以我很高兴看到这种兴趣。

IEEE标准1363.1-2008规定了如何使用最新的参数集实现NTRUEncrypt。它为二元 - >三元转换指定的方法是:

  

将每个三位数转换为两位   三元系数如下,和   连接产生的三元组   数量来获得[输出]。

{0, 0, 0} -> {0, 0}
{0, 0, 1} -> {0, 1}
{0, 1, 0} -> {0, -1}
{0, 1, 1} -> {1, 0}
{1, 0, 0} -> {1, 1}
{1, 0, 1} -> {1, -1}
{1, 1, 0} -> {-1, 0}
{1, 1, 1} -> {-1, 1}

转换回来:

  

转换每组两个三元组   系数为三位如下,   并连接结果位   获得[输出]的数量:

{0, 0} -> {0, 0, 0}
{0, 1} -> {0, 0, 1}
{0, -1} -> {0, 1, 0}
{1, 0} -> {0, 1, 1}
{1, 1} -> {1, 0, 0}
{1, -1} -> {1, 0, 1}
{-1, 0} -> {1, 1, 0}
{-1, 1} -> {1, 1, 1}
{-1, -1} -> set "fail" to 1 and set bit string to {1, 1, 1}

请注意,要安全地加密邮件,您不能简单地将邮件转换为trinary并应用原始NTRU加密。消息需要在加密前进行预处理,并在加密后进行后处理,以防止可能修改传输中的消息的主动攻击者。必要的处理在IEEE Std 1363.1-2008中规定,并在2003年的论文“NAEP:存在解密失败时的可证明安全性”中讨论(可从http://www.ntru.com/cryptolab/articles.htm#2003_3获得,但请注意,此描述针对的是二进制多项式而不是三元组。)

希望这有帮助。

@Bert:我们在不同时间推荐过二进制或三元多项式。三元多项式允许使用较短的密钥具有相同的安全性。然而,在过去我们认为二进制多项式允许q(大模数)为256.这对8位处理器很有吸引力。我们已经确定采用q = 256会降低安全性(特别是,它使得解密失败的可能性太大)。由于我们不再将小q作为目标,我们可以利用三元多项式来提供更小的密钥。