密钥验证
最后更新: January 01, 2025
若您不了解加密密钥的相关概念,请先阅读《加密的核心概念》。
当您使用端到端加密进行在线通信时,每位消息接收者都拥有唯一的公钥。您使用该密钥对向其发送的消息进行加密,确保只有对方才能解密。
假设有人在 WhatsApp 或 Signal 等加密通讯应用中自称是您的朋友 Esra'a 并向您发送聊天请求。即使您认为通讯应用正在使用 Esra'a 的公钥,但实际使用的密钥可能来自另一个人——意味着这位冒名的 Esra'a 将能解密您未来发送的所有消息。
为确保您使用的加密密钥准确无误(并让对方也能确认使用的是正确的密钥),验证密钥至关重要。当前,不同的服务采用的密钥验证方法也不尽相同,它们适用于不同的安全计划。
密钥透明度功能如何进行后台验证密钥
在多数加密通讯应用中,密钥验证需手动操作完成:双方调出并比对屏幕显示的验证码,或扫描二维码(下文将详述)。当某人更换手机时,其密钥通常也会随之变更,且每台设备可能对应不同密钥。这使得验证身份变得非常繁琐,尤其在群聊中。
WhatsApp 和 iMessage(作为可选功能)采用的密钥透明度功能旨在解决此问题。密钥透明度功能可将公钥存储在服务器上,供应用进行检查和验证。密钥变更会被记录并添加至日志,该日志可接受公开审计以确保通讯服务商履行其承诺。此功能部分实现了密钥验证自动化——无需人工干预即可对照已发布的审计日志来验证密钥。Apple Messages 会在联系人密钥变更时自动使用密钥透明度功能进行验证,而 WhatsApp 仅在密钥验证界面将其作为手动验证的替代选项提供。
并非所有端到端通信应用均具备密钥透明度功能,也不是所有应用都支持在必要时手动验证密钥。举例而言,密钥透明度功能为群聊增加了一层安全保障(群聊成员众多,每次密钥变更时均进行验证并不现实),但无法替代高风险场景(如举报人联系记者时)的手动验证需求。
手动验证密钥的场景和方法
不同的安全通讯系统所采用的密钥手动验证方式各异,但均建议通过相关通讯系统以外的途径进行验证,称为“带外验证”。在上述示例中,您需通过其他方式确认线上的 Esra'a 与现实中的 Esra'a 是否为同一人。您可以通过电话联系或当面验证的方式,确认您看到的公钥或安全码确实属于她本人。
为何采用带外验证?
- 若无法明确密钥来源,您就无法依赖并非彻底安全的通讯系统。
- 跨平台伪造他人身份通常更困难。例如,若要求通过 FaceTime 视频聊天来验证 Signal 指纹,那么冒名者需同时伪造 Signal 账户和 FaceTime 账户,并同时在视频聊天中伪装成您的朋友。
- 若在通讯渠道内要求提供秘密信息(称为“带内验证”),则存在攻击者暗中与双方通信的风险(即“中间人”或“机器中间人”攻击)。此时,要求提供安全问题或密钥指纹等秘密信息已不足以进行验证(下文将详述)。例如,若您提问“上次见面时我穿的什么衣服?”,攻击者可向真实对象提问并立即转发答案;若要求提供密钥指纹,攻击者仅需发送自己的指纹,而您将无从察觉。
您应在使用新的通讯工具时验证密钥,或在他人密钥变更时重新验证。密钥变更可能由用户更换手机或新增设备(如平板或电脑)等事件触发。
带外密钥验证操作
加密密钥为超长数字串,因此难以口头核对。为简化流程,通讯软件可基于密钥生成更简短易查的“指纹”或“安全码”。指纹可能以短数字串、常见词汇组合、图形或图片等形式呈现。这些内容通常会嵌入二维码中,以便于查验。
验证密钥时,联系人可读出或展示其密钥指纹,您需与设备中存储的对应指纹进行比对。验证完毕后,对方可要求您按同样的方式提供密钥指纹以完成双向确认。双方确认密钥无误后,通信安全性将显著提升。当面验证最为简便可靠,但也可通过视频聊天或其他通讯应用来实现(但后者存在额外风险)。
当面验证密钥
当面验证是最理想的验证方式,因为面对面更易确认对方身份的真实性。
当面验证时,您需展示公钥指纹,让对方与其设备存储的信息进行比对。若应用支持二维码验证,则对方直接扫描即可完成;其他应用中,对方需要逐字核对公钥指纹字符,以确认准确无误。此过程虽繁琐但至关重要。当面验证方式常见于交换含公钥指纹的名片,或同事在会议期间相互确认。
不同端到端加密通讯应用的设计各异,部分提供替代性指纹验证方式。目前,相关操作的术语与实现方式尚未统一。
假设 An Ming 在活动中遇见了朋友 Ghassan。他们决定通过智能手机上的端到端加密应用进行通信,因此安装了 Signal。利用面对面的机会,An Ming 与 Ghassan 通过扫描对方的二维码来验证安全码。
|
两个人举起手机,屏幕显示了二维码及随机字母数字组合。他们通过摄像头互相扫描二维码以验证密钥指纹,手机上方浮现锁形图标与绿色对勾。
|
通过其他媒介验证密钥
若无法当面验证,可通过不同于当前通讯渠道的其他媒介联系对方。
例如,在验证 Signal 安全码时,可使用电话、视频聊天或另一款端到端加密应用(如 WhatsApp)进行操作。攻击者同时拦截所有媒介的难度较高(但对于势在必得的攻击者来说也并非绝不可能)。视频聊天比纯文本应用更难伪造身份;您需根据自身威胁模型来权衡安全与便利。已通过密钥验证的其他加密应用为最佳选择,但并非始终可行。
不同应用的密钥位置可能不同,但验证方法基本一致。您可通过语音读出指纹字符(在视频聊天或电话中),或通过通讯软件复制粘贴指纹。无论采用何种方式,均需逐字逐数核对。
最后,多数端到端加密应用会在密钥变更时发出提示。请留意朋友的密钥变更情况,务必确认其为预期变更并重新验证新密钥。可当面验证或通过其他媒介完成验证。
准备好与朋友一起尝试密钥验证了吗?请参阅 Signal、WhatsApp 或 Apple Messages 的密钥验证教程。
如需详细了解有关公钥及密钥验证机制的信息,请参阅《监控自卫指南》中的《加密的核心概念》与《端到端加密深度解析》部分。