Асимметричное шифрование для Android с использованием KeyCzar
Я хочу создать приложение, которое шифрует сообщения для сервера с помощью открытого ключа сервера. Я думал использовать KeyCzar, но если у вас есть лучшие или другие хорошие идеи, я буду рад услышать.
Мои вопросы:
- Приложение должно сохранить открытый ключ. Где я должен хранить это?
- Как я могу зашифровать сообщения с помощью этого открытого ключа? Я не нашел асимметричных функций шифрования. (Приложение зашифрует симметричный ключ, а данные будут зашифрованы симметричным ключом)
Кстати, я должен использовать открытый ключ, потому что сообщения от одного отправителя не должны быть связаны получателем.
Будут благодарны ссылки и примеры такого гибридного шифрования или даже просто использования схемы шифрования с открытым ключом (с использованием KeyCzar или других рекомендуемых инструментов).
2 ответа
Для Keyczar API гибридного шифрования находятся в SessionCrypter.
В документации по версии на C# есть немного больше информации об этом, и по большей части она должна применяться к java.
Keyczar будет хранить все свои ключи в наборе ключей на диске, который по умолчанию позволяет вращать ключи. Но я видел его модифицированным для загрузки ключей из jar-ресурсов.
Я отвечу на ваши вопросы по порядку:
Где вы храните ключ, зависит от вас. Может быть, вы никогда не хотите обновить его. В этом случае вы можете сохранить его как ресурс или даже "жестко запрограммированный". В этом случае вы должны создать обновление для вашего приложения, чтобы обновить его. Открытые ключи являются открытыми, поэтому нет необходимости хранить их в безопасности. С другой стороны, вы можете добавить некоторый код, чтобы проверить, не изменилось ли ваше хранилище доверия. Вы также можете использовать хранилище ключей Java, например JKS, но в этом случае вам необходимо создать цепочку сертификатов. Просто отправка их в приложение не очень хорошая идея; вам нужен безопасный путь, чтобы избежать атак Man-in-the-Middle.
Несимметричное шифрование с RSA определенно определено в стандартах PKCS#1 (реализовано в провайдере Sun с использованием
Cipher
на Яве. Определены две схемы: схема PKCS#1 v1.5 и OAEP. Последнее более безопасно.