蔣林軒,余 杰,劉曉東,吳慶波,孔金珠
(1.國防科技大學 計算機學院,湖南 長沙 410073;2.天津麒麟信息技術有限公司,天津 300300)
生物特征識別是指利用人的部分身體部位所具備的生理學特性進行認證的一種技術。隨著近些年來移動終端的普及、用于生物特征采集與識別的傳感器越來越小,生物特征識別技術已經普及到人們的日常生活中。
生物特征識別主要分為特征采集和特征認證。特征采集是利用生物統計學原理和計算機算法,將傳感器從人體特征部位收集到的光學、聲學、力學等信息進行特征提取并編碼,轉換為唯一的數字編碼,并將這些編碼通過各種方式合成一個對應個體身體部位的特征模板。特征認證是將當前采集到的生物特征碼與數據庫中的指定歷史特征模板比對,如果比對匹配,則代表認證通過,比對不匹配則認證不通過。
在主流的操作系統中,幾乎都支持了生物特征識別。大多數操作系統都是以服務的形式提供生物特征的統一采集和比對識別,少數操作系統只提供算法庫和設備驅動,不提供統一的服務。
對于用戶來說,生物特征識別是一個新的、快速、高效以及安全的認證方式,因此在操作系統層面使用生物特征識別認證是很有必要的。本節將描述當前流行的通用操作系統上的生物特征識別框架,并對比其優缺點。
Windows中的生物特征識別服務各組件間集成度比較高,總的來說可以分為三層[1]:認證服務層、核心層和驅動層。
認證服務層定義應用接口,使用核心層各個模塊的功能為上層的前端應用提供統一的接口。核心層為服務層提供功能性接口,為驅動層定義驅動接口并提供存儲服務。驅動層負責實現核心層的功能接口,并操控硬件完成接口功能。
Windows的生物特征識別服務結構如圖1所示,認證服務層由生物特征識別框架應用接口和Windows生物特征認證服務組成;核心層由生物特征認證服務提供者及其三個模塊、生物特征識別驅動接口組成;驅動層由各種傳感器組成[2]。各組成部分完成如下功能。

圖1 Windows生物特征識別服務結構
生物特征識別框架應用接口(Windows Biometric Framework API):Windows生物特征識別框架提供的面向應用的統一管理接口。
Windows生物特征認證服務(Windows Biometric Service):一個特權服務,通過使用兼容Windows生物識別驅動程序接口(WBDI)的驅動程序來管理所有生物識別設備。
生物特征認證服務提供者(Windows Biometric Service Provider,WBSP):Windows生物識別服務的一個組件,用于管理特定類別的生物識別技術,如指紋識別技術。WBSP內置在Windows生物識別服務中,并且它們不是插件,不支持第三方BSP。
傳感器模塊(Sensor Adapter):一個生物特征識別的插件式組件,提供了配置傳感器、捕獲樣本,并且控制生物特征數據輸入到引擎模塊。
引擎模塊(Engine Adapter):一個生物特征識別的插件式組件,通過規范化數據、提取數據特征、匹配樣本數據與現有模板等操作來處理樣本。
存儲模塊(Storage Adapter):一個生物特征識別的插件式組件,用于存儲、管理和檢索模板。
模板數據庫(Template Database):一個小型的數據庫,存放生物特征的模板數據。
生物特征識別驅動接口(Windows Biometric Driver Interface):一套用于驅動和管理指紋傳感器的標準抽象接口。
設備驅動(Device Driver):管理特定指紋傳感器,對生物特征識別驅動接口的一種特定實現。
Android的生物特征識別服務分為兩層:后端服務層和生物特征識別的可信執行環境(Trusted Execution Environment,TEE)[3]。
Android的特征識別服務結構如圖2所示,后端服務層定義應用程序調用的特征識別接口,提供訪問TEE中的特征數據的Keystore服務和API,并通過HAL層使用傳感器驅動。生物特征識別的TEE由硬件供應商提供的傳感器驅動庫和Keymaster硬件加密組件組成。各個組成部分完成如下功能[4]。

