LCD与视觉密码学的趣味探索
引言
你知道吗?你可以将两个LCD显示屏以某种方式组合,从而看到它们内容的异或(XOR)结果?
动机问题
想象一个由两个互不信任部分组成的通信设备。这两个部分使用来自两个完全独立供应链的组件构建。我们希望实现这样的特性:即使其中一部分存在关键漏洞,远程攻击者也永远无法看到解密后的消息。
这样的设备如何向用户显示解密消息?最终,我们需要组合密钥材料和密文,解密消息,并在显示屏上显示。如果单个芯片同时看到密钥和密文,或者明文出现在单个显示组件上,那将代表我们设计中的单点故障。有没有办法解决这个问题?
视觉密码学
这个问题的一个解决方案是视觉密码学。如果我们能使用两个来自不同制造商的显示屏,并让它们以视觉方式组合信息,那么我们就可以构建一个聊天设备,其中没有任何单个组件能看到消息的两半!
在这个方案中,每个设备显示一个图像,该图像本身与随机图像无法区分。但当图像异或在一起时,明文就显现出来。这是一种视觉实现的一次性密码本。
这个想法已经存在一段时间了。Tuyls等人在2003年发表了一篇出色的论文《视觉密码显示实现安全通信》,他们在其中做了我在这篇博客文章中做的所有事情,甚至更多,包括一些关于如何实现真实性的分析,即使攻击者可以修改显示内容。
第一次尝试(透明OLED)
在我了解到本文开头的LCD技巧之前,我搜索了透明显示屏,并找到了Sparkfun销售的这些微型透明OLED模块。堆叠OLED显示屏提供视觉或(OR)操作,而不是视觉异或(XOR)操作,因为光只是透射过去。
事实证明,你可以使用小棋盘图案从视觉或操作创建视觉异或操作。一个朋友指出,David Chaum在投票方案中使用了相同的技术,只不过是用纸而不是显示屏!从那里我了解到,这个方案至少可以追溯到Moni Naor和Adi Shamir的1994年。
第二次尝试(LCD)
LCD代表液晶显示屏。顾名思义,LCD使用一种称为液晶的材料。
扭曲向列型液晶显示屏的工作原理如下:当没有电压施加到液晶层时,会形成螺旋结构,透射光的偏振会旋转一定量(在我的LCD上,这是90度或-90度——我还没有实验确定是哪一个)。当施加足够大的电压时,螺旋结构变直,光透射不变。
通过在这种液晶层的两侧放置偏振滤光片,两个滤光片相对旋转90度,LCD可以通过升高或降低电压选择性地阻挡光透射。
所以一个正常的LCD看起来像这样:
但通过从两个LCD上剥离前偏振层,我们可以构建一个看起来像这样的显示屏:
通过这种设置,显示屏现在执行异或操作!对于两个显示屏上某个位置的给定像素:
- 如果两个像素都关闭,入射光的偏振被90度然后-90度扭曲,因此被第二个偏振器阻挡。
- 如果恰好一个像素关闭,入射光的偏振被90度或-90度扭曲一次,因此通过第二个偏振器。
- 如果两个像素都开启,光通过液晶层而不旋转,因此被第二个偏振器阻挡。
一旦我设计出方案,实际组装就很简单了。我使用了两个Adafruit的LCD模块,从两个显示屏上剥离了前偏振器,移除了一个显示屏的背光,并将它们面对面放置:
这些LCD模块非常容易拆开。我遇到的唯一问题是收到的驱动板固件错误!
手机
我想要一个安全的通信设备——只做简单聊天,不包含像网页浏览器或ImageMagick这样的东西。像Signal这样的安全聊天应用相当不错,但它们通常在智能手机上运行,这些手机 consistently包含疯狂的错误,让远程攻击者完全控制你的设备。我们拥有所有这些伟大的密码协议,但没有简单的方法来安全使用它们!
幸运的是,有一些项目试图解决这个问题。我对Betrusted非常兴奋,它旨在构建本质上是一个安全飞地,带有键盘、屏幕和外部不可信网络组件。这非常出色——我们可以通过简单、易于审计的协议与不可信组件通信,从而消除整个类别的漏洞。
但我不得不怀疑:在不牺牲可用性的情况下,我们能比Betrusted这样的设备更偏执一步吗?我们能拥有一个比其供应链中最薄弱环节更安全的设备吗?
(如果你正在开发安全通信设备,请联系!)
联系
Max Justicz
max@justi.cz
mastodon.mit.edu/@maxj
我会在仅几篇文章后放弃这个博客吗?敬请关注并找出答案!