首页 > 解决方案 > 加密和解密两个系统之间的消息

问题描述

我有以下系统

Android 应用程序 -> kafka -> 侦听器服务(Java)。

我想确保此过程中的数据完整性。

我想在 Android 应用程序中加密消息,将其插入主题中,然后让侦听器拾取并解密消息。

我想知道在系统之间加密和解密的最佳方法(算法和实践)是什么。这可以通过简单的方式实现(没有证书或密钥)吗?

假设将有 5 个移动应用程序向代理推送消息。

标签: javaandroidencryptioncryptographydata-integrity

解决方案


我想确保此过程中的数据完整性。

如果您担心在传输过程中确保消息的完整性,则在大多数情况下使用 TLS(ssl、https)可以解决问题。如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密的消息),则需要对消息进行签名。在大多数情况下,您应该可以使用第一个选项 (https)。

这可以通过简单的方式实现(没有证书或密钥)吗?

PKI(证书和密钥)使我们能够确保完整性和机密性,而无需对秘密进行硬编码(这对于移动应用程序来说不是很明智)。您已经拥有用于 SSL 的开箱即用库,因此请认为它是“简单的方法”。构建自定义协议来签名和验证消息只会更复杂,而且可能更不安全。

我想知道在系统之间加密和解密的最佳方法(算法和实践)是什么。

对于基本的传输安全性,我建议依靠 TLS,您仍然需要对用户(用户名、密码?)进行身份验证以确保客户端的身份。TLS 提供到 SSL 终止点(https 服务器、kafka 侦听器......)的安全通道。

如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密的消息),有一些标准可以对消息进行加密和签名,例如 Web 服务的 WS-Security 或者您可以使用已签名和加密的 JWT 传递消息。

但是 - 您必须在客户端和验证后端之间安全地交换密钥(使用单独的服务或某些密钥交换协议)。


推荐阅读