berkekbgz/libfprint-goodix-spi

GitHub: berkekbgz/libfprint-goodix-spi

该项目是一个开源的 Linux/libfprint 驱动,旨在为 Goodix SPI 指纹传感器提供指纹注册与验证功能,内置逆向工程的原生匹配器。

Stars: 6 | Forks: 1

False-color visualization of a real Goodix GDIX51C0 sensor capture
libfprint Goodix SPI Driver

一个针对 Goodix 主机处理指纹传感器且自带官方 matcher 的树外 libfprint 项目!

CI License: LGPL-2.1-or-later Status: pre-release



## 受支持的设备 - Goodix GDIX51C0 * 在华为 Matebook 16s 上测试过 ## 已知限制 - 这是一个预发布版本。该驱动程序仅在上述列出的机型上进行了硬件测试, 打包或集成的细节可能仍会发生变化。 驱动程序 ID、存储路径和已注册指纹的格式将被视为稳定版。 - GDIX51C0 是目前唯一支持的传感器,并且已在 华为 MateBook 16s 上进行了硬件测试。 - 默认的 GPIO 线路与经过测试的机型相匹配。使用相同传感器的其他笔记本电脑 可能需要覆盖 `GDIX51C0_GPIOCHIP`、`GDIX51C0_IRQ_LINE` 和 `GDIX51C0_RESET_LINE` 配置。 - 该传感器必须通过 Linux spidev 暴露;本项目不安装 自定义内核驱动。 - 集成已针对指定的 libfprint 和 fprintd 版本进行了测试。较新的 版本可能需要更新集成补丁。 ## 安全模型 - **受损的主机会导致防御失效。** 具有 root 或内核访问权限的攻击者可以 绕过身份验证并读取生物识别数据。这里的指纹解锁是为了防御 对您机器的物理和机会性访问,而不是针对已经以您的身份运行的 恶意软件。 - **无活体检测。** 传感器的原始防伪信号从未 暴露给主机,因此该驱动程序无法执行呈现攻击(presentation-attack) 检测。高质量的假手指可能会通过验证。 - **模板和密钥存放在磁盘上。** 已注册的指纹和 TLS PSK 存放在 `/var/lib/fprint` 下,仅受文件系统权限(`0600`)保护。 - **原生 matcher 确实能带来的好处**是,其错误接受率远低于 通用图像 matcher 在这种小尺寸传感器上所能达到的水平——也就是说,错误的手指 解锁您机器的可能性要低得多。 将指纹解锁作为一种便利手段,而不是您唯一的 防线。 ## 安装 ``` ./install.sh ``` 安装程序会: 1. 将指定的 libfprint 和 fprintd 源码获取到 `${XDG_CACHE_HOME:-$HOME/.cache}/goodix-spi-driver/sources` 中, 2. 应用 libfprint 集成和自适应持久化补丁, 3. 在 `/opt/goodix-spi-driver/libfprint` 下构建影子 libfprint, 4. 在 `/opt/goodix-spi-driver/fprintd` 下构建修补过的 fprintd, 5. 配置 fprintd 以同时使用这两个影子构建版本, 6. 重启守护进程。
受支持的默认版本是 libfprint `v1.94.10` 和 fprintd `v1.94.5`。可以 直接提供不同的 libfprint 检出版本: ``` ./install.sh /path/to/libfprint ``` 或将其获取到一个单独的缓存条目中: ``` LIBFPRINT_REF= ./scripts/fetch-libfprint.sh ``` 构建依赖项包括 GLib/GIO、GUsb、GUdev、`libgpiod >= 2.0` 和 `OpenSSL >= 3.0`。默认修补过的 fprintd 构建还需要 Polkit 的 GObject 开发文件(`polkit-gobject-1 >= 0.91`)。详细的 libfprint 诊断默认是禁用的。仅在调试会话时使用 `GOODIX_SPI_DEBUG=1 ./install.sh`。 ### 开发者构建 普通构建不包含捕获转储写入器、协议调整旋钮或 故障注入钩子。如需为驱动程序开发编译这些工具: ``` GOODIX_SPI_DEVELOPER=1 GOODIX_SPI_DEBUG=1 ./install.sh ``` 开发者诊断可能会写入生物特征捕获数据,不应在 日常安装中保持启用。运行时转储变量对 默认发布版本没有影响。CI 会检查两种构建配置文件,并拒绝仍然 包含开发者钩子的发布库。 ## 首次运行 该传感器还需要一个 32 字节的 TLS PSK。如果未提供密钥,默认 安装程序会授权一次随机的首次运行配置,并将其存储为 `/var/lib/fprint/gdix51c0.psk`,权限模式为 `0600`。如需使用现有密钥: ``` GOODIX_TLS_PSK_HEX=<64-hex> ./install.sh ``` ## 注册和验证 安装完成后注册指纹: ``` fprintd-enroll -f right-index-finger ``` 然后进行测试: ``` fprintd-verify ``` ## 仓库结构 ``` lib/goodix/common/ transport-neutral codecs and checksums lib/goodix/chicago/ I/O-free native ChicagoHS biometric backend drivers/gdix51c0/ GDIX51C0 transport, session, capture, and libfprint glue patches/ pinned libfprint and fprintd integration patches scripts/ fetch, build, install, and hardware-test helpers config/ supported-device metadata and install hooks integration/ source-owned Meson registration fragments tests/ deterministic common and Chicago tests docs/ architecture, support, and development roadmap re/ source-only interoperability research and oracles ``` [架构](docs/ARCHITECTURE.md) 解释了抽象边界; [路线图](docs/ROADMAP.md) 涵盖了其他传感器。 ## 卸载 ``` ./uninstall.sh ``` 仅在需要移除持久化的 PSK 和传感器校准 数据时使用 `./uninstall.sh --purge`。 该项目目前在树外进行维护。该驱动程序的某些部分最终 可能适合合入 libfprint,但这只是一种可能性,而非 承诺的发布途径。SPI 集成和自适应模板 持久化首先需要与 libfprint 和 fprintd 的 维护者达成一致。 ## 许可证与来源 除非另有说明,本项目的原始源代码均在 LGPL-2.1-or-later 下分发;参见 [LICENSE](LICENSE)。改编后的文件保留其上游 版权声明,针对其他项目的补丁遵循该目标 项目的许可证。[PROVENANCE.md](PROVENANCE.md) 记录了确切的参考 仓库、修订版本、许可证以及复制与行为边界。 由 [Berkekbgz](https://berkekbgz.dev/) 浪费了大量 token 用 ❤️ 制作
标签:C, libfprint, 安全测试工具, 客户端加密, 指纹传感器, 生物识别, 硬件驱动, 预握手