Yumeii0/goodix-27c6-5125-chicagohs

GitHub: Yumeii0/goodix-27c6-5125-chicagohs

为 Goodix 27c6:5125 ChicagoHS 指纹传感器提供逆向工程的原生 Linux 驱动,集成 libfprint 和 PAM 实现系统级指纹认证。

Stars: 0 | Forks: 0

# Goodix 27c6:5125 ChicagoHS Linux 指纹驱动 本项目中使用了人工智能来加速协议分析、实现、测试、调试和文档编写。硬件验证和最终的工程决策均基于真实硬件进行。 该项目为经过测试的 Goodix USB 指纹读取器提供了实验性的原生 Linux 支持,并与以下组件集成: - `libfprint` - `fprintd` - PAM - systemd 安装后,它不需要 Wine、Windows 虚拟机、供应商 DLL 或任何其他专有运行时组件。 本项目与 Goodix 或 Huawei 没有任何关联、认可或支持关系。 ## 测试过的硬件 开发与实际测试基于以下设备进行: ``` Laptop: Huawei MateBook D15 Fingerprint vendor: Goodix USB ID: 27c6:5125 Sensor family: ChicagoHS Expected chip ID: 0x2504 Expected internal profile: 0x0c Capture geometry: 64 x 80 pixels Raw frame size: 10240 bytes ``` 使用以下命令检查已连接的 USB 设备: ``` lsusb ``` 输出结果必须包含: ``` 27c6:5125 ``` 此 USB 检查仅是第一道过滤。理论上,其他设备也可能暴露相同的 USB ID,但却使用了不同的内部传感器系列、固件、协议、几何尺寸、TLS 配置或指纹算法。 ## ChicagoHS 兼容性检查 安装程序不仅依赖 USB 产品 ID。 在安全安装或重用设备 PSK 后,它会暂时停止 `fprintd` 并通过原生实现直接打开传感器。在进行任何系统驱动更改之前,它会验证受支持的 ChicagoHS 配置应具备的预期行为: - USB ID `27c6:5125` - 预期的 USB 接口和端点 - Chip ID `0x2504` - 预期的内部配置 `0x0c` - ChicagoHS OTP 布局和可用的 DAC 校准数据 - ChicagoHS 传感器初始化和配置序列 - 有效的 TLS-PSK 传感器身份 - 预期的 `64 x 80` 几何尺寸 - 预期的 `10240` 字节原始帧大小 在此兼容性探测过程中不会捕获任何指纹图像。 成功的探测会输出: ``` GOODIX_BETA_CHICAGOHS_PROBE=PASS family:ChicagoHS GOODIX_BETA_HARDWARE_PROFILE=PASS family:ChicagoHS ``` 如果探测失败,安装程序将在替换系统 `libfprint` 配置之前停止。 该设备并未暴露标准化的、人类可读的 USB 字符串来作为制造商认证的系列证书。因此,探测程序会验证与本 ChicagoHS 实现的精确协议及硬件兼容性,而不是仅仅信任 USB ID。 ## 当前状态 以下功能在经过测试的 Huawei MateBook D15 上正常工作: - 原生 USB 通信 - 加密的 TLS-PSK 传感器会话 - 严格的 ChicagoHS 硬件兼容性探测 - 自动手指触摸检测 - 自动手指抬起检测 - 原生图像预处理 - 原生指纹特征提取 - 原生录入 - 原生指纹匹配 - 通过 `fprintd` 进行持久化存储 - AES-256-GCM 加密的原生模板 - 十二次扫描的多样化录入 - 通过 `fprintd` 进行指纹验证 - 可选的 `sudo` 指纹认证 - 密码回退前的三次指纹尝试 这仍是测试版软件。它尚未经过生产规模的生物识别认证或独立的安全审计。 ## 不支持的硬件 请勿为以下设备安装此驱动: - Goodix Milan 传感器 - 其他具名的 Goodix 传感器系列 - 具有其他 USB ID 的设备 - 仅共享 Goodix 供应商 ID 的设备 - 未通过 ChicagoHS 兼容性探测的 `27c6:5125` 设备 为其他传感器系列添加支持需要单独进行协议分析、硬件验证、捕获处理、预处理和校准。重命名设备或绕过兼容性探测并不能使其他系列变得安全或兼容。 ## 支持的发行版 自动安装程序目前针对: - Arch Linux - CachyOS - 具有足够兼容性的基于 Arch 的发行版 安装程序需要: - `pacman` - systemd - PAM - `fprintd` 其他 Linux 发行版在手动调整后也许可以运行,但目前不被自动安装程序支持。 ## 要求 您需要: - 受支持的 Goodix ChicagoHS `27c6:5125` 读取器 - 属于该传感器的正确 64 位十六进制 PSK - 兼容 Arch 的 Linux 安装 - 安装期间的互联网访问权限 - 具有 `sudo` 权限的普通用户账户 请勿在现有的 root shell 中运行安装程序。 ## 获取设备 PSK 传感器使用特定于设备的 32 字节 PSK 进行加密通信会话。如果没有正确的 PSK,Linux 驱动程序将无法与读取器通信。 本仓库不包含 PSK,且绝不应被发布。 ### 推荐方法 从同一台计算机上正常工作的 Windows 安装中提取现有的 PSK。 此方法读取官方 Goodix Windows 驱动程序已使用的 PSK。它不会故意重置传感器 PSK,也不需要删除现有的 Windows 指纹录入。 ### Windows 准备工作 1. 在包含指纹读取器的计算机上安装或启动 Windows。 2. 安装由 Windows Update 或笔记本制造商提供的官方 Goodix 指纹驱动程序。 3. 打开 Windows 设置。 4. 配置 Windows Hello 指纹认证。 5. 录入至少一根手指。 6. 确认指纹认证在 Windows 中有效。 7. 找到以下文件: ``` Goodix_Cache.bin ``` 它的位置可能因 Windows 驱动程序版本和笔记本制造商而异。 要搜索它,请以管理员身份打开 PowerShell 并运行: ``` Get-ChildItem -Path C:\ -Filter Goodix_Cache.bin -File -Recurse -Force -ErrorAction SilentlyContinue ``` 搜索可能需要几分钟。 ### 运行提取脚本 本仓库包含: ``` windows/psk_extractor.ps1 ``` 在包含脚本的目录中打开 PowerShell 并运行: ``` Set-ExecutionPolicy -Scope Process Bypass .\psk_extractor.ps1 ``` 执行策略更改仅适用于当前的 PowerShell 进程。 该脚本会要求输入 `Goodix_Cache.bin` 的完整路径。 示例: ``` C:\path\to\Goodix_Cache.bin ``` 提取成功后,它会在 Windows 桌面上创建: ``` goodix_psk.txt ``` 该文件必须包含确切的 64 个十六进制字符,代表 32 字节的 PSK。 ### 保护 PSK 请将 PSK 视为机密。 绝不要: - 将其上传到 GitHub - 将其包含在公开的 issue 中 - 将其包含在日志中 - 在截图中分享它 - 将其存储在此仓库中 - 将其发送给其他用户 - 使用从另一台计算机提取的 PSK 请通过私密方法将 PSK 传输到 Linux。 在安装期间,仅在提示时提供这 64 位十六进制字符。 确认 Linux 驱动程序正常工作后: 1. 保留一份加密的脱机副本以备将来安装。 2. 删除不必要的明文副本。 3. 清空 Windows 回收站。 4. 从剪贴板历史记录、临时笔记和云同步文本文件中移除该 PSK。 提取助手适用于经过测试的 Windows Goodix 缓存格式。其他 Goodix 设备或截然不同的驱动程序版本可能使用其他格式。 ## 安装说明 解压或克隆完整的仓库并运行: ``` ./scripts/install.sh ``` 安装程序将: 1. 验证 USB 设备 `27c6:5125` 是否已连接。 2. 安装所需的 Arch Linux 软件包。 3. 重用现有的有效 PSK 或通过隐藏的终端输入请求一个。 4. 验证 PSK 是否恰好包含 64 位十六进制字符。 5. 将 PSK 存储在: ``` /etc/goodix-27c6-5125/psk.hex ``` 6. 将其所有者和权限设置为: ``` root:root 0600 ``` 7. 在严格的编译器警告下构建原生实现。 8. 运行原生的脱机自检。 9. 执行严格的 ChicagoHS 硬件兼容性探测。 10. 如果探测失败,则中止安装且不安装系统驱动程序。 11. 下载并验证锁定的 `libfprint 1.94.10` 源码。 12. 将 Goodix ChicagoHS 驱动程序添加到 `libfprint`。 13. 构建自定义运行时并将其安装到以下位置: ``` /opt/goodix-27c6-5125 ``` 14. 配置 `fprintd.service` 以加载自定义的 `libfprint`。 15. 重用现有的录入或开始新的录入。 16. 验证录入的指纹。 17. 安装通用的英文 PAM 包装器。 18. 为 `sudo` 配置三次指纹尝试。 19. 保留密码认证作为回退方式。 安装程序不会在其日志中打印 PSK 值。 ## 十二次扫描录入 录入会要求您将选定的手指放在传感器上十二次。 程序**不会**告诉您每次扫描应该使用手指的哪个区域。您必须自行改变放置方式。 在这十二次扫描中,请使用同一根手指的不同区域和角度。例如,包括中心、侧面、上部、下部、略微旋转的放置、局部边缘放置,以及日常使用中常见的自然位置。 您可以按任何顺序使用任何区域,并根据需要多次重复某个位置。但是,如果所有十二次扫描都完全在相同的中心小区域进行,当以后只有手指的侧面、顶部或底部接触传感器时,可能会降低识别率。 所有十二次扫描请使用同一根手指。 每次扫描被接受后: 1. 完全移开手指。 2. 让传感器短暂留空。 3. 使用另一个位置或角度再次放置同一根手指。 被拒绝的扫描不会推进录入进度。请完全移开手指并重试。 ## 常用命令 ### 检查安装 ``` ./scripts/status.sh ``` 这将检查: - 受支持的 USB 设备检测 - PSK 文件的所有者和权限 - 自定义 `libfprint` 安装 - systemd 配置 - 活动的 `fprintd` 服务 - D-Bus 设备发现 - 现有的指纹录入 - `sudo` PAM 集成 它不会打印 PSK 或指纹模板内容。 ### 运行源码自检 ``` ./scripts/selftest.sh ``` ### 验证已录入的手指 ``` ./scripts/verify.sh ``` ### 录入另一根手指 ``` ./scripts/enroll.sh ``` ### 移除自定义驱动程序 ``` ./scripts/uninstall.sh ``` 这会移除自定义运行时和托管的 PAM 集成,同时保留已安装的 PSK 和加密的指纹录入。 ### 恢复到全新安装状态 ``` ./scripts/fresh-reset.sh ``` 这将移除: - 自定义 `libfprint` - systemd drop-in 配置 - 托管的 `sudo` PAM 配置 - Goodix 指纹录入 - 已安装的设备 PSK - 本地构建和下载缓存 在运行全新重置之前,请确保您拥有正确 PSK 的另一份副本。 该脚本不会移除不相关的系统软件包或个人文件。 ## 运行时位置 安装程序使用以下位置: ``` /opt/goodix-27c6-5125/ Custom libfprint runtime and PAM wrapper /etc/goodix-27c6-5125/psk.hex Device PSK stored as root:root with mode 0600 /etc/systemd/system/fprintd.service.d/ Managed fprintd service configuration /var/lib/fprint/ fprintd fingerprint enrollment database /var/lib/goodix-27c6-5125/beta/ Saved PAM state used for safe recovery and uninstall /etc/pam.d/sudo Managed sudo fingerprint authentication block ``` ## 安全模型 ### 传感器通信 与传感器的通信使用设备 PSK 和加密的 TLS 会话。 ### 指纹数据 驱动程序不会故意将以下内容保存到磁盘: - 原始传感器帧 - 灰度指纹图像 - PNG 或 JPEG 指纹图像 - 明文原生模板 - 明文原生特征记录 通过 `fprintd` 存储的原生指纹模板使用以下方式保护: - AES-256-GCM - HKDF-SHA256 - 随机盐 - 随机 nonce - 已认证的 GCM 标签 模板加密密钥是从设备 PSK 派生的。 ### PSK 存储 PSK 存储在: ``` /etc/goodix-27c6-5125/psk.hex ``` 具有以下配置: ``` root:root 0600 ``` 普通用户不应能够读取它。 ### 密码回退 `sudo` 的指纹认证是一种附加的认证方式。密码认证仍然可用。 在身份验证过程继续进入正常的密码路径之前,允许进行三次指纹尝试。 ### 安全限制 - 拥有 root 权限的攻击者可以读取已安装的 PSK。 - 获取了 PSK 和加密指纹数据库的脱机攻击者也许能够解密原生模板。 - PSK 当前未受 TPM 封装保护。 - 独立的活体检测或呈现攻击检测尚未得到验证。 - 指纹模板是永久性的敏感生物识别数据。 - 指纹不能像密码那样被替换。 - 当前的匹配器阈值是实验性的。 - 该实现尚未经过认证的 FAR 或 FRR 测试。 - 指纹认证不能替代全盘加密。 - 指纹认证不能替代强账户密码。 有关详细的威胁模型,请参见 `SECURITY.md`。 ## 仓库内容 本仓库包含构建、测试、安装、维护和记录该驱动程序所需的文件: - 原生 USB 通信 - TLS 会话实现 - Goodix 协议处理 - ChicagoHS 兼容性探测 - 传感器捕获 - 手指存在检测 - 图像预处理 - 特征提取 - 录入 - 指纹匹配 - 模板加密 - Libfprint 集成 - PAM 集成 - 安装和恢复脚本 - 脱机自检 - Windows PSK 提取助手 - 项目文档 本仓库不包含: - 设备 PSK - 用户指纹模板 - 原始生物识别捕获数据 - 私人安装日志 - Windows 驱动程序二进制文件 - 专有的 Goodix DLL 文件 - Wine 运行时依赖项 - 历史开发存档 旧的 Phase 包 - 本地构建输出 - 下载缓存 部分源码注释包含逆向工程的功能标签和算法名称。这些注释保留了对独立重实现行为的技术可追溯性。 ## 故障排除 运行: ``` ./scripts/status.sh ``` 然后检查以下位置的最新日志: ``` logs/ ``` 安装程序和管理脚本会以以下形式打印最终的状态标记: ``` GOODIX_BETA_...=PASS ``` 或者: ``` GOODIX_BETA_...=FAIL ``` 配置文件不匹配或兼容性探测失败将以以下内容结束: ``` GOODIX_BETA_CHICAGOHS_PROBE=FAIL GOODIX_BETA_INSTALL=FAIL stage:chicagohs-compatibility-probe ``` 请勿针对 Milan 或其他不受支持的传感器系列绕过此失败。 以下位置提供了额外的恢复信息: ``` docs/TROUBLESHOOTING.md ``` 在发布日志之前,请检查其中是否包含私人机器信息。 切勿发布: - 设备 PSK - 来自 `/var/lib/fprint` 的文件 - 指纹模板内容 - 原始生物识别数据 ## 开发方法 本项目是一项 AI 辅助的逆向工程工作,旨在为不受支持的硬件提供 Linux 互操作性。 人工智能被用作工程工具以加速: - 逆向工程分析 - 源码实现 - 测试生成 - 日志分析 - 调试 - 文档编写 该实现通过在真实的 Huawei MateBook D15 上进行反复测试而得到验证。 本项目不分发或不需要: - 反编译的供应商源码 - Goodix Windows 二进制文件 - 专有的 Goodix DLL 文件 - Wine - Windows 运行时组件 该 Linux 实现是基于观察到的设备和软件行为独立编写的。 Goodix 和 Huawei 的名称可能是其各自所有者的商标。 ## 项目成熟度 目前的验证包括: - 原生 USB 通信 - 加密的 TLS-PSK 会话 - 严格的 ChicagoHS 兼容性探测 - 脱机协议自检 - 原生预处理和特征提取 - 录入和匹配器测试 - Libfprint 集成 - 持久化的加密模板 - 自动手指触摸和手指抬起检测 - fprintd 集成 - PAM 集成 - `sudo` 认证 - 服务重启持久化 - 全新安装工作流 - 十二次扫描的多样化录入 这并不能使该驱动程序成为经过认证的生物识别安全产品。 测试主要在一台 Huawei MateBook D15 上进行。即使在具有 USB ID `27c6:5125` 的其他计算机上,也无法保证结果。 ## 许可证 独立实现的项目源码在以下许可下分发: ``` LGPL-2.1-or-later ``` 有关完整的 GNU Lesser General Public License version 2.1 文本,请参见 `LICENSE` 文件。“或更新版本”选项由项目许可证标识符和源码声明进行声明。 该许可证仅适用于本仓库中包含的独立实现的源代码和项目材料。它不授予对专有的 Goodix 或 Huawei 软件、固件、驱动程序、DLL 文件、商标或其他第三方组件的权利。 贡献者不得提交: - 反编译的专有源代码 - 供应商二进制文件 - 专有 DLL 文件 - 设备 PSK - 指纹模板 - 原始生物识别捕获数据 - 他们无权分发的材料 第三方组件保留其原始许可证。
标签:AI合规, C2日志可视化, libfprint, PAM, 客户端加密, 指纹识别, 硬件逆向, 网络安全监控, 驱动开发