最近,我用Bouncy城堡和Crypto++做了一些ECC解密和加密。
经过努力,我终于实现了基本的功能:生成密钥对,解密和加密文本。它们都是在C++ (使用Crypto++)和Java (使用Crypto++城堡)中实现的,但我发现这两个项目的实现非常不同。
以下是我的两个相关问题:
发布于 2016-01-07 19:21:53
这是因为您不能像使用RSA那样直接使用EC加密进行加密(在安全填充之后)。取而代之的是ECDH,这基本上是关键协议。首先导入对方的公钥,然后使用相同的参数创建自己的密钥对。然后执行密钥协议,派生秘密密钥种子。然后,您只需丢弃临时需要的私钥。这可以根据实现隐式或显式地执行。
现在,如果您向另一方发送您的公钥,则另一方也可以执行密钥协议并检索秘密密钥种子。这个密钥种子用作(基)一个用于实际加密数据的秘密密钥。这一方案称为EC。
如前所述,需要包括发送方临时使用的公钥。此密钥通常是ECC私钥大小的一到两倍。如果您只得到30字节的密文,密钥大小为256位/ 32字节,那么公钥可能不包含在密文中。
当然,使用不同的https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation或https://en.wikipedia.org/wiki/Initialization_vector也会产生不同的效果。我们需要使用的协议、实现和库规范来确保这一点。
因此,不可以使密文(大得多)更小,因为您需要对公钥进行编码。但是,您可以使用带有零IV的隐式/命名曲线和点压缩+可能的CTR模式来使密文更小。
https://stackoverflow.com/questions/34651532
复制相似问题