通过 SMS 通道安全传输应用程序数据

信息安全 加密 不对称 短信
2021-09-09 04:34:56

有些移动银行应用程序使用 SMS 通道与其服务器进行通信。其中一些提供互联网和短信渠道,客户可以从中选择。

虽然 OWASP、Enisa、Gartner 和其他组织提供了大量关于通过互联网进行安全通信的数据(如何实现 TLS、证书固定等),但似乎缺乏关于如何通过 SMS 通道安全传输数据的指南和教程。

关于 SMS 数据传输的安全架构,我想到了几个选项:

  • 类似于 PGP 的系统,其中服务器的公钥与应用程序捆绑在一起并驻留在客户手机上。应用程序使用此密钥和对称密钥来加密其数据。

  • 类似于 HTTPS 的系统,每次客户端和服务器通信时,他们就会话密钥达成一致,并使用该密钥对数据进行加密。

在客户端存储或生成对称密钥并且不使用公钥加密的其他解决方案通常是不安全的。

SMS 的长度有限,因此我们在此系统中的目标之一必须是使消息尽可能短,我们有哪些方法可以在不失去系统安全性的情况下实现这一目标。(它是否使第一个提议的选项(类似 PGP)更合适?)

在这种情况下,数据由服务器和客户端加密,完整性也是我们关心的问题,我们希望保持传输消息的数量/长度尽可能短,以最大限度地减少往返时间和发送的文本消息数量。

4个回答

TextSecure Messenger(现在称为 Signal)提供基于公钥加密方案的加密短信。但是,他们在一年前放弃了该功能根据博客文章,放弃支持的原因是 iPhone 无法正确执行此操作以及 SMS 的一般安全性差。

这当然只是一个例子——但它展示了一种加密内容和保护 SMS 消息完整性的可能方法。

我无法为您提供所涉及的密码学的详细信息 - 但也许值得研究一下 Textsecure / Signal / Silence (Textsecure fork)的文档和源代码。

SMS 上没有安全的数据传输。从将您的 SMS 同步到电子邮件的工具(例如 Exchange 和 Google Voice),这些数据暴露在来自或通过电信公司的各种信息泄露威胁中。

正如卢卡斯所说,加密您的数据然后通过短信发送是非常困难的。如果您要构建一个应用程序,那么为什么要使用 SMS 作为传输层呢?如果您不打算构建应用程序,那么 SMS 是不安全的。

我不知道有任何现有技术可以做到这一点。在我看来,任何类型的 PKI 都会涉及通过不受信任的运营商发送数据,并且似乎通常充满危险。此外,由于长度和不同的可能字符编码协议,您希望用于公钥的密钥长度甚至可能不适合单个 SMS。

我想到的唯一解决方案是使用 Diffe-Hellman 之类的东西来生成共享密钥,然后在 SMS 上使用对称加密,这同样可能会遇到字符编码问题。就像您提到的那样,此密钥将作为每次对话 (SIM-SIM) 密钥存储在设备上,该密钥可以从设备中提取并用于解密对话。

SMS 在这一点上已经使用了将近 30 年,而且在设计时根本没有考虑到安全性。面临此问题的大多数其他协议都需要被更安全的版本替换或被其他一些安全性包装。彩信安全性可能更有可能,但我对此知之甚少。

长话短说:由于遗留原因,无法对整个 SMS 进行加密。但是消息本身呢?

现在我并不是说您应该这样做,但是您可以轻松地使用密钥来加密您要发送的消息,然后以带有元信息的一些文本发送编码的消息,以将它们链接在一起。然后,您只需要另一种方式将密钥安全且私密地发送给其他人。这才是真正的问题。

当然,这显示了您应该考虑的真正问题: 为什么要使用 SMS 发送安全数据? 答案是你不应该