我特别感兴趣的是知道AES-128-CTR密文的输出是否总是具有与输入明文相同的大小,或者可以以某种方式进行填充。从我使用openssl的测试来看,似乎是这样的。
我的输入(明文)是字节流(不是比特流)。输出密文大小是否有不同的字节流/比特流?
这个输出大小==输入大小是否适用于所有流密码?
发布于 2015-02-19 03:23:10
首先,我将从AES-CTR开始。这是一种将分组密码转换为流密码的模式。因为AES有128位的块大小,所以原语的输出以16字节为单位。如果您有一条3字节的消息,则从该块中保留3个字节,以便通过XOR加密明文。损坏的实现可能不会被截断。CTR需要一个Nonce,通常包含在密文中,通常长度为96位(12字节),使最终消息长度为15字节。萨尔萨和ChaCha也需要一个现在。
CTR模式的其他变体包括经过身份验证的GCM,该GCM将以实现定义的长度向密文中添加身份验证标记。
非one和身份验证标记通常是8位的倍数,所以如果您正在加密一个字节字符串,您应该得到一个字节字符串。解密消息所需的其他数据可以连接到密文,例如KDF迭代计数和盐类、密码或KDF标识符以及消息序列标识符。如果使用经过身份验证的模式,并将这些数据作为附加身份验证的数据处理,则需要按照规范对它们进行解密,即使没有它们,您可能仍然能够恢复明文。此外,经过身份验证的数据可能包括一些不属于密文的内容,例如发件人的电子邮件或IP地址。
有些流密码器不显式地需要一个Nonce,但是它们可以作为密钥的一部分进行处理,并且仍然需要包含在密文中。
在加密之前,各种实现可能会混淆或操作明文。明文压缩可以在很大程度上改变密文大小,或者完全没有影响,这取决于内容。混淆可以将整个消息压缩为140个字节,因此可以对其进行明文编码,以填充整个SMS消息,从而隐藏真正的消息大小。
https://crypto.stackexchange.com/questions/23999
复制相似问题