圖2 Android生物特征識別結構
生物識別接口:Android生物特征識別框架提供面向應用的統一管理接口。Android 9及更高的版本可以直接調用,而Android 8.0及更低的版本需要中間兼容庫來調用特征識別接口。
生物特征認證服務:系統中的一個單例進程,它負責與進行生物特征認證的守護進程通信。
生物特征認證守護進程:一個binder接口的實例,封裝了生物特征HAL廠商給定的傳感器驅動庫。
Keystore API和Keymaster:為可信執行環境(TEE)中的安全密鑰存儲提供硬件加密支持的組件。
生物識別HAL:硬件供應商對生物特征HAL層的實現。其中HAL包含運行在TEE中的傳感器驅動庫。特定供應商的驅動庫只和指定的硬件通信。
Linux下的生物特征識別目前只有指紋識別這一種,并且不是以服務的形式存在,而是以指紋識別庫的形式存在。
Linux的指紋識別是由libfprint[5]庫來完成的。libfprint庫提供了部分指紋掃描儀的驅動,并提供應用指紋識別接口完成指紋的采樣和比對。
libfprint庫主要分為三個部分[6]:指紋識別接口、指紋識別算法庫和圖像傳感器驅動,如圖3所示。

圖3 Linux生物特征識別結構
指紋識別接口提供應用程序使用指紋識別硬件的應用級接口。指紋識別算法庫提供指紋識別算法,從圖像傳感器拿到指紋硬件采樣的指紋圖片,通過算法轉換為指紋特征值和指紋模板[5]。圖像傳感器驅動用于控制硬件采集指紋圖像。
libfprint只是一個收集指紋圖像、生成指紋模板、比對指紋是否匹配的運行時庫,對于指紋的存儲由應用來定義。在目前的Linux系統上,默認的指紋數據都是明文存儲在用戶的home目錄中,無特殊權限,用戶執行的任意程序都能隨意訪問、修改指紋數據。并且,由于libfprint不提供統一存儲功能,各個應用程序可以自己獲取指紋信息,自己定義存儲,導致應用間的指紋數據無法通用,使得用戶需要在每一個使用指紋識別的應用中都錄入自己的指紋,這種交互邏輯重復低效,用戶體驗非常差。
Windows、Android、Linux三個平臺上,生物特征識別的方案各不相同。下面將從支持場景、認證架構、假面方式、存儲位置、存儲方式、安全性和支持的特征類型7個方面對比分析各個方案的優缺點。對比項及結果參見表1。
在支持的場景上,三個平臺的方案都支持系統的登錄、鎖屏以及應用程序使用生物特征完成功能。
在認證架構上,Windows平臺和Android平臺都是后端服務的形式,為上層應用提供生物特征服務。而Linux平臺上是以動態鏈接庫的形式存在,需要應用程序在使用功能的時候重新探測并初始化設備,也需要應用程序自己釋放設備資源。
在加密方式上,Windows平臺使用軟件加密算法來加密特征,Android平臺使用硬件芯片中的Key加密,Linux平臺下則直接將特征明文存儲在系統中。

