安全從業者,非阿里
支付寶的驗證,其實是個認證問題,它自創了一類認證因子。
認證問題是什麼?
是你如何向我證明你是你。
想象一個外貌口音上你完全沒見過的人,告訴你他代你一個朋友取走存放在你這的錢。
OK,你如何相信他?
最簡單的確認辦法就是讓他告訴你一個你和你朋友才知道的「秘密」。
這個確認秘密的過程就是認證。
無論是密碼,或者指紋,或者手機,或者鑰匙,都是用來完成認證的「秘密」。不同的秘密也叫做不同的「認證因子」。
確定何時使用何種認證因子,是安全設計中要解決的。
想象一下,你顯然不能因為陌生人提了你朋友的名字,就把朋友的錢給他。因為名字這種認證因子 ,並不足夠秘密,在涉及資金時,我們説「認證強度不夠」。
當然,如果只是取一塊錢,或者向你問路,提名字這種認證方式還是夠的。這是「根據不同場景確定不同強度認證」。
我們回過頭來看阿里在修改密碼這個場景的認證。這個問題火了,是大家在質疑找回密碼場景下,這種認證因子的認證強度不夠。
後來又出現澄清,説檢測了網絡環境,這是「補充認證」 ,或者叫「多因子認證」。
OK,這涉及到如何評估不同場景下需要的認證因子及其強度。
我們做安全,知道危害性取決於:威脅、價值、脆弱性 (或者按其他模型,也是一個意思)。
那麼我們怎麼評估不同場景下認證因子的安全性呢。
一方面,是考慮場景需要的認證強度,做這個操作,我需要多確定對方的身份? 對應於「價值」。
另一方面,考慮認證因子的秘密程度,這個秘密其他人可能知道或猜到嗎?對應於「脆弱性」。
再有一個方面,是根據場景考慮認證因子的特點,精液指紋頭髮這樣的東西不是隨便人都能獲得的,只有近距離接觸的人才能獲得的吧? 對應於「威脅」。
那我們回來看支付寶找回密碼的這個認證。
找回密碼這個場景下,涉及資金,價值大,認證強度的要求應當是高的。
那麼兩次九選一,1/81 顯然是脆弱的。
但是它另一個認證因子,網絡環境,有效地降低了威脅。也就是説面對的不再是網絡上無數的潛在攻擊者,而是共處一室可追查的幾個人。
那麼幾個人中的 1/81,認證強度確實不見得比無數人 1/1000000 猜短信驗證碼低。
所以阿里用這種認證因子替代了短信驗證碼,是有一定的合理性的。
而不合理的地方在哪呢,是沒有充分考慮這種認證因子的特點,導致可被有心人針對性攻擊,造成「認證擊穿」。
所以阿里的產品經理也確實需要提高一下自己的安全設計水平。