Шифрование и дешифрование с помощью случайно сгенерированного ключа?

#web-applications #cryptography #bouncycastle #tripledes

#веб-приложения #криптография #bouncycastle #утроение

Вопрос:

Я программист j2me. Мой проект связан с отправкой данных на сервер через HTTP-метод. Я шифрую данные на стороне j2me с помощью Bouncy Castle (Triple DES). Я также поддерживаю кодирование на стороне сервера.

Затем на стороне сервера полученные данные расшифровываются и сохраняются в базе данных.

Здесь я предполагаю, что ключ статически находится в самом кодировании. На стороне сервера и на стороне j2me я использую одно и то же значение ключа.

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

В этом случае, если в части j2me данные шифруются с помощью некоторого ключа, то как сервер расшифровывает, не зная ключа?

Или есть какой-либо другой механизм, поэтому, пожалуйста, помогите решить возникшие проблемы.

Спасибо и с уважением, Sivakumar.J

Комментарии:

1. Я думаю, что желательна некоторая форма шифрования с открытым ключом / асимметричного шифрования : «… в отличие от алгоритмов с симметричным ключом, алгоритм с открытым ключом не требует безопасного первоначального обмена одним или несколькими секретными ключами между отправителем и получателем …».

2. Используйте криптографию с открытым ключом для обмена каким-либо сеансовым ключом, который является симметричным ключом (ваш ключ 3DES).

Ответ №1:

Есть несколько способов достичь вашей цели.

Один из способов сделать это — использовать некоторую форму протокола обмена ключами / соглашения, например, обмен ключами в стиле Диффи-Хеллмана (ср.http://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange ). Поскольку вы работаете в среде J2ME, вы, вероятно, захотите использовать недавнюю реализацию с использованием эллиптических кривых, поскольку они более щадящие для ваших требований к оборудованию.

Другим способом достижения вашей цели было бы внедрение протокола безопасной передачи ключей с использованием сертификатов открытых ключей, но я бы не рекомендовал изобретать свой собственный протокол безопасности, а использовать SSL / TLS, который был специально разработан для этих случаев.

В зависимости от ваших требований вам необходимо будет использовать SSL либо с аутентификацией на сервере («односторонний SSL»), либо с взаимной аутентификацией («двухсторонний SSL»). Обратитесь к документации вашего веб-сервера относительно правильной настройки SSL.

После настройки сервера достаточно создать симметричный ключ шифрования на клиенте, как это делается в данный момент, а затем отправить ключ шифрования на сервер, используя недавно настроенное TLS-соединение.

Преимущество решения Диффи-Хеллмана заключается в том, что оно не обязательно требует сертификатов, но для его безопасного использования вам потребуется реализовать некоторую форму функции получения ключа (см.http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf ) что опять-таки нетривиально. Поэтому я бы рекомендовал использовать второй подход, даже если это означает дополнительные затраты на настройку.