表1 各平臺生物特征識別方案對比
在特征存儲的位置上,Windwos平臺將數據存儲在系統數據庫中,Android平臺將數據存儲在可行執行環境(TEE)中,Linux平臺下則是直接存儲在用戶目錄下的文本文件中。
在存儲方式上,Windwos平臺和Android平臺都是統一管理統一存儲,所有應用共用特征。而Linux平臺下,特征是由應用各自存儲,如需共用特征則需要應用自己協調。
在安全性上,Windwos平臺由于使用加密的系統數據庫,因此安全性高;Android平臺由于使用硬件芯片中的Key加密特征,并存儲在TEE中,因此安全性非常高;Linux平臺由于特征未加密,并隨意存儲在用戶目錄下,導致應用可以隨意讀取修改特征信息,因此安全性低。
在支持的特征類型上,Windwos平臺支持指紋、人臉識別,并且可以擴展虹膜、指靜脈、聲紋等不同的生物特征類型的識別;Android平臺支持指紋、人臉、虹膜識別,并且可以擴展指靜脈、聲紋等生物特征類型的識別;Linux平臺只支持指紋識別,并且不能擴展其他生物特征類型。
與Windows、Android相對比,目前Linux上的生物特征識別庫存在以下不足:
(1)無服務,無守護進程:libfprint是一個運行時庫,無法提供持續性服務。并且在多個應用同時使用libfprint來操作同一個應用的時候,會出現硬件資源的爭用,而libfprint不提供鎖機制,從而導致libfprint庫和應用程序的崩潰。
(2)安全性低:默認的指紋數據以明文的形式存放在用戶home目錄中,任意程序都可隨意訪問、修改指紋數據,導致認證極不安全。
(3)無統一存儲:libfprint不提供統一存儲服務,各個應用只能自己存儲和使用自己錄入的特征,導致用戶在使用應用的時候需要重復錄入自己的特征。
(4)支持的生物特征類型少:由于libfprint庫方案只適用于指紋,因此Linux上沒有統一的指靜脈、虹膜、聲紋等認證服務。
由于Linux平臺下生物特征識別方案只有libfprint庫這一種,這些不足與缺點暫無其他解決方法,因此本文為Linux上生物特征識別設計并實現了一個新的底層服務:生物特征識別框架服務(Biometric Framework Service,BFS),用于提供統一的生物特征識別認證,進行統一的加密存儲。
本文設計并實現的生物特征識別框架服務(BFS)支持多種生物特征識別。BFS為應用層定義了生物特征識別的應用接口,為設備提供商定義了生物特征識別的驅動接口,提供統一的生物特征服務,提供統一的存儲管理,提供統一的驅動配置管理。
BFS分為三層:服務層、核心層和驅動層(如圖4所示)。服務層定義了生物特征識別的應用接口,提供了驅動管理、設備管理、事件管理、狀態反饋機制。核心層定義了生物特征識別的驅動接口,定義了設備驅動的實體,提供了生物特征模板的統一存儲與加密方式。驅動層主要由設備提供商完成驅動編寫,用于實現對生物特征識別驅動接口,操作硬件設備。

圖4 生物特征識別框架服務(BFS)結構
由于生物特征識別的交互行為具有使用頻率低、交互時間長、交互方式多樣化的特點,BFS的服務層使用事件驅動的方式為上層應用提供服務,并提供狀態和交互提示變更的通知。
BFS服務層是一個基于事件驅動的服務,使用DBus總線為上層應用提供生物特征識別的應用接口。生物特征識別應用接口是事件接口,每當應用程序調用應用接口時,都會發出一個事件,BFS服務收到事件后開始事件處理。在處理過程中,服務層會檢測設備狀態和交互狀態的變更,并通過DBus信號通知應用程序。
服務層的處理分為兩個階段:初始化階段、事件處理和消息反饋階段。
初始化階段主要完成驅動的加載與初始化,設備預初始化,已連接設備的探測,USB熱插拔事件處理函數和狀態變更處理函數的注冊,DBus服務的注冊和時間循環,流程如圖5所示。

圖5 生物特征識別框架服務結構
完成初始化部分后,服務開始事件循環,等待應用程序的服務請求事件。
當應用程序調用應用接口后,服務層檢測到事件,開始處理事件。服務層首先檢測應用是否有調用該接口的權限,權限通過后通過核心層調用設備開始進行生物特征交互。在交互過程中,設備的狀態和用戶的交互會隨時變化,流程如圖6所示。

圖6 事件處理及消息反饋流程
例如在指紋或指靜脈特征錄入過程中,會需要用戶按下或者抬起手指,交互狀態會在按下手指和抬起手指間變更。此時驅動會設置不同的交互狀態碼,服務層通過核心層檢測到交互狀態變更后,會發送DBus事件通知信號,通知應用底層已更新交互狀態。應用調用服務層的輔助接口,將交互碼翻譯成交互字符串,完成人機交互的信息更新。
由于可用于生物特征識別的生理特征部位種類很多,各類特征的采樣形式和交互方式都不一致,因此對于一個支持多種生物特征的識別服務來說需要一個足夠廣泛的抽象模型與結構,才能支持多種生物特征。
BFS核心層基于對指紋、指靜脈、虹膜和聲紋的交互行為的分析,總結并抽象了設備與驅動的結構,定義了設備操作的基本接口、擴展接口和輔助接口,梳理了系統賬戶、人與硬件特征采樣值的關系,設計并實現了統一的數據存儲方式。
并且BFS的核心層沿用Linux/UNIX的接口設計哲學:“提供機制而不是策略”,分離出了具體生物特征識別算法,只提供算法與服務連接的機制,提高核心層兼容性與魯棒性。具體的生物特征識別算法由驅動層完成。
通過以上方式,BFS核心層目前支持指紋、指靜脈、虹膜、聲紋四種生物特征的識別。并且BFS具備強擴展性,能夠快速地擴展掌紋、人臉等識別算法[7]。
BFS核心層定義的設備及其驅動的結構如圖7所示,包含了設備和驅動的各種分類信息、核心層需要的輔助狀態和設備的操作集合。

