相机隐私快门和切断开关

本文提供有关隐私快门或终止开关的设备设计指南、快门状态感知注意事项,以及快门预期如何与指示灯 LED 的现有 HLK 要求交互。

常见 LED 要求

无论快门还是终止开关,HLK 都要求当 ISP 捕获传感器数据时,可见指示灯 LED 为“开”。 对于 RGB 相机,如果相机处于活动状态,则单个可见波段 LED (例如,白色、绿色、蓝色等) 必须处于打开状态:

打开 RGB 相机

对于具有 RGB+IR 传感器的相机,这可能更复杂,因为 IR 相机需要照明器 LED,并且照明器 LED 可能使用可见的 (850 nm) 或不可见的 (940 nm) 。 此外,应用可能本身从 IR 传感器、RGB 传感器本身流式传输,也可以同时从两者流式传输。

使用可见光波长 IR 照明器的设计可以选择使用 IR 照明器 LED 作为可见指示灯 LED。 这意味着,如果 IR 相机本身处于打开状态,则亮起的 IR 照明器 LED 将满足 HLK 要求:

IR 照明器 LED 亮起

使用不可见波长 IR 照明器的设计必须使用可见的波长 LED 来指示 IR 相机何时处于活动状态,以满足 HLK 要求。 建议共享相机正在使用的指示灯 LED,以便当 IR 传感器和/或 RGB 传感器处于打开状态时,相同的可见波段 LED 打开:

IR 传感器和或 RGB 传感器已打开

建议所有设计在使用 IR RGB 相机时打开常规使用中的指示灯 LED,而不管 IR 照明器 LED 是否使用可见的波长。 下面是核心 LED 要求的完整表:

Stream状态 可见 IR LED (850 nm) 不可见 IR LED (940 nm)
相机关闭 LED 关闭 LED 关闭
仅打开 RGB 相机 使用中的指示灯 打开,IR 照明器 关闭 使用中的指示灯 打开,IR 照明器 关闭
仅打开 IR 相机 使用中指示器不是必需的,但建议 启用 使用中的指示灯 打开,IR 照明器 打开
RGB 和 IR 相机打开 使用中的指示灯 打开,IR 照明器 打开 使用中的指示灯 打开,IR 照明器 打开

注意

对于具有相机隐私快门或相机终止开关的设计,LED 要求可能有所不同。 有关 相机隐私快门的信息,请参阅相机隐私快门 LED 要求 和相机终止开关的 HLK LED 要求

始终在线 AI 体验 (例如基于相机的人类存在)

对于支持基于相机的始终可用 AI 功能(其中 AI 芯片共享main相机传感器)的设备,当专用存在芯片专门访问相机时,LED 要求会有所不同。 有关详细信息,请参阅 Microsoft 合作伙伴中心上的 状态感知白皮书

硬件隐私控件

当相机设计包含硬件隐私控件时,我们的设计指南有两个关键原则:

  1. 具有隐私控制的设备必须提供一致的用户体验和对隐私状态的信心:

    • 一旦客户了解其设备上的快门的外观和行为,该知识应适用于他们使用的任何具有快门的设备。
  2. 在任何情况下,相机隐私控制都不能给隐私留下错误的印象:

    • 设备在对客户最重要的时刻,不得未能提供隐私。 如果相机隐私快门已关闭,或者相机终止开关已关闭,则客户期望在与物理控件交互以停用隐私功能之前,无法捕获任何图像。

控件类型

定义了两种形式的隐私控件:相机隐私快门 (机械和机电) 和相机终止开关。 根据设备外形规格、BOM 成本目标和设备的价位,OEM 可以选择以上述任何形式实现快门。 这三者的重要常量是,它们必须在物理或硬件级别执行操作,这意味着不涉及任何软件,因为软件可能会遭到入侵。

机械相机隐私快门

机械快门是最简单的设计,这些是一个简单的滑动镜头盖,用户手动启动以阻止相机或不阻止相机。 它们采用不透明材料设计,闭合时可完全阻挡镜头。 这种设计本质上是万无一失的,因为它们在物理上不能以任何方式泄露打开,除非用户滑动它。

