在不受信任的设备上显示的信息的真实性

信息安全 验证 公钥基础设施 电子签名
2021-09-03 08:14:19

假设我有一个(蓝牙/usb)设备需要在外部电脑/手机上显示信息。是否有一种简单有效的方法来保证显示的信息没有被该 PC 或手机上的恶意软件更改?

我想到了一种可能的解决方案:设备可以生成一张唯一的图片(基于私钥),每次都在该图片上绘制信息文本,并将最终结果发送到智能手机。现在如果攻击者想要更改文本,它会在图像中创建空白,并且攻击者无法填补空白,因为他无法访问存储在受信任设备上的原始背景图片。只要最终用户能够识别图像,并且非常仔细地目视检查是否存在伪影,这可能是非常安全的吗?

有没有比我刚才提出的更好的解决方案?

4个回答

我对您的问题的理解如下:有一个有形设备可以产生数据并通过无线电(蓝牙)发送数据;以及接收所述数据并显示它的另一设备(例如,智能手机);问题是第二个设备不能被信任。所以问题是:我们能不能做点什么,这样我们就可以对显示的数据有信心,因为它是第一个设备发送的忠实表示?

一般来说,不,我们不能;骗子说谎。除非第一个设备发送的数据带有某种校验和或签名,第二个设备无法伪造或伪造(数字签名MAC可能证明是有用的加密工具),并且人类观察者独立于不受信任的智能手机进行验证。后一点是真正的问题:普通的人类观察者不会在他的头脑中计算签名验证或 MAC。

这种情况的解决方法有两种:

  • 直接在第一台设备上添加显示器,以便设备可以直接显示其数据,而无需与潜在的敌对智能手机进行交互。这就是支付终端所做的:虽然它们与收银机相连,基本上是一台 PC,但这些终端仍然有自己的屏幕和键盘,因为收银机最终不受信任。

  • 在舞蹈中添加第三个设备。给用户一个他信任的设备,它将验证第一台设备计算的任何 MAC 或签名。比照,这就是互联网,不受信任的智能手机映射到单纯的路由器;源和目标之间的某些 SSL 保护数据的完整性(和机密性)免受路由器的错误处理。

(我们可能会注意到,这个问题也是智能卡通过专用读卡器或 USB 端口插入 PC 的固有问题。当我们输入 PIN 码时,它在 PC 上;我们无法真正知道 PC 要求智能卡做什么符号。)

使用可识别的背景的想法非常好。然而,T. Pornin 非常友好地指出了这种方法的一些问题。

简短:使用 MobiCore 或其他可用的 TrustZone 实现。对于没有 TEE 的不受信任的设备,目前您只需要使用 Rich OS。将来,可能会有更多设备提供 TEE。


信任和确认问题

最终,问题是:如果您不能信任在设备上执行的组件和软件,您就不能相信设备不会更改向用户显示的确认消息/按钮。

这个问题没有完美的解决方案(在不受信任的设备上要求确认)。这是一个众所周知的事实。通常被认为是“可信”的设备(例如 ATM)有时甚至会出现问题。因此,银行和信贷业务总是期待一定数量的欺诈行为并准备好应对它。

不受信任的设备

对于许多应用程序而言,目前认为让应用程序直接在不受信任的移动设备上运行是足够安全的。(如网上银行等)

可信执行环境

如果可以为需要额外信任的用例提供受信任的环境怎么办?(用于移动商务、BYOD 等用例)

网络运营商和硬件制造商正式制定了可信执行环境的许多要求,可用于在非可信操作系统(也称为 HLOS、丰富操作系统、通用操作系统或普通世界操作系统)的设备上的可信环境中运行“可信软件”。这些文件是 OMTP TR0 和 OMTP TR1。它们是 TEE 通常要求的最佳演示之一。

信任区

大约十年前,ARM+Trusted Logic 开始研究这个想法。ARM 处理器获得了 TrustZone,从那时起就一直存在。尽管在实践中基本上是个好主意,但最大的问题是:硬件支持,但直到最近,软件解决方案确实得到了如此多的利用。

从技术上讲,可以将 TrustZone 视为对虚拟化的有限硬件支持,旨在使用一种丰富的操作系统和一种安全的操作系统。

G&D MobiCore 是少数几个应用到主流手机的实现之一,它在三星 S3、S4 上可用。三星 Note III 有三星诺克斯。我认为它也是基于 TrustZone 上的 MobiCore。

其他一些手机有一些其他软件。在许多情况下,没有关于手机如何使用它们可以或加载在 TrustZone 上的软件的详细信息,目前几乎所有的智能手机都可以使用该软件。

为了获得对 TrustZone 的适当软件支持,G&D、ARM 和 Trusted Logic Mobility 共同创立了 Trustonic,它正在打造下一代 Trusted OS

在已知图像上覆盖文本的方案很聪明,但并不安全。它无法阻止攻击者添加内容(想想在数字末尾添加零 - 这可能是有害的)。此外,您依赖于源图像的保密性和人类区分已“填充”部分的能力,这是有风险的。

最好的解决方案是仅将消息与 HMAC 一起正常显示,然后将带有 HMAC 的整个消息转录到另一个设备进行验证。

如果没有其他设备可用,您需要的是一个可以由人验证但不能在没有人注意到的情况下由计算机更改的数字签名。这样的事情还不存在。然而,类似下面的东西在理论上是可行的,尽管它真的很麻烦并且不安全地防止人为篡改:

  1. 创建一个安全设备和人类都知道的安全词。
  2. 将安全词附加到消息的末尾。
  3. 提出一个可手动验证的校验和算法并计算消息的校验和。(这个校验和不需要是密码安全的,所以像 CRC32 这样的东西经过修改以使手动计算更容易就可以了。)
  4. 将校验和附加到消息的末尾
  5. 使用 CAPTCHA 库写出整个消息,这样计算机就无法读取其中的任何内容。

对消息的任何篡改都会破坏校验和,并且批量替换将删除安全字。可以复制安全字,但由于计算机无法读取该字,因此无法在包含它的消息上计算正确的校验和。如果您想防止消息的重复和重新排序,您还可以添加一个随机数(一个单调递增的消息计数器就可以了)。如果您关心新鲜度,您可以添加时间戳(当然,在应用校验和之前)。

警告:这种脑筋急转弯方案的成功不仅取决于验证码的安全性(已多次成功攻击),还取决于用户能够阅读条消息而不会出错。鉴于单字验证码上的人为错误率并非微不足道,这可能会导致验证成功率非常低,从而导致挫败感。可以多次写入相同的消息以降低人为错误率,但这也将使计算机更容易破解 CAPTCHA。

其他人已经涵盖了技术细节。从基本原则直接回答您的问题:

“[通过蓝牙传输某些内容后。] 有没有一种简单有效的方法来保证显示的信息没有被接收方 PC 或手机上的恶意软件更改?”

答案是否定的,你不能。

您的方案很聪明,但从根本上说,如果个人电脑或手机遭到入侵,它永远不会被信任。在银行恶意软件的情况下,我们看到它们甚至会“模仿”正确的行为,但实际上会做其他事情。对于您的方案,它可以保留传输的任何内容的无污染副本,甚至使用它来渲染您的图片,但无论我认为您在此之后所做的重要事情将受到第二组更改的恶意数据的影响。