Я хотел бы убедиться в целостности данных в этом процессе.
Если вы заинтересованы в обеспечении целостности сообщения во время транспортировки, использование TLS (ssl, https) поможет в большинстве случаев. Если вам нужна сквозная защита (подписанное, зашифрованное сообщение) между другими компонентами (kafka-> Java), вам нужно будет подписать сообщение. В большинстве случаев вы должны быть в порядке с первым вариантом (https).
Может ли это быть достигнуто простым способом (без сертификатов или ключей)?
PKI (сертификаты и ключи) позволяет нам гарантировать целостность и конфиденциальность без жесткого кодирования секретов (что не очень разумно для мобильных приложений). У вас уже есть готовые библиотеки для SSL, так что считайте это «простым способом». Создание собственного протокола для подписи и проверки сообщений является только более сложным и, возможно, менее безопасным.
Я хотел бы знать, каков наилучший способ (алгоритм и практика) для шифрования и дешифрования между системами.
Для обеспечения базовой безопасности транспорта я бы рекомендовал полагаться на TLS, но вам все равно нужно аутентифицировать пользователя (имя пользователя, пароль?), Чтобы гарантировать идентичность клиента. TLS обеспечивает безопасный канал до точки завершения SSL (сервер https, слушатель kafka, ..).
Если вам нужна сквозная защита (подписанное, зашифрованное сообщение) между другими компонентами (kafka-> Java), существуют некоторые стандарты для шифрования и подписи сообщений, такие как WS-Security для веб-служб или вы можете использовать подписанные и зашифрованные JWT для передачи сообщений.
Однако - вам придется безопасно обмениваться ключами между клиентом и проверяющим бэкэндом (с отдельной службой или некоторым протоколом обмена ключами).