机电相机隐私快门

机电快门是电气控制的机械快门。 集成快门打开/关闭,而不是用户手动打开或关闭快门,以响应按下设备上的物理按钮。

注意

虽然此解决方案通常需要固件,但它应与其他组件隔离。 换句话说,快门控制器和按钮不应具有攻击途径,例如通信总线或固件重新编程的能力。 设计必须要求硬件交互,并且不能通过软件进行控制。

相机终止开关

现在,一些设备附带相机终止开关功能,该功能在关闭时以物理方式断开相机设备与系统的连接,从而提供硬件控制来阻止相机访问,而无需物理快门来遮盖镜头/传感器。 虽然这在抵御攻击时很可靠,但它会创造糟糕的用户体验。 通过在关闭开关时删除设备,系统无法判断机箱中仍有摄像头,但它只是关闭了。 从 UX 的角度来看,如果相机因用户不知道交换机而意外关闭,则这是有问题的,因为应用程序会报告没有连接相机。 如果在使用期间删除相机或在应用运行时显示,这也可能导致某些应用程序崩溃或行为不端。

因此,Microsoft 不建议或支持使用相机终止开关从系统中删除整个相机。 相反,我们建议使用以下两种解决方案之一:

  1. 物理快门,如 机械相机隐私快门机电相机隐私快门中所述。

  2. 断开传感器(而不是 ISP)并导致 ISP 合成黑色帧的终止开关。

对于第二种解决方案,相机仍显示在系统中,应用可以继续使用它。 无论终止开关是否处于活动状态,ISP 都会响应所有命令 (启动/停止流式处理、亮度或对比度等 DDI、媒体类型更改等) 。 但是,激活终止开关时,ISP 会停止从传感器捕获真实数据,而是合成和流式传输黑色帧,从应用程序的角度来看,所有帧都是透明的。

面板上具有多个摄像头的快门

例如,当客户使用带有快门 (的设备时,面板上具有多个 IR 和 RGB 相机的快门) 他们希望,如果快门关闭,隐私将受到保护,防止任何意外的相机访问。 当系统在同一面板上具有两个摄像头(例如 RGB 和 IR 摄像头)以支持Windows Hello时,请务必确保快门不会提供虚假的安全感。 客户不会明白可能有第二个相机传感器用于Windows Hello,某些设备使用单个传感器进行 RGB+IR。 因此,快门必须覆盖面板上的所有相机。

确保将快门和终止开关应用于 IR 相机至关重要,因为应用程序可以访问 IR 相机,并生成场景的合理高保真图像,如下所示。 未能遮挡 IR 传感器将表示虚假的安全感和违反用户对快门隐私优势的信任。

来自 Microsoft 参考传感器的 IR 图像

注意

Windows Hello人脸需要 RGB 和 IR 摄像头。 如果 RGB 相机被遮挡,Windows Hello将无法正常工作。 RGB 和 IR 流都用于启用反欺骗反措施。

物理快门设计指南 (机械或机电)

当客户使用具有物理快门的设备时,快门的状态会非常隐含地期望它提供的隐私级别。 简单地说,用户的期望是,如果设备具有快门,并且快门已关闭,则保护它们免受任何意外的相机访问。 该功能的实现必须符合隐含的期望,否则会失去所有信任。

此外,隐私快门的整个概念是提供一个针对任何实际软件攻击强化的安全层。 换句话说,如果设备具有快门,并且系统完全受到恶意软件的威胁,则该软件不会损害用户的隐私。 同样,简单地说,预期是,只有当用户以物理方式与设备上的硬件快门控件交互时,快门才能更改状态。

机械设计注意事项

物理快门,无论是手动还是机械启动,都应由不透明材料制成,在关闭时完全阻止传感器,并且肉眼可见:

不透明材料在闭合时阻止传感器,肉眼可见

面板上具有多个相机的快门中所述,当快门关闭时,同一面板上具有独立 IR 和 RGB 相机的设备必须同时阻止这两个传感器。 假设采用双传感器设计,如下所示:

双传感器设计

当快门关闭时,它必须覆盖 RGB 传感器,可以选择覆盖 IR 传感器:

