berkekbgz/libfprint-goodix-spi
GitHub: berkekbgz/libfprint-goodix-spi
该项目是一个开源的 Linux/libfprint 驱动,旨在为 Goodix SPI 指纹传感器提供指纹注册与验证功能,内置逆向工程的原生匹配器。
Stars: 6 | Forks: 1
libfprint Goodix SPI Driver
一个针对 Goodix 主机处理指纹传感器且自带官方 matcher 的树外 libfprint 项目!
## 受支持的设备
- 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, 安全测试工具, 客户端加密, 指纹传感器, 生物识别, 硬件驱动, 预握手