Случай 1: зашифрованные данные с клиента на сервер
Необходимо создать открытый / закрытый ключ на сервере. Открытый ключ предоставляется клиенту. Клиент шифрует его с помощью открытого ключа. Сервер расшифровывает его, используя созданный закрытый ключ.
Случай 2: Но как насчет случая, когда данные с сервера отправляются на
сторона клиента.??
Эти данные также должны быть зашифрованы. Имеет ли тот же открытый / закрытый доступ, который был создан для работы с делом 1, или должен быть сгенерирован новый ключ?
Заранее спасибо.
Вы можете использовать шифрование с открытым / закрытым ключом в любом направлении.
Таким образом, ваш клиент может зашифровать с открытым ключом, а затем сервер может расшифровать с помощью закрытого ключа.
Если ваш сервер шифрует с помощью закрытого ключа, клиент может расшифровать с помощью открытого ключа.
Как указано в этом документ по безопасному шифрованию данных и его вспомогательный материал:
Генерация ключей
$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.
}
Генерация ключей
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
);