当快门关闭必须覆盖两个传感器时

注意

我们目前支持机械快门设计不覆盖 IR 相机的相机的豁免。 当物理快门遮挡 RGB 相机时,ISP 固件可以放弃 IR 相机的图像输出并将其替换为合成的黑色图像。 但是,如果 IR 传感器用于状态感知,建议不要覆盖 IR 传感器,并确保状态传感器正常工作。 有关详细信息,请参阅 Microsoft 合作伙伴中心上的 状态感知白皮书 。 未来的 HLK 更新将采用此异常,并且只需要物理百叶窗即可在物理上遮挡 RGB,以确保解决方案的稳健性,并增强对客户隐私的保护。

相机行为注意事项

当相机配备物理快门时,无论快门状态如何,相机都必须继续正常运行。 如果应用正在从相机进行流式传输,则即使快门关闭,它也会继续捕获和传输真实的传感器数据。 闭合快门对传感器的完全遮挡预期会产生黑色或非常接近的图像。

当快门关闭时,OEM 可以选择将图像替换为静态图像 (例如,) 带有斜杠的相机图片。 此映像必须是静态的,并且无法从软件中更改,以防止攻击。 对于具有隐私快门的设备,图像替换可能会在 ISP 或驱动程序内进行,但建议在 ISP 中更换,以减少对 DMFT 的需求并增加主机设备的负载。

相机隐私快门 LED 要求

LED 要求必须遵循指定的 通用 LED 要求。 这意味着,如果面板上有任何相机处于打开状态,无论快门是打开还是关闭,可见的摄像头使用指示器 LED 都必须保持打开状态。 但是,当快门关闭时,快门的物理设计覆盖 LED 是可以接受的。 下图演示了相机主动流式传输的情况:

相机正在主动流式传输

对于同时采用 IR 和 RGB 摄像头的设计,如果在关闭快门时使用 IR 摄像头,一些制造商可能希望关闭 IR 照明器 LED。 我们建议不要这样做,因为它增加了额外的复杂性,几乎没有价值;仅当Windows Hello正在运行时,IR 相机才会处于活动状态,并且Windows Hello在此期间显示一条消息,指示它正在尝试登录,但快门已关闭。 有关详细信息 ,请参阅终止开关实现

但是,如果 840 nm (可见) IR 照明器 LED 不是 IR 相机的唯一正在使用的 LED (,则当 IR 相机处于活动状态) 时,正常可见的白色/绿色/蓝色 LED 会亮起,那么设计可能会在关闭快门时关闭 IR 照明器 LED。

快门状态切换机制

实现隐私快门的设备不得允许任何形式的软件控制快门,并且必须仅打开或关闭快门,以响应用户与快门控件显式交互。 此快门控件可以是机械滑块,也可以是启动机电快门的物理按钮。 任何软件都不能更改快门状态,即使硬件控件可以覆盖软件并保持快门关闭,因为关闭快门并不总是意味着启用隐私控制。 同样,出于同样的原因,使用相机的应用可能无法打开或关闭快门。 总之,如果用户瞥了一眼设备,看到快门已关闭,他们必须能够明确推断出他们的隐私受到保护,直到他们采取物理操作打开快门。

快门状态感知和报告

市场上相机隐私设计的许多问题源于以下情况:用户无意中关闭了快门,无法找出为什么他们的相机生成空白图像或不工作。 因此,Windows 隐私快门功能的关键部分依赖于相机能够可靠地报告其快门状态。 借助此信息,应用程序可以通知用户快门已关闭,以便它们能够做出相应的反应。 应在事件发生后尽快检测并报告快门状态更改。

建议使用两种方法来检测快门状态: 物理传感器基于固件的检测。 这两种方法都通过 CT_PRIVACY_CONTROL 报告检测到的快门状态(如果源自 UVC 设备)或 KSPROPERTY_CAMERACONTROL_PRIVACY (如果源自 AVStream 或 DMFT 驱动程序)。

有关更多详细信息 ,请参阅隐私快门通知

物理状态检测传感器

