android — Шифрование с использованием открытых / закрытых ключей между мобильным клиентом и сервером Переполнение стека

Случай 1: зашифрованные данные с клиента на сервер

Необходимо создать открытый / закрытый ключ на сервере. Открытый ключ предоставляется клиенту. Клиент шифрует его с помощью открытого ключа. Сервер расшифровывает его, используя созданный закрытый ключ.

Случай 2: Но как насчет случая, когда данные с сервера отправляются на
сторона клиента.??

Эти данные также должны быть зашифрованы. Имеет ли тот же открытый / закрытый доступ, который был создан для работы с делом 1, или должен быть сгенерирован новый ключ?

Заранее спасибо.

1

Решение

Вы можете использовать шифрование с открытым / закрытым ключом в любом направлении.

Таким образом, ваш клиент может зашифровать с открытым ключом, а затем сервер может расшифровать с помощью закрытого ключа.
Если ваш сервер шифрует с помощью закрытого ключа, клиент может расшифровать с помощью открытого ключа.

0

Другие решения

Как указано в этом документ по безопасному шифрованию данных и его вспомогательный материал:

  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
);
2

По вопросам рекламы [email protected]