【问题标题】:Encrypt and decrypt messages between two systems加密和解密两个系统之间的消息
【发布时间】:2019-01-15 22:08:17
【问题描述】:

我有以下系统

Android 应用 -> kafka -> 监听服务(Java)。

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

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

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

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

【问题讨论】:

  • 有多少个应用会与监听服务通信?他们每个人都需要自己的钥匙吗?如果您的客户只与听众交谈,它可以持有它的公钥并且不需要任何证书颁发机构。
  • 加密本身不会为您提供数据完整性。可以使用消息上的身份验证标签来传递消息数据完整性,但您可能需要的还不止这些。尝试查找例如CMS 签名/加密消息。
  • 加密适用于证书或密钥。所以“没有证书或密钥”是不可能的。

标签: java android encryption cryptography data-integrity


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我认为最简单的实现方法是使用一些安全传输(https、sftp 等)使用加密通道

    如果您正在实施自定义协议,那么您将需要使用一些可用的库来加密/解密消息。

    是的,我建议使用标准加密算法(需要使用证书)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2018-02-04
      • 2011-09-30
      相关资源
      最近更新 更多