指紋解鎖原理:
蘋(píng)果在文件中對(duì)iPhone 5S配備的Touch ID指紋識(shí)別系統(tǒng)的功能與工作原理進(jìn)行了詳細(xì)說(shuō)明。文件對(duì)iPhone 5S的A7處理器中““Secure Enclave””協(xié)處理器進(jìn)行了說(shuō)明偶洋,該協(xié)處理器能夠安全地將用戶儲(chǔ)存的指紋信息與Touch ID當(dāng)前所識(shí)別到的指紋進(jìn)行信息對(duì)比拙泽。而蘋(píng)果早在iPhone 5S發(fā)布時(shí)就公布了Touch ID的工作原理诡曙。但此次所獲悉的文件說(shuō)明得更為詳細(xì)寸士。
根據(jù)蘋(píng)果的解釋,一個(gè)單一的注冊(cè)指紋與別人指紋出現(xiàn)隨機(jī)匹配的概率為五萬(wàn)分之一砸王。
蘋(píng)果聲稱““Secure Enclave””模塊系統(tǒng)能夠安全地管理并識(shí)別用戶的指紋陨享,并將用戶的指紋信息獨(dú)立地保存在別的系統(tǒng)中葱淳,同時(shí)通過(guò)加密內(nèi)存和一個(gè)硬件隨機(jī)數(shù)字密碼發(fā)生器進(jìn)行管理。
每個(gè)“Secure Enclave”是單獨(dú)設(shè)置的抛姑,不能訪問(wèn)系統(tǒng)其他部分的赞厕,擁有自己的獨(dú)立的UID(唯一的ID),連蘋(píng)果也不知道這些UID定硝。當(dāng)設(shè)備啟動(dòng)時(shí)皿桑,Touch ID會(huì)臨時(shí)創(chuàng)建一個(gè)秘鑰,與“Secure Enclave”的UID配合蔬啡,對(duì)設(shè)備的內(nèi)存空間進(jìn)行加密诲侮。
而在蘋(píng)果發(fā)布的文件中,蘋(píng)果對(duì)A7處理器進(jìn)行指紋識(shí)別授權(quán)的描述是:A7和Touch ID之間通過(guò)一個(gè)串行外設(shè)接口總線進(jìn)行通信箱蟆。A7處理器將數(shù)據(jù)發(fā)到“Secure Enclave”沟绪,但并不對(duì)數(shù)據(jù)內(nèi)容進(jìn)行讀取。加密和身份驗(yàn)證都是使用Touch ID和“Secure Enclave”之間的共享密鑰空猜。通信密鑰交換使用雙方提供的一個(gè)隨機(jī)AES密鑰绽慈,并隨機(jī)建立會(huì)話密鑰和使用AES-CCM傳輸加密。
由于大部分的Touch ID用戶可能發(fā)現(xiàn)抄肖,在某些情況下需要使用密碼來(lái)代替Touch ID久信。而這份文件指出了什么情況下Touch ID不能使用和要求必須輸入密碼:
文件指出在以下情況下密碼可以代替Touch ID:
-iPhone 5s剛剛開(kāi)啟或重新啟動(dòng)時(shí);
-iPhone 5s沒(méi)有解鎖超過(guò)48小時(shí)漓摩;
-經(jīng)過(guò)5次不成功指紋匹配時(shí);
-當(dāng)進(jìn)行設(shè)置或使用新的手指紋使用Touch ID時(shí)入客;
-iPhone 5s已經(jīng)接收到遠(yuǎn)程鎖定命令時(shí)管毙。
指紋解鎖代碼實(shí)現(xiàn):
在iPhone5s的時(shí)候,蘋(píng)果推出了指紋解鎖桌硫。但是在ios8.0的時(shí)候蘋(píng)果才推出相關(guān)的接口夭咬。
所以我們一開(kāi)始需要判斷當(dāng)前系統(tǒng)版本
低于8.0的系統(tǒng)版本不支持指紋解鎖
當(dāng)系統(tǒng)版本大于8.0時(shí),引入并導(dǎo)入頭文件铆隘,書(shū)寫(xiě)代碼卓舵!
以下是經(jīng)常出現(xiàn)的幾個(gè)錯(cuò)誤,大家共勉膀钠!
例如掏湾,在iphone5上運(yùn)行結(jié)果:
Error Domain=com.apple.LocalAuthentication Code=-6 "Biometry is not available on this device." UserInfo=0x15ec5a00 {NSLocalizedDescription=Biometry is not available on this device.
例如裹虫,在模擬器上運(yùn)行結(jié)果:
Error Domain=com.apple.LocalAuthentication Code=-1000 "Simulator is not supported." UserInfo=0x7ffe604b0790 {NSLocalizedDescription=Simulator is not supported.
例如,在有TouchID 的功能下融击,沒(méi)有設(shè)置TouchID的運(yùn)行結(jié)果:
Error Domain=com.apple.LocalAuthentication Code=-7 "No fingers are enrolled with Touch ID." UserInfo=0x170075fc0 {NSLocalizedDescription=No fingers are enrolled with Touch ID.
例如:連續(xù)三次指紋識(shí)別錯(cuò)誤:
Error Domain=com.apple.LocalAuthentication Code=-1 "Aplication retry limit exceeded." UserInfo=0x1740797c0 {NSLocalizedDescription=Aplication retry limit exceeded.}
例如:用戶在Touch ID對(duì)話框中點(diǎn)擊了取消按鈕:
Error Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user." UserInfo=0x17006c780 {NSLocalizedDescription=Canceled by user.
例如:用戶在Touch ID對(duì)話框中點(diǎn)擊輸入密碼按鈕:
Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected." UserInfo=0x17407e040 {NSLocalizedDescription=Fallback authentication mechanism selected.
例如:按下電源鍵:
Error Domain=com.apple.LocalAuthentication Code=-4 "UI canceled by system." UserInfo=0x170065900 {NSLocalizedDescription=UI canceled by system.}
例如:Touch ID功能被鎖定筑公,下一次需要輸入系統(tǒng)密碼時(shí)的運(yùn)行結(jié)果:
Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.
七. 指紋識(shí)別
簡(jiǎn)單介紹
指紋識(shí)別功能是 iphone 5S之后推出的.SDK是 iOS 8.0 推出!
推出指紋識(shí)別功能的目的,是為了簡(jiǎn)化移動(dòng)支付環(huán)節(jié),占領(lǐng)移動(dòng)支付市場(chǎng).
使用步驟
導(dǎo)入框架
#import
獲得當(dāng)前系統(tǒng)版本號(hào)
floatversion = [UIDevicecurrentDevice].systemVersion.floatValue;if(version <8.0)// 判斷當(dāng)前系統(tǒng)版本 {NSLog(@"系統(tǒng)版本太低,請(qǐng)升級(jí)至最新系統(tǒng)");return;? ? }
實(shí)例化指紋識(shí)別對(duì)象,判斷當(dāng)前設(shè)備是否支持指紋識(shí)別功能(是否帶有TouchID)
// 1> 實(shí)例化指紋識(shí)別對(duì)象LAContext *laCtx = [[LAContext alloc] init];// 2> 判斷當(dāng)前設(shè)備是否支持指紋識(shí)別功能.if(![laCtx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) {// 如果設(shè)備不支持指紋識(shí)別功能NSLog(@"該設(shè)備不支持指紋識(shí)別功能");return;? ? };
指紋登陸(默認(rèn)是異步方法)
[laCtx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指紋登陸"reply:^(BOOLsuccess,NSError*error) {// 如果成功,表示指紋輸入正確.if(success) {NSLog(@"指紋識(shí)別成功!");? ? ? ? }else{NSLog(@"指紋識(shí)別錯(cuò)誤,請(qǐng)?jiān)俅螄L試");? ? ? ? }? ? }];