【问题标题】:Encryption using public/private keys between mobile client and server PHP在移动客户端和服务器 PHP 之间使用公钥/私钥进行加密
【发布时间】:2016-04-12 11:41:03
【问题描述】:

案例 1:从客户端到服务器的加密数据

需要在服务器中创建公钥/私钥。公钥提供给客户端。客户端使用公钥对其进行加密。服务器使用生成的私钥对其进行解密。

案例2:但是当数据从服务器发送到 客户端.??

该数据也应该被加密。是否应该为案例 1 创建相同的公共/私有密钥或生成新密钥?任何人都可以根据我的要求解释案例 2。

提前致谢。

【问题讨论】:

  • 你不能只使用 HTTPS 吗?
  • 我们已经在使用 HTTPS。客户希望在数据级别的协议下获得更高的安全性。我整天都在浏览上述主题。但到目前为止似乎没有任何希望。你能帮忙吗?

标签: php android encryption public-key-encryption private-key


【解决方案1】:

您可以在任何方向使用公钥/私钥加密。

因此您的客户端可以使用公钥加密,然后服务器可以使用私钥解密。 如果你的服务器用私钥加密,客户端可以用公钥解密。

【讨论】:

  • 感谢 Rene 的回答。所以我应该为案例 2 再创建一对。这意味着为了客户端和服务器之间的安全双向通信,我们需要一对公钥和私钥?
  • 不,我不会这样做,因为这将只得到一个反向密钥对。更好的是为服务器端的每个客户端创建一个密钥对。保持私有部分私有并将公钥发送给客户端。因为私钥加密也可以像公钥加密一样,反之亦然!
  • 但是 rene 使用上述技术,客户端将使用公钥加密,服务器将使用只有服务器知道的私钥解密。但是当服务器需要加密数据时该怎么办?将其作为响应发送给客户。我也需要保护
  • 服务器可以用他的私钥为客户端加密数据!!!然后客户端可以用公钥解密!!!
  • “如果您的服务器使用私钥加密,客户端可以使用公钥解密。” - 不。不。不。这不提供机密性(如加密),但只有真实性(如数字签名),但仅当签名的数据与它一起传输并且客户端使用验证密钥(公钥)验证签名正确时才有效。
【解决方案2】:

正如white paper on secure data encryption 及其支持材料中所述:

  1. 使用 HTTPS。
  2. 对于经过身份验证的第二层加密,请使用带有固定公钥的 libsodium(一个现代的跨平台密码库)。

PHP 示例

密钥生成

$bob_box_kp = \Sodium\crypto_box_keypair();
$bob_box_secretkey = \Sodium\crypto_box_secretkey($bob_box_kp);
$bob_box_publickey = \Sodium\crypto_box_publickey($bob_box_kp);

加密

$anonymous_message_to_bob = \Sodium\crypto_box_seal(
    $message,
    $bob_box_publickey
);

解密

$decrypted_message = \Sodium\crypto_box_seal_open(
    $anonymous_message_to_bob,
    $bob_box_kp
);
if ($decrypted_message === false) {
    // You have the wrong keypair or the message was tampered with.
}

Android 示例(使用Libstodium

密钥生成

byte[] secret_key = new byte[Box.SECRETKEYBYTES];
byte[] public_key = new byte[Box.PUBLICKEYBYTES];
Box.keypair(public_key, secret_key);

加密

Box.seal(
    ciphertextByteArray, // Output goes here
    plaintextByteArray,  // Your message
    public_key
);

解密

Box.sealOpen(
    plaintextOutputByteArray, // Decrypted data goes here
    ciphertextByteArray,      // Encrypted message received over the wire
    public_key,
    secret_key
);

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2016-02-27
    • 2016-05-27
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多