Асимметричное шифрование для Android с использованием KeyCzar

Я хочу создать приложение, которое шифрует сообщения для сервера с помощью открытого ключа сервера. Я думал использовать KeyCzar, но если у вас есть лучшие или другие хорошие идеи, я буду рад услышать.

Мои вопросы:

  1. Приложение должно сохранить открытый ключ. Где я должен хранить это?
  2. Как я могу зашифровать сообщения с помощью этого открытого ключа? Я не нашел асимметричных функций шифрования. (Приложение зашифрует симметричный ключ, а данные будут зашифрованы симметричным ключом)

Кстати, я должен использовать открытый ключ, потому что сообщения от одного отправителя не должны быть связаны получателем.

Будут благодарны ссылки и примеры такого гибридного шифрования или даже просто использования схемы шифрования с открытым ключом (с использованием KeyCzar или других рекомендуемых инструментов).

2 ответа

Решение

Для Keyczar API гибридного шифрования находятся в SessionCrypter.

В документации по версии на C# есть немного больше информации об этом, и по большей части она должна применяться к java.

Keyczar будет хранить все свои ключи в наборе ключей на диске, который по умолчанию позволяет вращать ключи. Но я видел его модифицированным для загрузки ключей из jar-ресурсов.

Я отвечу на ваши вопросы по порядку:

  1. Где вы храните ключ, зависит от вас. Может быть, вы никогда не хотите обновить его. В этом случае вы можете сохранить его как ресурс или даже "жестко запрограммированный". В этом случае вы должны создать обновление для вашего приложения, чтобы обновить его. Открытые ключи являются открытыми, поэтому нет необходимости хранить их в безопасности. С другой стороны, вы можете добавить некоторый код, чтобы проверить, не изменилось ли ваше хранилище доверия. Вы также можете использовать хранилище ключей Java, например JKS, но в этом случае вам необходимо создать цепочку сертификатов. Просто отправка их в приложение не очень хорошая идея; вам нужен безопасный путь, чтобы избежать атак Man-in-the-Middle.

  2. Несимметричное шифрование с RSA определенно определено в стандартах PKCS#1 (реализовано в провайдере Sun с использованием Cipher на Яве. Определены две схемы: схема PKCS#1 v1.5 и OAEP. Последнее более безопасно.

Другие вопросы по тегам