当前位置:首页 > 时尚

指纹识别的原理

手指按在手机屏幕上的指纹那一刻,屏幕下方亮起一道绿光,识别然后“咔”一声解锁了。指纹这个过程快得让人来不及想——它到底是识别怎么认出我的?

答案藏在你的指尖皮肤下面。手指表面那些肉眼可见的指纹纹路,斗形、识别箕形、指纹弓形,识别只是指纹冰山一角。真正干活的识别是更深层的结构:表皮层往下,真皮层和表皮层交界的指纹地方,有一排排乳头状突起,识别它们排列成脊线和谷线。指纹脊线就是识别你能摸到的凸起,谷线是指纹凹下去的沟。这些结构的形状在胎儿发育到大约四个月时就定型了,之后一辈子不变。除非你把手伸进硫酸里,否则它们会跟着你进棺材。

那手机是怎么“看”到这些纹路的?

目前主流方案分两大阵营。低端机常用光学式,说白了就是给手指拍张照。屏幕或背面的光源照亮指腹,反射光穿过棱镜打到CMOS传感器上。脊线接触玻璃,光线被吸收,拍出来是暗的;谷线悬空,光线反射回去,拍出来是亮的。一明一暗,纹路就出来了。这方案便宜,但有个尴尬的问题:手指脏了、有水、有油,拍出来的照片就糊了。更麻烦的是,拿张打印了你指纹的纸片,有时候也能骗过去。

中高端机普遍用 capacitive 电容式。手指是导体,传感器是一排排微小的电容极板。脊线直接碰到极板,谷线隔着一层空气。空气的介电常数和皮肤差很多,于是每个像素点测到的电容值就不一样。脊线处电容大,谷线处电容小,转换成灰度图就是指纹图像。这方案比光学式靠谱,湿手也能应付,但手指太干或者脱皮严重的时候,图像质量会掉得厉害。

还有一种更狠的,超声波式。高通主推,三星用过几代。传感器发出高频声波,声波碰到脊线和谷线反射回来的时间不同,或者反射强度不同。它能穿透玻璃、金属,甚至能探测到汗腺和毛孔的位置。理论上最安全,因为伪造难度极高。但成本摆在那,普及速度一直不快。

图像拿到了,接下来才是真正的技术活——比对。

不是直接拿两张图做像素级对比,那样稍微按歪一点就废了。算法先做特征提取。指纹上那些脊线分叉的地方叫分叉点,脊线突然断掉的地方叫端点,还有短纹、环点、孤立点等等。这些叫细节点,一副完整指纹大概有几十到上百个细节点。算法记录每个细节点的位置、方向、类型,以及它和周围几个细节点的相对关系。这些数据加起来,大概几百字节到一千字节左右。

比对的时候,算法在两张特征集之间找匹配。不是要求所有点都对上,而是找一个最优的刚体变换——平移、旋转、缩放——让尽可能多的点重合。行业标准通常要求匹配上12个以上的细节点才判定为同一个人。这个阈值是权衡的结果:太低,安全性和误识率扛不住;太高,用户按十次解锁不了一次,体验直接崩掉。

我拆过几台旧手机,发现一个有意思的事。同一根手指,早上刚起床和下午干完活,传感器读到的图像差异不小。早上手指湿润,脊线谷线对比度高;下午手指干燥,有些谷线几乎糊成一片。好的算法会做图像增强,自适应地调整对比度,甚至用Gabor滤波器去强化纹路方向。这些处理都在几百毫秒内完成,用户根本感觉不到。

还有个细节值得说。指纹传感器采集的从来不是“完整指纹”,而是按压区域那一小块。所以手机在录入的时候会让你反复按十几次,每次挪一点位置,拼出一张更大的模板图。解锁时,它拿你当前按下的那一小块去和模板做局部匹配。这意味着,你手指按在传感器边缘和按在中心,走的其实是不同的匹配路径。

安全层面,指纹数据不会存成图像。手机里存的是经过单向变换的特征模板,理论上无法从模板逆推出原始指纹。模板存在独立的安全区域里,比如ARM的TrustZone或者苹果的Secure Enclave,主系统根本读不到。但话说回来,指纹这东西你走到哪留到哪,杯子、门把手、电梯按钮上全是。用它当密码,本质上是用一个你没法更改的字符串。所以厂商才逼着你设数字密码做备份——指纹只是方便,不是绝对安全。

下次你按下手机解锁的时候,可以想想这一连串事:真皮层里的乳头突起、电容极板上的电荷变化、细节点之间的几何关系、还有那个12个点的匹配阈值。整个过程不到半秒,但背后是材料、电子、图像处理、模式识别和密码学的一整套配合。

分享到: