在DJB的多项式评估和消息认证的2.2节中,他描述了第一个可证明的安全身份验证器的构造,这是Gilbert、MacWilliams和Sloane的工作。
修正有限域k。合法发送方生成9个独立的统一随机秘密r1, r2, . . . , r8, s ∈ k。发送方私下会见合法接收方,并告知接收方相同的秘密r1, r2, . . . , r8, s。稍后,发送方希望通过公共网络向接收方发送消息m,其中m是由8个组件组成的m1, m2, . . . , m8 ∈ k序列。发送方将m与身份验证器a=m1r1+···+m8r8+s ∈ k一起传输。
很好。假设整个消息如下所示:
对不起,先生,我的灯已经亮了。
这个消息被方便地分解成一个由八个组件组成的序列。
最好的方法是什么?
发布于 2021-01-29 17:00:01
最好的方法是什么?
嗯,任何将字符串转换为值的方法(并且两个不同的字符串永远不会编码到相同的值集)都会工作,所以我不知道是否有一个杰出的‘最佳’。
一种简单的方法是获取每个组件的ASCII值,并将其解释为整数(实际上是k中的一个元素)。例如,字符串“对不起”在ASCII中是值0x73、0x6f、0x72、0x72、0x79),因此您只需将它们连接到单个值0x736f727279 = 495791010425;这就是您的值。
发布于 2021-01-29 16:58:55
规格化输入并使用UTF-8对其进行编码。这会给你带来八重奏弦。然后,特定的块大小取决于您正在使用的系统。对于Poly1305,将16字节长八进制字符串视为小端点整数.RFC8439提供了将由字节组成的消息转换为适当大小的块的方法(对于Poly1305,其他这样的系统需要不同的大小):
O将消息...divide为16字节块.最后一个可能更短:O将块读取为一个小的端点数。除了八位数之外,再加一点。对于一个16字节的块,这相当于在数字中添加2^128 .对于较短的块,可以是2^120,2^112,也可以是任何2的幂,都可以被8整除,直到2^8。o如果块不是17字节长(最后一个块),则用零填充它。如果您将这些块作为数字处理,则这是毫无意义的。
https://crypto.stackexchange.com/questions/87876
复制相似问题