圖7 設備及其驅動抽象與數據結構
BFS核心層對各類生物特征采集設備操作的抽象與拓展分為三個部分:基本接口、擴展接口和輔助接口。基本接口完成基礎的硬件操作;擴展接口完成用戶使用時常用的硬件操作;輔助接口用于管理硬件設備和對接驅動層。結構如圖8所示。
傳統Linux上libfprint的實體映射關系是:系統賬戶-人- 個人的十個手指。這種映射關系固定了系統賬戶和人之間是一一映射的關系,然而現實生活中,常常有單系統賬戶對應多人的映射關系,例如家庭用戶和系統管理員。并且這種映射關系限定死了只能使用十個手指,也就是只能錄入十個指紋,從而導致對指紋采集和認證時手指的角度、力度、干濕程度要求都很高。
BFS核心層綜合其他各種生物特征,將系統實體的對應關系延伸拓展,使用某個部位的特征信息作為判斷依據,使用采樣信息作為最終的存儲單位建立映射關系,并且不再限定采樣或者特征的數量。系統E-R圖如圖9所示。

圖9 設備操作接口的抽象與拓展結構

圖10 聲紋、指靜脈特征錄入過程

圖11 特征搜索過程
在進行生物特征識別的時候,生物特征的采樣信息質量會影響到識別的通過率。例如,在指紋識別的時候,手指放在指紋儀的角度、手指與指紋儀的重合程度、手指的干濕程度都會影響到指紋比對的結果。
BFS核心層將特征識別的粒度減小到特征的某次采樣上,并且不再限定采樣的次數和特征信息的個數,通過增加樣本集數據量可以換取更高的識別通過率。
BFS核心層抽象出來的接口在具體硬件上的實現構成了BFS的驅動層。在驅動層中,每一款硬件對應一個驅動。
驅動層負責完成對核心層定義的驅動接口的實現,并提供生物特征識別的算法(策略)。目前,BFS底層使用開源項目libfprint提供指紋識別算法,使用govpr提供基于GMM-UBM的聲紋識別算法。
本框架服務在Ubuntu Kylin 16.04開發,并在Ubuntu Kylin 18.04、Ubuntu Kylin 18.10平臺上完成適配。采用C/C++語言開發,代碼約為15 000行,主要包括服務程序、核心庫、框架驅動與命令行管理工具。
生物特征和指靜脈特征的錄入操作運行圖如圖10所示。
靜脈的查找過程及查找結果圖如圖11所示。
本文將在指紋通過率和生物特征識別方案的功能點兩個維度上與libfprint方案進行對比與評估。
3.2.1通過率對比
指紋通過率測試將在通用的臺式機上進行。測試系統的關鍵參數如表2所示。

表2 測試機的關鍵參數
指紋通過率的測試分成4個場景,分別從多用戶單系統賬戶手指中心放置、單用戶多手指左右偏移放置、單用戶單手指旋轉放置、單用戶單手指隨機偏移放置四個方面進行對比。
另外,由于傳統的libfprint指紋識別方案最大指紋錄入數量為10個指紋,因此在以下場景的libfprint指紋方案的錄入步驟中,都是以10個指紋為指紋錄入的最大數量。
(1)場景1:單系統賬戶中心放置
錄入方式:兩個用戶使用同一個系統賬戶,每個用戶以標準姿勢(手指放入指紋儀中心,手指與指紋儀夾角為0°)錄入右手指紋,共計錄入10個指紋。
認證方式:每個人每個手指以標注姿勢進行10次認證,共計100次。
場景1進行了3輪測試,測試認證結果如表3所示