可以使用物理传感器检测快门状态,该传感器可以检测快门是打开还是关闭。 物理传感器可以确定性地报告快门状态,并可能提供更可靠的体验。 Microsoft 没有任何关于传感器设计的具体指南或传感器技术的具体建议。

基于 ISP 固件的状态检测

某些设计可能会选择跳过物理快门,转而使用 ISP 中的固件来处理图像并报告推断的快门状态。 此类解决方案将分析固件中捕获的图像,并将其与阈值进行比较,以确定快门是否显示为关闭。 这是一种低成本的解决方案,因为它不需要任何新部件,还能够检测传感器上磁带等内容。 但是,选择使用此类设计时,有两个重要的注意事项:

  1. 设计可能会在黑暗环境中错误地报告关闭的快门。 但是,这预计是一个最小的风险/问题,因为相机无论如何都无法在如此低光的环境中使用。

  2. 除非 ISP 能够在传感器处于 D3 之外时定期从传感器采样,否则此方法会阻止应用查询准确的传感器状态数据,直到它们开始从相机流式传输。

上述第二个考虑因素带来了挑战。 如果相机在未流式传输时无法报告快门状态,但应用被写入检查并在流式处理之前对快门状态做出反应,则可能发生坏事。 根据我们从合作伙伴那里收到的反馈,此要求已放宽。 我们还将更新 API 文档,建议软件开发人员不要根据未流式传输时报告的快门状态做出决策。 例如,我们将明确建议应用开发人员不要在快门报告其关闭时禁止打开相机。

为避免不符合此建议的应用出现兼容性问题的风险,在未流式传输时无法感知快门状态的相机应在不流式传输时报告快门处于打开状态。 否则,如果相机在未流式传输时能够感知快门状态,则只要它不在 D3 中,它就会检测并报告快门状态。

注意

应始终在固件(而不是驱动程序)中实现基于图像分析的快门检测算法,以避免增加 CPU 负载并实现最大可靠性。

下图演示了具有相机隐私快门的设备的预期行为:

具有相机隐私快门的设备的预期行为

相机隐私快门行为摘要表

下表汇总了具有相机隐私快门的相机的预期行为 (手动或机电) :

ISP 状态 快门状态 可见指示器 LED 流式传输到电脑的图像 报告的CT_PRIVACY_CONTROL状态
空闲/D3 已打开 关闭* 空值 已打开
空闲/D3 已关闭 关闭* 不可用 打开**
流式处理 (任何应用) 已打开 On* 捕获的传感器图像 已打开
流式处理 (任何应用) 已关闭 On* 捕获的传感器图像 已关闭

(*) 有关指示器 LED 要求的详细信息,请参阅 相机隐私快门 LED 要求快门状态切换机制

(**) 有关详细信息,请参阅 快门状态感知和报告 ,在某些情况下,不流式处理时,快门状态仍会更新。

终止开关设计指南

当客户使用具有终止开关的设备时,他们会将信任置于硬件交换机中,以可靠地防止任何应用程序尝试捕获其映像。 简单地说,用户的期望是,如果我的设备具有终止开关,并且终止开关已激活,我的隐私将受到保护,免受任何意外的相机访问。 该功能的实现必须满足隐含的期望,否则会失去所有信任。

此外,终止开关的整个概念是提供一个针对任何实际软件攻击强化的安全层。 如果设备具有终止开关,并且系统完全受到恶意软件的攻击,则该软件无法覆盖终止开关并损害用户的隐私。 简单地说,预期是*终止开关只能由与设备进行物理交互的用户激活/停用。

与隐私快门设计相比,终止开关更为复杂,并且需要承担更多的挑战才能在信任下交付。 这是因为它们具有与可靠性相同的水平, (物理开关在) 的所有场景中都能完美无瑕地工作,但它们无法保证镜头上的物理快门提供。 这意味着提供终止开关的设备必须生成一致、清晰且可靠的体验。

终止开关功能

