tsteppy/egistec-eh576-libfprint

GitHub: tsteppy/egistec-eh576-libfprint

为不被上游支持的 EgisTec EH576 指纹传感器提供 Linux libfprint 驱动,实现指纹录入、验证及系统登录。

Stars: 0 | Forks: 0

# EgisTec EH576 (USB `1c7a:0576`) 的 Linux 指纹驱动 一个可用的 **libfprint 驱动**,专为 EgisTec EH576 指纹传感器打造。上游 libfprint 将其列为不支持。如果你的笔记本指纹读取器 在 Linux 上毫无反应,并且 `lsusb` 显示为 `1c7a:0576`,这就是为你准备的。 已在运行 Linux Mint 22.2 的 **Lenovo Yoga 7 16IRL8 (82YN)** 上确认可用: 包括录入、验证、`sudo` 以及使用手指解锁锁屏。 其他笔记本电脑也可能配备了此传感器——欢迎反馈,请参阅 [请求帮助](#help-wanted)。 ``` lsusb | grep 1c7a:0576 # if this prints something, this driver is for you ``` ## 真实的状态 **它可以工作,但这是一个个人的逆向工程项目,而不是经过认证的生物识别产品。** 这句话的两部分同等重要。 已验证的内容:协议、图像采集、录入、匹配,以及完整的 fprintd/PAM 登录路径(在一台传感器上)。 数据依据:在**一台设备、一个人**身上进行的两次标记测试会话—— 10 次真实按压和 16 次冒充按压。在默认的阈值下, 错误接受率为 **0%**,错误拒绝率约为 **10%**(被拒绝后重新按压即可)。 这足以证明该驱动程序可以工作,但远不足以作为 安全规范来引用。更多测试人员是任何人能做出的最 有用的贡献。 将其用于便利——解锁你自己的笔记本电脑,无需输入 长密码即可使用 `sudo`。**保持你的密码有效**,这里的 PAM 设置 在设计上就保证了这一点。如果你的机器存储了一旦泄露会 造成真正伤害的数据,请将密码视为真正的防线。 ## 安装说明 需要 Debian/Ubuntu 系列发行版(在 Linux Mint 22.2 上测试过)。构建 依赖项: ``` sudo apt install meson ninja-build gcc pkg-config libglib2.0-dev \ libgusb-dev libnss3-dev libgudev-1.0-dev git ``` 然后: ``` git clone https://github.com/tsteppy/egistec-eh576-libfprint.git cd egistec-eh576-libfprint ./install.sh ``` 该脚本会获取 libfprint,添加此驱动,进行构建,并安装到 `/usr/local` —— 该路径在链接器搜索路径中位于 `/usr/lib` 之前,因此它 会优先于你发行版的 libfprint **而不会覆盖任何 打包的文件**。然后它会检查链接器是否确实优先加载了它。 撤销所有操作:`./install.sh --uninstall` ## 录入指纹 ``` fprintd-enroll ``` **在八次按压之间,有意识地移动你的手指**:居中、向指尖、 向指关节、左、右、向左翻转、向右翻转、再次居中。 这不是随口一说。该传感器成像区域约为 5x4 毫米——只是你 指尖的一小部分——因此只有当按压落在你 录入过的皮肤区域时才会匹配成功。 在同一个舒适位置录入八次按压测得的 错误拒绝率高达 **60%**;而同样八次按压 分散在整个指尖上测得的错误拒绝率为 **10%**。`fprintd-enroll` 不会给出位置提示,因此这全靠你自己。 然后进行测试: ``` fprintd-verify ``` ## 指纹登录 验证成功后: ``` sudo pam-auth-update --enable fprintd ``` 这会将指纹身份验证置于登录、 锁屏和 `sudo` 的密码提示之前,**将密码保留为后备方案**——这 很重要,因为落在已录入区域之外的按压会被拒绝,而 你会希望直接输入密码,而不是跟传感器较劲。 在信任它之前先进行测试。在一个备用的终端中保持打开一个 root shell (`sudo -i`),然后在一个*新*终端中: ``` sudo -k && sudo true ``` 你应该会看到一个指纹提示;忽略它十秒钟应该会 自动切换到密码提示。一旦两种路径都能正常工作,锁屏就可以 正常使用了,无需进一步配置。 禁用方法:`sudo pam-auth-update --disable fprintd` ## 运行原理 完整的技术细节请参阅 [`driver/README.md`](driver/README.md)。简短的 版本如下: - **不是 `FpImageDevice`。** libfprint 通常的流程会将图像交给 NBIS 细节特征匹配器,这**在这里行不通**:在细节特征低于 10 个时,bozorth3 拒绝计算, 而该传感器采集的 70x57 帧物理上 只包含约 7 个特征。厂商自己的 Windows 驱动程序也不 使用细节特征匹配。 - **匹配过程在宿主机上的驱动程序中进行**,通过将增强后的 指纹纹理结构与已录入的帧进行关联。录入时会存储 8 个原始帧; 验证时会对探测帧与每一帧进行评分,并取最高分。 - **幽灵帧保护。** 此传感器会间歇性地重新发送 来自之前按压的陈旧帧,并带有新的噪声,因此校验和无法识别它。 如果不加防范,这将是一种身份验证绕过手段——按压任何手指, 偶尔也能通过验证。每次采集都会与同一次按压的第二帧进行 比对检查。 匹配器位于双函数接口(`driver/egis_match.h` 中的 `em_frame_compute` / `em_match`)之后,因此可以在不触及 任何 USB 或状态机代码的情况下对其进行替换。 ## 已知限制 - **约 10% 的真实按压会被拒绝**并且需要重试,通常 是因为按压落在了已录入皮肤的区域之外。重新录入时 扩大覆盖范围会有所帮助。 - **数据仅来自一台传感器和一个人。**请参阅 [请求帮助](#help-wanted)。 - **目前仅限 Debian/Ubuntu 系列** —— 除了 库路径和软件包名称外,没有任何内容是特定于发行版的,因此移植应该很容易。 - 除了 libfprint 的默认设置外,**没有挂起/恢复处理**。 ### 硬件警告 - **切勿 USB 重置此传感器**(`usbreset`,pyusb `dev.reset()`)。否则 固件会挂起,设备会从总线上消失,直到完全**断电**—— 重启是不够的。 - 在不重新复位的情况下发起第二次图像请求会返回空白帧。请将 全零帧视为无效采集,千万不要当成“无手指”。 ## 请求帮助 最有价值的贡献是**来自其他硬件的数据**。如果你有 EH576: 1. 安装、录入并运行 `python3 tools/test_matching.py`。它会按名称 提示进行每次按压,对每一帧进行标记,并打印评分表。 2. 附上你的**笔记本型号、发行版和评分表**来提交一个 issue。 **切勿上传原始指纹图像。**它们是你的生物识别特征,无法 重新颁发,本项目也不需要它们。只需提供分数、型号和 日志——该测试工具的设计初衷就是仅凭这些数字就能派上用场。 同样有用的有:向其他发行版的移植、替换用的匹配器(该接口 特意设计得很小),以及任何希望将其正式推送到 libfprint 上游的人。 ## 致谢 基于 [Pengu601/EgisTec-EH576](https://github.com/Pengu601/EgisTec-EH576) 中的逆向工程工作构建—— 初始化/重复命令序列以及基于方差的指纹检测均来自 该项目,该项目也是建立在早期的 [Animeshz/EgisTec-EH575](https://github.com/Animeshz/EgisTec-EH575) 工作之上的。 其他协议细节(增益寄存器、厂商的图像 预处理和质量指标)则是从 EgisTec 的 Windows 驱动程序中还原出来的。 驱动程序结构遵循 libfprint 的 `egis0570` 和 `egismoc` 驱动。 ## 许可证 LGPL-2.1-or-later,与 libfprint 保持一致。请参阅 [LICENSE](LICENSE)。
标签:C2日志可视化, libfprint, Linux驱动, 客户端加密, 指纹识别, 生物识别, 硬件适配, 预握手