查看: 322|回复: 0

鸿蒙Device Security Kit防窥:视线追踪与阻断

[复制链接]
发表于 6 小时前 | 显示全部楼层 |阅读模式
背景与目标
轻规划(AeroPlan)涉及人生规划、财务状况和习惯追踪等敏感信息。在拥挤地铁、公交或公共办公室中,用户使用手机时旁人可能突然窥视,传统应用最多只能手动密码锁,无法处理使用中的动态偷窥。轻规划集成 HarmonyOS NEXT 原生 Device Security Kit 设备安全套件,开启 AI 防窥保护。开启后,系统借助前置摄像头与端侧 NPU 做人脸朝向与视线交叠检测;当屏幕正面出现非机主另一张面孔,且视线焦点投射屏幕超过 0.8 秒,判定为旁人偷窥,毫秒级对愿景九宫格看板覆盖高强度毛玻璃滤镜并弹出隐私警示;旁人收回视线后界面秒级恢复。数据在端侧沙箱处理,不保存图像,不上云。

架构与数据管线
整体分四层:硬件感知层用前置红外与可见光摄像头采集人脸及眼部特征视频帧;端侧计算层由 NPU 做实时人脸检测、人脸比对和视线估计,过程在受保护内存沙箱,不落盘、不联网;系统决策层由 Device Security Kit 的 PeepingDetector 计算非机主眼球视线向量与手机屏幕平面的几何相交,判断持续时间是否超过稳定性阈值,例如 0.8 秒,触发后向已订阅的前台应用发送广播事件;应用阻断层由轻规划接收警告后,通过 AppStorage 驱动 ArkUI 声明式渲染树重构,动态加载 backdropFilter 硬件加速模糊组件,秒级屏蔽敏感区域。

为什么用 Device Security Kit 的视线追踪
传统防窥多为静态防御或物理限制,无法应对用户使用过程中的动态背后窥屏。原文对比后选择 Device Security Kit 视线追踪,以较小用户打扰度实现针对视线污染的智能拦截。这里的关键是系统级 PeepingDetector 负责视线判定,应用只订阅结果并做 UI 阻断,避免应用自行采集和处理原始图像。

PeepingDetector 初始化与监听
防窥保护需要申请前置相机权限,并初始化 PeepingDetector。核心接口:subscribe(detectorId: string, callback: Callback<PeepingResult>): void 订阅防窥检测服务,detectorId 建议唯一标识当前应用或业务模块;unsubscribe(detectorId: string): void 注销订阅,应用切后台或销毁时必须调用以释放底层传感器;PeepingResult.isPeeping 为布尔值,true 表示系统判定当前有非机主面孔注视屏幕且持续时间超过安全阈值,false 表示危机解除。下面代码片段保留原文的权限申请、订阅与状态分发逻辑:
  1. import { peepingDetector } from '@kit.DeviceSecurityKit';
  2. import { abilityAccessCtrl } from '@kit.AbilityKit';
  3. const atManager = abilityAccessCtrl.createAtManager();
  4. const grantResult = await atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']);
  5. if (grantResult.authResults[0] !== 0) {
  6.   return false;
  7. }
  8. peepingDetector.subscribe(detectorId, (result: peepingDetector.PeepingResult) => {
  9.   AppStorage.setOrCreate('isPeepingState', result.isPeeping);
  10. });
复制代码
注意 unsubscribe 与生命周期绑定,避免重复订阅和底层回调泄漏。

ArkUI 毛玻璃阻断层
前台页面使用 @StorageLink('isPeepingState') 监听偷窥警告。触发后,利用 ArkUI 的 backdropFilter 对敏感愿景看板做毛玻璃化拦截。backdropFilter 可对组件边界内背后已渲染像素应用图形效果,常见为高斯模糊。相比覆盖模糊图片或预渲染离屏模糊,它具备实时动态性和硬件级加速:背景数据动画时仍能以 60fps/120fps 重采样模糊;ArkGraphics2D 会将模糊计算编译为 GPU 着色器指令,避免 CPU 像素遍历。实现上采用 Stack 布局,敏感数据层置底,阻断层置顶,并通过条件渲染减少无谓布局。
  1. @StorageLink('isPeepingState') isPeepingState: boolean = false;
  2. if (this.isPeepingState) {
  3.   Column() {
  4.     Image($r('app.media.ic_shield_alert')).width(64).height(64);
  5.     Text('AI 检测到旁人窥屏中').fontColor('#FFFFFF');
  6.   }
  7.   .width('100%')
  8.   .height('100%')
  9.   .justifyContent(FlexAlign.Center)
  10.   .backdropFilter({ radius: 30 })
  11.   .backgroundColor('rgba(0,0,0,0.65)')
  12.   .borderRadius(12)
  13.   .transition(TransitionEffect.OPACITY.animation({ duration: 250 }))
  14. }
复制代码
原文中,radius 越大,背后信息越难识别;65% 不透明度黑色遮罩使白色提示更清晰;圆角保持 12 与外层容器一致;250ms 淡入淡出缓和视觉跳变。

生命周期与功耗避坑
Device Security Kit 的防窥检测会调用前置相机和端侧 NPU 做高频推理,若不加限制,功耗不可忽视。若应用切后台、分屏不可见或锁屏时未熔断,相机数据流和特征比对可能继续运行。因此要采用“前台开启,后台挂起,锁屏熔断”的生命周期管理:onPageShow 启动检测,onPageHide 停止检测并重置 AppStorage 中的 isPeepingState。重置为 false 的原因是,用户被窥屏时突然锁屏或切后台,状态可能保持 true,重新进入时界面会继续模糊,给机主造成卡顿或故障错觉。
  1. onPageShow() {
  2.   this.privacyGuard.startDetection(getContext(this) as common.UIAbilityContext);
  3. }
  4. onPageHide() {
  5.   this.privacyGuard.stopDetection();
  6.   AppStorage.setOrCreate('isPeepingState', false);
  7. }
复制代码
原文给出的数据是,这一管控让后台能耗从 4.2mA 降至 0.0mA。

小结
轻规划通过 Device Security Kit 与 ArkUI backdropFilter 声明式遮罩,实现 AI 防窥闭环:系统侧完成视线追踪和 PeepingDetector 判定,应用侧用 AppStorage 驱动条件渲染和硬件加速毛玻璃阻断,并用生命周期钩子做传感器挂起与状态复位。下期原文预告将进入 Agent Framework Kit,用小艺智能体进行项目清单自动体检与打分。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-10-16 17:18 , Processed in 0.026969 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部