如何設計APP的指紋識別功能

Coeus發表於2018-05-10

指紋識別,自打iPhone5s出來後就普遍在使用的功能,大家可能都已經習以為常,但是當我真正要上這個功能的時候,反而遇到了一堆問題,裡面隱藏的邏輯最終用了兩個版本才完善。

首先說明下這個需求的背景,公司內部APP增加了檢視薪資的功能,但是考慮到隱私安全,就新增了隱私密碼和指紋密碼的功能。

初期的需求如下:

1.隱私密碼為6-10位大小寫字母、數字、特殊符號的任意組合,不要求如何組合;
2.隱私密碼不可與APP登入密碼相同;(後來由於無介面提供,取消了校驗) ;
3.設定指紋密碼前必須設定隱私密碼;
4.開啟指紋密碼先輸入隱私密碼,再驗證指紋;
5.關閉指紋密碼不需要驗證;

上面羅列的只是幾個要點,需求肯定不是這麼簡單幾句話寫完的,但是上述邏輯無法覆蓋以下場景:

場景一:
員工手機沒有錄入指紋的時候怎麼處理?

因此需求中增加了:

6.開啟指紋先校驗手機是否已經設定了指紋;

至此就完成了指紋密碼的正向流程,是不是感覺可以交給研發了?然而不經意聽到互動在旁邊說到一句:手機借給別人……

這裡備註下,我們公司APP有手機繫結的功能,發現賬號登入裝置變更後會要求輸入手機驗證碼換綁裝置。

所以就出現了下面的場景:

場景二:
員工X有A手機,員工Y有B手機;
X在A手機完成了賬號登入和指紋密碼開啟,這時Y借用A手機登入了自己賬號,那麼Y的賬號指紋密碼狀態是什麼?

之所以會出現這樣問題,是因為指紋是否開啟的資訊是留存在手機本地的,因此剛剛X在A手機開啟指紋後,Y再用A手機登入,會沿用上個賬號的指紋開啟狀態,這顯然是不合理的,因此需求中增加了:

7.指紋是否開啟的資訊,留存本地時需要關聯工號儲存;

總算交付研發了,我也投到下個需求中去了,然而第二天互動和我說,她和研發商量了下,把開啟指紋密碼時的校驗隱私密碼去除了,我問為什麼,她說因為使用者的手機,他要在自己手機開啟指紋,既然已經驗證指紋正確了,說明他就是手機主人,那為什麼還要驗證隱私密碼?於是我和她描述了下面的場景:

場景三:
員工X有A手機,員工Y有B手機;
X用了A手機登入賬號,隨後換用B手機登入賬號,但是後來忘記退出,且沒有在自己裝置回登;
那麼Y拿回B手機後,如果沒有隱私密碼校驗,將可以直接可以開啟指紋密碼,檢視隱私資訊;

這時互動表示無奈,並和研發說了撤銷剛剛的修改。其實如果不用隱私密碼二次校驗,還會存在個漏洞:

場景四:
員工X有A手機,員工Y有B手機;
X和Y是同事,經常藉手機,X因此知道B手機的鎖屏密碼,那麼X就可能幹出下面的事;
借到B手機,由於有鎖屏密碼,因此可以新增自己的指紋,然後直接開啟客戶端的指紋密碼,檢視隱私資訊;

由於這時候已經提測,所以第一期上線就沒有將隱私密碼二次校驗加回去,畢竟是內部APP,釋出比較方便,然而邏輯的推演又出來了:

場景五:
員工X有A手機,員工Y有B手機;
X和Y是同事,經常藉手機,X因此知道B手機的鎖屏密碼,那麼X又幹了一件事;
Y已經在B手機開啟了指紋密碼,X借到B手機後,通過鎖屏密碼在B手機中新增了自己的指紋,於是又能嘿嘿嘿……

這種邏輯是在轉測後想起來的,就計劃放在下期完善,當天晚上測試也提說有這麼個漏洞,我說已經放到二期了,所以說靠譜的測試還是很重要的,那麼這種情況怎麼解決?

這裡分開討論,iOS端的應用一般是檢測指紋管理是否變更,包括指紋的增刪,一旦指紋管理有變更,當使用者開啟應用時,即使開啟了指紋解鎖,也需要先輸入隱私密碼;安卓可能是開放程度比較好,像“掌上生活”APP是直接校驗當時開啟指紋解鎖的指紋ID,也就是說你用中指開啟應用的指紋解鎖,是無法用食指解鎖的,這樣安全性很高,但是成本有點高;

為此我們也就加上需求:

8.當使用者使用應用內的指紋密碼時,若檢測到手機指紋管理變更,則直接要求輸入隱私密碼,校驗正確後直接進入功能頁,且二次使用不受影響;P.S. 安卓端還需要開會時溝通下是不是也能檢測到指紋管理變更

正當我被自己的邏輯折服時,研發又來打臉了,哎喲,好疼……

場景六:
員工X有A手機,員工Y有B手機;
X在A、B手機都登入過自己賬號,且都開啟了指紋密碼;
某天Y借了X的賬號在B手機登入,抑或是同事關係導致Y知道X的登入密碼; 於是乎Y在B手機上登入了X的賬號,由於之前X的賬號在B手機開啟過指紋密碼,那麼這一次Y可以直接用指紋在B手機解鎖X的隱私資訊;

敷完藥膏,臉總算不疼了,於是就和研發討論如何保證同一賬號的指紋開啟只能保留在一臺裝置上,是的,我們又加需求了:

9.當使用者登入應用時,若APP端請求簡訊驗證碼,則本地清空該賬號的指紋開啟資訊;

這是由於一旦應用向服務端校驗登入資訊且正確時,服務端會校驗該賬號上次登入裝置是否一致,若不一致則要求應用端請求簡訊驗證碼,因此一旦應用端請求驗證碼,就說明賬號登入裝置有變,也就能保證指紋開啟資訊只會留存一臺裝置了。

碼完收工,好久不接觸這種安全性功能設計,思維邏輯愈發有些線性考慮,與諸君共勉。

相關文章