终止开关通过通知 ISP 固件停止从传感器捕获并合成黑色图像来运行。 这样,从应用程序的角度来看,相机仍然可用且正常运行,但在终止开关处于活动状态时,将零个真实传感器数据传输到主机 OS。 可靠的设计将按如下方式运行:

  1. 来自交换机的物理信号连接到 ISP 上的 GPIO,以指示交换机是否处于活动状态

  2. 终止开关处于活动状态时,ISP:

    1. 以电方式断开传感器的连接

    2. 开始合成黑色帧,以替换断开连接的传感器中的真实帧

    3. 报告通过隐私快门通知功能关闭了快门

实际上,支持这种完整体验的 ISP 芯片(包括终止开关 GPIO 处于活动状态时传感器的电气断开)目前尚未在市场上提供。 因此,当前设计需要修改上述步骤 2a,以“停止传感器或放弃固件中的传感器数据”。 我们计划与 ISP 供应商合作,以减轻未来硅片中对这种调整的需求。

注意

在 ISP 固件中而不是在主机 OS 上运行的驱动程序中实现终止开关功能至关重要。 当终止开关处于“终止”状态时,不得将传感器的真实图像数据传输到 OS。

与隐私快门一样,当终止开关处于“终止”状态时,OEM 可能会将图像替换为静态图像。 映像更换可能发生在 ISP 或驱动程序内,但建议在 ISP 中替换以减少对 DMFT 的需求,并将负载添加到主机设备。 如果在驱动程序中执行映像替换,请注意,当终止开关处于“终止”状态时,实际图像数据不会传输到 OS 的要求仍然适用。

终止开关实现

终止开关状态不得由软件控制,否则恶意应用程序可能会编写控件来激活或停用终止开关。 它们应由连接到 ISP 上的 GPIO 的交换机控制。

当关闭相机终止开关时,相机仍会显示在系统中,并且应用仍然可以从中流式传输,图像只会变黑。这一点很重要。 帧继续传送到 OS,相机继续响应控件;除非应用使用的是 CameraOcclusionInfo API,否则应用不知道开关处于“终止”状态。 这允许通过硬件控件禁用相机,而不会引入令人困惑的“找不到相机”消息,或在翻转开关时某些应用程序崩溃的风险。

面板上具有多个相机的快门中所述,当激活终止开关时,同一面板上具有单独的 IR 和 RGB 相机的设备必须同时禁用这两个传感器。

HLK LED 要求

当 ISP 捕获传感器数据时,HLK 要求指示灯 LED 处于打开。 激活终止开关意味着 ISP 必须停止从传感器捕获真实数据,因此 LED 也会随着终止开关而关闭。 这可以避免任何混淆或违反信任,如果客户看到点亮的指示灯或 IR 照明器 LED,他们知道软件当前正在捕获其图像,如果他们看不到亮起的 LED,则他们知道它们不会被捕获。

终止开关状态报告

如果来自 UVC 设备) ,则应通过 CT_PRIVACY_CONTROL (报告终止开关的状态;如果来自 AVStream 或 DMFT 驱动程序) ,则应KSPROPERTY_CAMERACONTROL_PRIVACY (。 每当 ISP 超过 D3 时,都应报告相机终止开关的状态。

有关更多详细信息,请参阅 隐私快门/开关通知

终止开关状态报告

终止开关行为摘要表

下表总结了具有相机终止开关的相机的预期行为:

ISP 状态 终止开关状态 可见指示灯 LED 流式传输到电脑的图像 报告CT_PRIVACY_CONTROL状态
Idle/D3 运行 Off* 不可用 打开
Idle/D3 终止 Off* 不可用 关闭
流式处理 (任何应用) 运行 On* 捕获的传感器图像 打开
流式处理 (任何应用) 终止 Off* 合成空白帧 关闭

(*) 有关指示器 LED 要求的详细信息,请参阅 相机隐私快门 LED 要求快门状态切换机制

快门/开关事件的 ISV 指南

当具有隐私快门或终止开关的相机遵循本文档中的指导时,当相机进行流式传输时,快门/开关状态将报告给 OS。 然后,使用相机的应用程序可以监视快门状态更改事件并做出相应的响应,例如,通过生成有关相机被快门或开关阻止的有用通知。

有关详细信息,请参阅以下 API:

CameraOcclusionInfo 类

CameraOcclusionState 类

VideoDeviceController.CameraOcclusionInfo 属性