表3 單系統賬戶中心放置測試結果
結論:在手指標準放置情況下,BFS方案與libfprint方案通過率相差不到1%。由于共測試3輪,每輪100次,共計300次,因此1%的差距可以看作測試誤差,因此BFS方案和傳統libfprint方案在通過率上是一致的。
(2)場景2:單用戶多手指左右偏移放置
錄入方式:一個用戶使用一個系統賬戶,使用食指和中指錄入特征。在libfprint的方案中,每個手指左側邊沿錄入2次,右側邊沿錄入2次,中心錄入1次,共計10次。BFS方案中,每個手指在左側邊沿錄入10次,右側邊沿錄入10次,中心錄入2次,共計22次。
認證方式:每個手指以左側邊沿認證40次,右側邊沿認證40次,標準姿勢認證20次,共計100次。
場景2進行了3輪測試,測試認證結果如表4所示:

表4 單用戶多手指左右偏移放置測試結果
結論:在手指左右偏移的放置情況下,BFS方案和libfprint方案的通過率都下降了,其中libfprint方案通過率比BFS下降得更多。
(3)場景3:單用戶單手指旋轉放置
錄入方式:一個用戶使用一個系統賬戶,使用食指錄入特征。在libfprint方案中,手指分別以-90°、-60°、30°、0°、30°、60°、90°、180°共8個角度錄入1次指紋,并且以左側邊沿和右側邊沿錄入1次,共計10次。在BFS方案中,食指與libfprint方案一致的角度錄入,每個角度錄入3次,左右邊沿各錄入3次,共計30次。
認證方式:食指以-90°、-60°、30°、0°、30°、60°、90°、180°共8個角度認證10次,左右邊沿各認證10次,共計100次。
場景3進行了3輪測試,測試認證結果如表5所示。

表5 單用戶單手指旋轉放置測試結果
結論:在手指旋轉放置的情況下,BFS方案和libfprint方案的通過率繼續下降,但是BFS方案的通過率和libfprint方案已經拉開差距了,明顯BFS方案通過率更高。
(4)場景4:單用戶單手指隨機偏移放置
錄入方式:隨機生成手指左右偏移加旋轉角度的放置姿勢100個,libfprint方案錄入前10種姿勢,BFS方案錄入前30種姿勢。
認證方式:使用隨機生成的100種姿勢進行指紋認證。
場景4進行了3輪測試,測試認證結果如表6所示。

表6 單用戶單手指隨機偏移放置測試結果
結論:在手指隨機方式的情況下,libfprint方案的通過率已經掉到50%以下,相當于用戶每認證一次都會遇到一次失敗。BFS方案通過率反而比場景3上升了,這是因為指紋傳感器的大小是有限的,30種姿勢已經能夠覆蓋絕大部分的姿勢了,因此通過率反而比規定幾種姿勢的情況要好一些。
綜合以上場景測試,BFS方案在日常使用過程中,不用刻意要求用戶以特定姿勢錄入指紋和認證指紋,并且在更多的采樣下具有更高的通過率。
3.2.2功能點對比
功能點的對比將從支持的生物特征類型、開發及使用接口、存儲方式和服務及管理5個大維度,指紋識別、指靜脈識別、虹膜識別、聲紋識別、人臉識別、統一應用接口、統一驅動接口、統一存儲、特征加密、自定義狀態、狀態通知、設備熱插拔通知、特征統一錄入及認證、設備爭用檢測14個小維度進行。對比傳統的libfprint指紋識別方案和生物特征識別框架服務(BFS)方案,對比結果如表7所示。

表7 功能點對比
綜上可知,生物特征識別框架服務(BFS)與傳統的Linux的libfprint方案相比,具備對手指放置姿勢不敏感、通過率高、支持生物特征種類多、存儲統一且安全、認證服務統一等優點。
本文提出并實現了一種基于事件驅動和多種生物特征認證的生物特征識別框架服務,在支持生物特征種類、存儲的安全性、使用便捷性、指紋認證通過率等方面具有很大的優勢。