破譯《碟中諜》經典畫面,解密指紋驗證+刷臉!
科幻電影一直是人們津津樂道的話題,其中不乏一些經典場面,讓觀眾為之震驚讚嘆,例如《鋼鐵俠》中的懸浮虛擬觸控式螢幕、《碟中諜》中的指紋虹膜識別等。
如今,這些看似高大上的科技也走進了我們的日常生活,像指紋與面容識別,其應用已經極為普遍與廣泛。
當今社會對個人隱私的保護越來越重視,對App的安全性也提出了更高的要求,具備私密性與獨特性的指紋與面容識別,就成為了強有力的保障。
當用戶在解鎖裝置、支付、檔案訪問時,利用指紋或者面容認證,這在很大程度上減少了帳號盜取、資訊洩露的風險。
HMS的FIDO提供了相關功能:開放基於WebAuthn標準的FIDO2客戶端能力,提供本地指紋、面容認證開放能力,為應用提供安全可信的本地生物特徵認證和安全便捷的線上快速身份驗證能力。
其優勢在於通過系統完整性檢測和金鑰校驗機制保證結果安全可信,通用的無密碼使用者身份驗證方案,易與現有帳號基礎設施整合。
接下來,為大家說明如何整合指紋和麵容認證能力。
主要的接入步驟如下:
步驟1、2可以參考超連結中的指導進行完成,這裡不做贅述。
需要注意的是步驟2中提供了兩種本地生物認證的SDK:
Bioauthn-AndroidX:
1 |
implementation 'com.huawei.hms:fido-bioauthn-androidx:5.2.0.301' |
Bioauthn:
- Java 程式碼1 |
implementation 'com.huawei.hms:fido-bioauthn:5.2.0.301' |
這兩個SDK對外表現的能力略有不同。
主要表現在BioAuthn-AndroidX SDK的指紋認證能力提供統一介面,不需要應用自己繪製指紋認證提示介面;BioAuthn SDK的指紋認證能力不提供統一介面,需要應用自己繪製指紋認證提示介面。
可以參考官網FAQ中的說明:
這次我們主要介紹Bioauthn-AndroidX的整合,Demo可以在這裡下載
整合本地生物認證能力
注:
請保證手機沒有root過,不然無法使用指紋和麵容能力
測試前請先保證手機中已經有相應的指紋和麵容資訊,否則會報相關的錯誤碼。
可以在設定-生物識別和密碼-指紋/人臉識別中新增相關指紋和麵容
指紋認證
使用指紋認證分為兩步:
1、初始化BioAuthnPrompt物件,程式碼如下:
BioAuthnPromptbioAuthnPrompt=newBioAuthnPrompt(this,ContextCompat.getMainExecutor(this),newBioAuthnCallback(){ @Override publicvoidonAuthError(interrMsgId,CharSequenceerrString){ showResult("指紋認證報錯.errorCode="+errMsgId+",errorMessage="+errString); } @Override publicvoidonAuthSucceeded(BioAuthnResultresult){ showResult("指紋認證成功.CryptoObject="+result.getCryptoObject()); } @Override publicvoidonAuthFailed(){ showResult("指紋認證失敗."); } });
2、建立提示資訊,並進行認證。
//自定義設定資訊 BioAuthnPrompt.PromptInfo.Builderbuilder= newBioAuthnPrompt.PromptInfo.Builder().setTitle("主標題") .setSubtitle("副標題") .setDescription("內容描述"); //允許使用其他認證方式 builder.setDeviceCredentialAllowed(true); BioAuthnPrompt.PromptInfoinfo=builder.build(); //進行認證 bioAuthnPrompt.auth(info);
配置完成後就可以進行指紋認證了,認證頁面如下:
面容認證
面容認證的限制條件比較多,具體請參考FAQ:
1、檢查是否有相機許可權(EMUI10.1及以後版本不需要相機許可權)
intpermissionCheck=ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CAMERA); if(permissionCheck!=PackageManager.PERMISSION_GRANTED){ showResult("請先申請相機許可權"); ActivityCompat.requestPermissions(MainActivity.this,newString[]{Manifest.permission.CAMERA},1); return; }
2、檢查當前裝置是否支援人臉識別
FaceManagerfaceManager=newFaceManager(this); interrorCode=faceManager.canAuth(); if(errorCode!=0){ resultTextView.setText(""); showResult("不支援人臉識別.errorCode="+errorCode); return; }
3、進行人臉認證
intflags=0; Handlerhandler=null; CryptoObjectcrypto=null; faceManager.auth(crypto,cancellationSignal,flags,newBioAuthnCallback(){ @Override publicvoidonAuthError(interrMsgId,CharSequenceerrString){ showResult("認證報錯.errorCode="+errMsgId+",errorMessage="+errString +(errMsgId==1012?"沒有相機許可權.":"")); } @Override publicvoidonAuthHelp(inthelpMsgId,CharSequencehelpString){ showResult("返回識別過程中提示資訊.helpMsgId="+helpMsgId+",helpString="+helpString+"\n"); } @Override publicvoidonAuthSucceeded(BioAuthnResultresult){ showResult("認證成功.CryptoObject="+result.getCryptoObject()); } @Override publicvoidonAuthFailed(){ showResult("認證失敗."); } },handler);
這樣人臉識別的程式碼就完成了,呼叫後就會進行人臉認證。
需要注意的是人臉認證沒有預設的UI頁面,需要我們自己去設計配置。
使用場景
指紋認證
一般來說指紋認證是用在支付場景的,使用者付款前可以使用指紋認證來進行安全檢測。
指紋認證也可以用在檔案保護App裡,只有指紋認證通過才可以檢視相關檔案。
面容識別
面容識別也可以在支付場景和檔案保護APP中使用,這個不再贅述
在檔案保護APP方面,面容識別的效果會比指紋表現的更出色。
因為檔案保護App有一個通病,那就是“此地無銀三百兩”,擺明了告訴別人你這個檔案很重要或很敏感。
所以其他人只要搞定了你的指紋(雖然也比較困難),那就暢通無阻了。
那麼檔案保護App除了可以在明面上展示指紋識別外,還可以“悄悄地”再做一層面容識別(面容識別不需要設計UI介面),只有指紋識別和麵容識別都過了,才展示正確的檔案,否則可以展示假檔案。
這樣做的話就可以更好的保護使用者的隱私。
具體的人臉識別的程式碼實現可以是下面這樣的:
faceManager.auth(crypto,cancellationSignal,flags,newBioAuthnCallback(){ @Override publicvoidonAuthError(interrMsgId,CharSequenceerrString){ if(isFingerprintSuccess){//指紋認證成功但面容識別失敗 //展示假檔案 showFakeFile(); } } @Override publicvoidonAuthHelp(inthelpMsgId,CharSequencehelpString){ } @Override publicvoidonAuthSucceeded(BioAuthnResultresult){ if(isFingerprintSuccess){//指紋認證成功 //展示真檔案 showRealFile(); }else{//指紋認證失敗 //展示假檔案 showFakeFile(); } } @Override publicvoidonAuthFailed(){ if(isFingerprintSuccess){//指紋認證成功但面容識別失敗 //展示假檔案 showFakeFile(); } } },handler);
>>訪問華為FIDO官網,獲取FIDO開發文件
原文連結:developer.huawei.com/consumer/cn…
原作者:胡椒