【问题标题】:Secure RSA Exchange between two devices两台设备之间的安全 RSA 交换
【发布时间】:2017-03-09 07:32:33
【问题描述】:

假设我有一个密钥部分,它由设备 A(在本例中为 CryptoCard)创建,该密钥部分应存储在设备 B(在本例中为 SmartCard)上并按需返回。我想用 RSA 的私钥加密密钥部分并将公钥提供给设备 B。然后设备 B 可以解密它并用它自己的私钥对其进行加密存储它并在需要时将其发送回加密。

现在我想知道如何在不失去安全性的情况下交换公钥来解密密钥部分。因为将密钥和密钥并排发送会很愚蠢,因为它与发送解密的密钥相同,不是吗?

【问题讨论】:

    标签: java security encryption cryptography


    【解决方案1】:

    正常的程序是:

    1. 设备 B 将其公钥发送给设备 A
    2. 设备 A 用 B 的公钥加密秘密并将结果发送给 B
    3. 设备 B 使用其私钥解密该秘密。

    唯一棘手的部分是第 1 步,您必须绝对确定公钥确实来自设备 B,但不必保密。

    【讨论】:

    • “您必须绝对确定公钥确实来自设备 B”——确切地说,如果您不验证密钥属于声称它的设备。为了防止这种情况,一种常见的解决方案是使用根授权密钥对公钥进行签名。根公钥需要在所有设备中,以便设备可以验证其他设备的公钥。
    • @TheGreatContini 使用证书颁发机构实际上只是将密钥验证的负担转移给它。它不会改变主要问题。这真的取决于整个系统的设置,哪种方式更容易、更安全。
    • @Henrry 你对我的评论读得太多了。带有证书颁发机构的完整 PKI 设计太过分了。取而代之的是,只有一个根密钥,其公钥嵌入在每个制造的设备中。这是嵌入式安全中非常常见的解决方案。设备无需进行进一步验证,因为公钥已作为其固件的一部分嵌入。
    • @Henry 还有一个小问题:由于我的加密文件是在加密卡中构建密钥的关键部分,因此有人可以使用加密的密钥部分并使用这个加密的密钥在加密卡中构建密钥所以加密/解密消息传输之间没有区别,不是吗?
    • @Florian 不明白,如果无法解密,如何使用加密的密钥部分来构建密钥?或者加密卡是否都共享相同的密钥对? (他们不应该)
    【解决方案2】:

    你可以让B用自己的私钥加密密钥,然后发给A,让A用B的公钥解密,这样保证了不可否认性,而且密钥肯定来自B。

    【讨论】:

    • 自签名密钥可以由中间人生成。这并不能确保任何事情。
    • 啊,签名密钥可以被捕获和重放,是的,我同意。我同意上述建议使用根权限 (CA) 的已接受解决方案。