1 等保2.0關于身份鑒定的規定
等保2.0标準在2019年5月正式發布,将于2019年12月開(kāi)始實施。等保2.0标準中(zhōng)對身份鑒别做了詳細要求,下(xià)面表格中(zhōng)列出了等保2.0對身份鑒别的要求,黑色字體(tǐ)表示是針對上一(yī)安全級别增強的要求。
在等級保護體(tǐ)系中(zhōng),級别越高,對安全性要求越高。
等保2.0中(zhōng)主要在安全物(wù)理環境和安全計算環境中(zhōng)提到身份鑒别要求。安全物(wù)理環境中(zhōng)的身份鑒别主要指真實的人進入機房時要進行的身份認證,安全計算環境中(zhōng)的身份鑒别主要指用戶登錄計算機、其他計算設備或業務系統時要進行的身份認證。在等保3級中(zhōng),要求必須采用雙因子認證技術;在等保4級中(zhōng),要求安全通信網絡中(zhōng)通信前基于密碼技術對通信的雙方進行驗證或認證,計算機或進程之間通訊需要進行身份認證。
身份鑒别技術是我(wǒ)(wǒ)們大(dà)多數人最熟悉的安全技術,我(wǒ)(wǒ)們每天登錄電(diàn)腦、手機時都要進行身份鑒别,然後才能進行各種操作。身份鑒别的目的是确認用戶身份,是最基本的安全技術也是最重要的安全技術,因爲其他安全技術(比如權限控制、安全審計等)都要依賴用戶身份信息。如果身份信息不可信,安全就成了無本之木、無源之水,失去(qù)了根基。
另外(wài),在等保2.0中(zhōng)提到身份标識必須具有唯一(yī)性,這也是所有身份管理系統的基本要求,本文重點講解身份鑒别技術,關于身份标識唯一(yī)性、會話(huà)超時處理機制等不做詳細探讨。
2 身份鑒别理論
身份鑒别的核心理論都是通過3個問題來識别确認身份:你知(zhī)道什麽,你擁有什麽,你的唯一(yī)特征是什麽。
你知(zhī)道什麽,就是根據你知(zhī)道的信息來證明你的身份。這是一(yī)種曆史悠久的身份鑒别技術,大(dà)家耳熟能詳的“天王蓋地虎,寶塔鎮河妖”,就是依靠你知(zhī)道的暗号來确認你的身份。當然,現在這句話(huà)已經衆所周知(zhī),也就失去(qù)了身份認證的價值。當年我(wǒ)(wǒ)們地下(xià)黨的很多活動就是靠這種方式确認自己人的身份,從而展開(kāi)活動的。
你知(zhī)道什麽,核心在于你知(zhī)道的信息一(yī)定是保密的,别人不知(zhī)道或難以猜測的。
計算機系統中(zhōng),基于這個理論實現的最常見的身份鑒别技術是基于用戶名密碼的身份認證,這也是現在絕大(dà)部分(fēn)的系統使用的身份鑒别技術。
你擁有什麽,就是根據你擁有的東西來證明你的身份。這也是一(yī)種曆史悠久的身份鑒别技術,我(wǒ)(wǒ)們各種戲劇故事裏經常都有攜帶信物(wù)找人的事情,像寶劍、血書(shū)或發簪等都是常用的信物(wù),這些信物(wù)就用來證實對方的身份。當然有些信物(wù)因爲沒有明确的身份标識,導緻對方死不認賬的故事也有很多。曆史上調度軍隊的虎符就是典型的信物(wù),因爲其設計嚴謹,是通過“你擁有什麽”驗證對方身份的經典案例。
你擁有什麽,核心在于你擁有的東西一(yī)定是有特征的,可以被對方辨識并認可的東西。
計算機系統中(zhōng),基于這個理論實現的最常見的身份鑒别技術是基于U盾、IC卡的身份認證,這是現在大(dà)部分(fēn)銀行系統使用的身份鑒别技術之一(yī)。
你的唯一(yī)特征是什麽,就是根據你的唯一(yī)特征來證明你的身份。同樣,這種技術也有悠久的曆史,因爲早期科技不發達,曆史上大(dà)家認爲的唯一(yī)特征可能實際并不是唯一(yī)特征。我(wǒ)(wǒ)們曆史上常見的“滴血認親”就是基于該理論進行身份鑒别的技術,現在科技已經證實“滴血認親”其實誤差非常大(dà),不足以确認一(yī)個人的身份。
你的特征是什麽,核心在于你具有唯一(yī)的生(shēng)物(wù)特征,這個生(shēng)物(wù)特征可以準确對應到你這個人。
計算機系統中(zhōng),基于這個理論實現的最常見的身份鑒别技術是基于指紋識别、人臉識别的身份認證,這是大(dà)部分(fēn)智能手機和很多門禁系統使用的身份鑒别技術。
3 常用身份鑒别技術
這是靠“你知(zhī)道什麽”來驗證身份的鑒别技術。
依靠密碼來進行身份鑒别是最基礎的鑒别技術,也是适用性最廣的技術。現在雖然有了其他多種身份鑒别技術,在多因子認證方案裏,基于密碼鑒别身份也是其中(zhōng)必選的基本技術。等保2.0三級系統的身份認證要求:“應采用口令、密碼技術、生(shēng)物(wù)技術等兩種或兩種以上組合的鑒别技術對用戶進行身份鑒别,且其中(zhōng)一(yī)種鑒别技術至少應使用密碼技術來實現”。
密碼的鑒别的突出優點是簡單易懂,易于實施。
密碼安全的問題在于它既如此簡單,又(yòu)困難重重。
密碼鑒别技術面臨的主要安全問題是暴力破解。暴力破解是指攻擊者通過計算機系統組合所有可能性(例如登錄時用到的賬戶名、密碼),嘗試破解用戶的賬戶名、密碼等敏感信息。暴力破解一(yī)般會使用密碼字典表,用戶的密碼複雜(zá)度如果不是足夠強,暴力破解成功的概率非常高。
暴力破解分(fēn)爲2種:在線破解和離(lí)線破解。在線破解指基于客戶端接口使用不同的而秘密嘗試登錄認證,離(lí)線破解指盜取了數據庫的賬号密碼信息,根據這些信息驗證破解密碼。離(lí)線破解不受原有系統的限制,破解成功率極高。
密碼服務公司SplashData分(fēn)析了2018年在互聯網上洩漏的500多萬個用戶密碼,最後統計出TOP 25的弱密碼如下(xià)圖:
這些密碼看起來實在是太弱了,但是複雜(zá)的密碼帶來的問題是記不住密碼,經常遺忘密碼、重置密碼也是很讓人惱火(huǒ)的一(yī)件事。現在每個人都面對很多系統密碼,如果每個密碼都很複雜(zá),真會讓人崩潰,有些人索性就把密碼直接記在本上或手機上,這樣反而帶來了更大(dà)的安全隐患。
爲了保證密碼鑒别技術的安全性,增大(dà)抵禦暴力破解的能力,在設計時需要考慮下(xià)面的一(yī)些要求:
1. 增強密碼複雜(zá)度。建議密碼長度最小(xiǎo)8位,使用大(dà)小(xiǎo)寫字母、特殊符号、數字組合,能極大(dà)的增大(dà)密碼的破解難度。
2. 附加驗證碼校驗。校驗碼一(yī)般是以圖形顯示的随機字符串,人眼可以識别,但是機器很難辨認,使用校驗碼可以避免惡意的在線破解密碼。現在有些網站的校驗碼已經越做越複雜(zá),不隻是随機字符串,還可能是一(yī)個數學計算公式,或者圖片内容識别等。這些基本原理都是一(yī)緻的,即人可以識别出校驗碼,機器很難識别。
3. 多次登錄失敗鎖死賬号。多次登錄失敗,就很有可能是有人或機器在嘗試破解密碼惡意登錄,這時需要有鎖定賬号的功能,即在一(yī)段時間内不允許再次登錄,這可以大(dà)幅增加密碼破解的時間。密碼暴力破解技術主要依靠計算機的強大(dà)計算能力多次嘗試驗證密碼,如果賬号鎖死不允許嘗試登錄,該技術就失去(qù)了價值。這個方法是一(yī)把雙刃劍,還要注意有人惡意鎖死别人賬号的情況,所以有時候要結合IP地址和賬号進行細粒度的鎖死控制。
4. 上述方法針對在線破解有效,針對離(lí)線破解無效。要保證密碼存儲和驗證的安全性,還必須做到:密碼采用單向不可逆的哈希算法計算後存儲;在對密碼進行哈希計算的時候必須進行加鹽處理,鹽值必須随機生(shēng)成;密碼哈希的鹽值必須存放(fàng)在獨立的數據庫,避免和密碼一(yī)起被“脫庫”。
這是靠“你擁有什麽”來驗證身份的鑒别技術。
動态口令牌(OTP,One time password)是客戶手持用來生(shēng)成動态密碼的終端,主要基于時間同步方式,一(yī)般每60秒變換一(yī)次動态口令,口令一(yī)次有效,它産生(shēng)6位動态數字進行一(yī)次一(yī)密的方式認證。
每個動态口令牌都有一(yī)個唯一(yī)的密鑰,該密鑰同時存放(fàng)在服務器端,每次認證時動态密碼卡與服務器分(fēn)别根據同樣的密鑰,同樣的随機參數(時間、事件)和同樣的算法計算了認證的動态密碼,從而确保動态口令的一(yī)緻性。因每次認證時的随機參數不同,所以每次産生(shēng)的動态口令也不同。由于每次計算時參數的随機性保證了每次動态口令的不可預測性,從而保證了系統認證的安全性。
服務器驗證動态口令時,跟這個動态口令牌沒有任何物(wù)理聯系,服務器和動态口令牌使用同樣的算法,基于通用的原始秘鑰和其他參數,各算各的,同一(yī)時間算出的數字都是一(yī)樣的。計算過程中(zhōng)時間是一(yī)個很重要的參數,2者的時間必須要保持一(yī)緻,否則就會因時間不同步導緻動态口令失效。
對于時間不同步的令牌,可以通過增大(dà)偏移量的技術(前後10分(fēn)鍾)來進行兼容适配,确保其能夠繼續使用,降低對應用的影響。但對于時間誤差較大(dà)(超過20分(fēn)鍾)的時間同步令牌,就無法繼續使用了,必須返廠或送回服務器端另行處理。
由于動态口令牌使用非常便捷,被廣泛應用在VPN、網上銀行、電(diàn)子政務、電(diàn)子商(shāng)務等領域。随着智能手機的普及,現在有些應用開(kāi)始使用智能手機代替動态口令牌生(shēng)成動态口令,這能顯著降低成本,增強易用性,以後也會得到越來越廣泛的應用。現在應用比較廣泛比較知(zhī)名的手機動态口令服務是Google提供的Google Authenticator服務,我(wǒ)(wǒ)們在後面章節會單獨講解。
這是靠“你擁有什麽”來驗證身份的鑒别技術。
短信驗證碼會把密碼以手機短信形式發送到用戶的手機上,隻有擁有這個手機的用戶才能接受到信息,進行登錄驗證。
因爲手機的流行,現在基本人手一(yī)機,短信驗證碼是現在互聯網應用中(zhōng)最常見的鑒别技術,短信驗證碼的好處是一(yī)次一(yī)密,安全可靠,又(yòu)不需要記憶密碼,極大(dà)的方便了使用者。
短信驗證碼的主要問題:
1. 系統需要接入電(diàn)信網絡,一(yī)般通過電(diàn)信運營商(shāng)的短信網關接口。大(dà)多數工(gōng)控系統因爲無法接入互聯網,無法使用短信驗證碼的鑒别技術。
2. 短信驗證需要暴露用戶的手機号碼,這就存在洩漏用戶隐私的風險。
3. 無法防禦新型僞基站技術。采用“GSM劫持+短信嗅探”技術,可實時獲取用戶手機短信内容,進而利用各大(dà)知(zhī)名銀行、網站、移動支付APP存在的技術漏洞和缺陷,實現信息竊取、資(zī)金盜刷和網絡詐騙等犯罪。
注意,此類僞基站方法主要利用了2G網絡GSM網絡的既有漏洞,“GSM劫持+短信嗅探”從技術上還沒有辦法防範,一(yī)旦中(zhōng)招,短信信息就會洩露無餘。另外(wài),犯罪者大(dà)多選擇淩晨作案,且無需直接與受害者接觸,因此大(dà)部分(fēn)受害者一(yī)覺醒來隻有手機裏莫名其妙多出來的驗證碼:
以後随着2G網絡逐漸關閉,4G、5G逐漸普及,如果手機開(kāi)啓了VoLTE載波聚合,就可以避免GSM劫持的問題。
但是,另一(yī)個問題接踵而來,那就是智能APP如果被惡意程序控制,也可能拿到短信驗證碼,現在很多APP都要求手機短信的讀取功能,所以短信驗證碼用于身份鑒别仍然是有不小(xiǎo)的安全風險。
這是靠“你擁有什麽”來驗證身份的鑒别技術。
IC卡也稱智能卡,将一(yī)個微電(diàn)子芯片嵌入符合ISO
7816标準的卡基中(zhōng),做成卡片形式。IC卡與讀寫器之間的通訊方式可以是接觸式,也可以是非接觸式。目前IC卡可以認爲是不可複制的硬件,通過IC卡可以來确認用戶身份。現在我(wǒ)(wǒ)們普遍使用的二代居民身份證就是一(yī)種IC卡。
IC卡内置的芯片中(zhōng)存有與用戶身份相關的數據,智能卡由專門的廠商(shāng)通過專門的設備生(shēng)産,是不可複制的硬件。智能卡由合法用戶随身攜帶,登錄時必須使用專用讀卡器讀取智能卡的信息,驗證用戶的身份。
IC卡一(yī)般和密碼一(yī)起形成雙因子認證方案。IC卡在使用時需要配合專用的讀卡器,所以推廣起來有些麻煩,無論從易用性還是成本考慮,都不如基于USBKey的雙因子認證方案。
IC卡認證技術目前在門禁系統中(zhōng)應用較多。
這是靠“你擁有什麽”來驗證身份的鑒别技術。
USB Key是一(yī)種USB接口的硬件設備。它内置智能芯片,并有一(yī)定的存儲空間,可以存儲用戶的數字證書(shū)信息,利用USB Key内置的算法實現對用戶身份的認證。
USB Key是國内很多銀行采用的客戶端認證方案,用戶的私鑰在高度安全的USB Key内産生(shēng),并且終身不可導出到USB Key外(wài)部,交易簽名也在USB Key内進行,所以安全強度非常高。
用戶私鑰保存在密碼鎖中(zhōng),理論上使用任何方式都無法讀取,因此保證了用戶認證信息的安全性。USB Key産品最早是由加密鎖廠商(shāng)提出來的,原先的USB加密鎖主要用于防止軟件破解和複制,保護軟件不被盜版。
現在幾乎所有的計算機都支持USB接口,所以USB Key和密碼結合的雙因子認證方案是現在主流的身份鑒别方案。
這是靠“你的唯一(yī)特征是什麽”來驗證身份的鑒别技術。
指紋是指手指末端正面皮膚上的凸凹不平的紋路,這些紋路包含大(dà)量的信息。這些皮膚的紋路在圖案、斷點和交點上各不相同的,這些信息就是“指紋特征”,指紋特征具有唯一(yī)性和永久性,通過比較指紋特征,就可以驗證一(yī)個人的真實身份。
指紋認證主要用于手機和某些筆記本電(diàn)腦,在門禁系統中(zhōng)也得到廣泛應用。在大(dà)多數業務系統中(zhōng)應用較少,主要原因如下(xià):
1. 指紋識别需要專用的硬件,成本較高,不方便部署。
2. 指紋認證技術和其他生(shēng)物(wù)認證技術比如人臉識别、虹膜認證一(yī)樣,面臨的主要問題是個人隐私問題。這些生(shēng)物(wù)特征是比手機号碼更重要的隐私内容,一(yī)旦洩露出去(qù)後果很嚴重。
3. 指紋很容易被盜取、僞造,指紋識别技術目前沒有足夠的能力識别僞造的指紋。
4. 指紋不可改變,一(yī)旦指紋被盜取僞造,隻能作廢指紋識别功能,沒法修改指紋。所以指紋識别技術在安全要求較高的場景并不是很合适的身份鑒别技術。
除了指紋認證,現在人臉識别技術也比較成熟,也是在手機、門禁系統中(zhōng)應用較多。人臉識别系統和指紋識别系統都不大(dà)容易在業務系統中(zhōng)推廣,面臨的問題也是類似的,不再詳述。
4 身份鑒别技術對比分(fēn)析
幾種常見的身份鑒别技術的對比分(fēn)析如下(xià)表:
在實際應用中(zhōng),一(yī)般采取密碼和其他鑒别技術一(yī)起組成雙因子認證機制,達到安全性和經濟性、易用性的平衡。
在雙因子認證方案中(zhōng),動态口令牌和USB Key兩種方案易于部署,安全程度高,和密碼機制配合起來,是目前應用最廣的雙因子認證方案。
5 業界成熟的身份鑒别方案
RADIUS,全稱是Remote
Authentication Dial In User Service,最早是Livingston公司研發的遠程用戶撥号認證系統,協議框架在RFC2865,RFC2866中(zhōng)定義,是目前應用最廣泛的AAA(認證、授權、計費(fèi))協議。AAA是一(yī)種管理框架,可以用多種協議來實現。
RADIUS是現在事實上的網絡接入标準,幾乎所有的網絡接入服務器廠商(shāng)均實現了該協議。
RADIUS接入認證的整體(tǐ)框架如下(xià)圖所示:
RADIUS協議承載于UDP之上,官方指定的端口号是1812和1813。RADIUS協議簡單明确、擴展性好,因此得到了廣泛應用。
基于RADIUS的認證方案主要有以下(xià)特點:
● 采用通用的客戶端/服務器結構,NAS作爲RADIUS的客戶端,負責将用戶認證信息傳遞給RADIUS服務器,RADIUS服務器負責接收用戶的認證請求,對用戶進行認證,返回結果給NAS處理。
● 采用共享密鑰保證網絡通信的安全性,客戶端與RADIUS服務器之間的交互是通過共享密鑰來進行相互認證的,密碼不在網上傳輸,減少用戶密碼洩露的風險。
● 具有良好的可擴展性,RADIUS是一(yī)種可擴展的協議,所有的交互報文由多個不同長度的ALV(Attribute-Length-Value)三元組組成,新增加屬性和屬性值不會破壞到協議的原有實現。
● 協議認證機制靈活,RADIUS協議支持多種認證用戶的方式,包括PAP、CHAP、UNIX login等多種認證方式。
Kerberos是MIT研發的一(yī)個集中(zhōng)身份認證框架,在RFC1510中(zhōng)定義。随着應用系統越來越多,單點登錄成爲一(yī)個剛性需求,Kerberos系統就是支持單點登錄的一(yī)套安全認證架構,目前在Windows、Linux和UNIX系統上都有成熟的實現。
Kerberos的認證框架和流程如下(xià):
該框架的主要部件:
1. Client:準備認證的客戶端;
2. Authentication Service:認證服務器;
3. Ticket Granting Service:票(piào)據服務器,和認證服務器一(yī)起,被稱爲KDC(Key Distribution Center),即密碼分(fēn)發中(zhōng)心;
4. AD:Active Directory,用于存儲用戶身份、權限信息;
5. Server:用戶準備登錄的業務服務器。
基于該框架進行認證登錄的主要過程如下(xià):
1. 用戶客戶端向認證服務器提出認證申請;
2. 認證服務器返回票(piào)據授權Ticket
Granting Ticket (TGT);
3. 用戶客戶端再向票(piào)據服務器提交剛才收到的票(piào)據授權TGT;
4. 票(piào)據服務器返回用戶本次訪問需要的票(piào)據Ticket;
5. 用戶客戶端使用該票(piào)據登錄業務服務器;
6. 業務服務器驗證該票(piào)據,準許登錄或拒絕登錄。
Kerberos框架的核心設計思想是引入了KDC,KDC名爲密碼分(fēn)發中(zhōng)心,實際并不會把原始密碼分(fēn)發出去(qù),而是使用客戶端和服務端各自的密碼分(fēn)别加密認證信息,生(shēng)成和分(fēn)發票(piào)據,客戶端和服務器也分(fēn)别使用自己的密碼解密拿到的認證過程中(zhōng)的票(piào)據信息,在整個過程中(zhōng),原始密碼不會在網絡中(zhōng)傳輸,避免了密碼傳輸洩密的風險,而且實現了客戶端和服務器的雙向認證。
認證成功後,後續就不需要每次訪問都再去(qù)KDC認證了,票(piào)據的生(shēng)命周期結束後票(piào)據将自動消耗。
基于Kerberos的認證方案主要有以下(xià)特點:
● 引入KDC,密碼不在網上傳輸,隻傳輸加密後的數據,保證認證過程安全性,減少密碼洩露的風險;
● 預置客戶端和服務器的密碼,KDC作爲中(zhōng)間人負責雙方密碼的管理和數據加密,客戶端和服務端使用自己的密碼解密後和對方通信,從而實現雙向認證;
● 客戶端認證成功後使用票(piào)據進行通信,不需要每次通信都進行認證,可以保證通信性能,減小(xiǎo)認證服務器的壓力;
● 支持多客戶端、多服務器、多業務的集中(zhōng)認證,是單點登錄的一(yī)個理想的認證方案。
LDAP,全稱是Lightweight
Directory Access Protocol,即輕量級目錄訪問協議,基于X.500标準的輕量級目錄訪問協議。目錄服務是一(yī)種特殊的數據庫系統,專門針對讀取,浏覽和搜索操作進行了特定的優化,性能很好。目錄服務一(yī)般不支持通用數據庫的大(dà)量更新操作、事務、回滾等複雜(zá)策略。
LDAP目錄服務是由目錄數據庫和一(yī)套訪問協議組成的系統。
LDAP是開(kāi)放(fàng)的Internet标準,在業界得到廣泛認可,市場上很多産品都支持LDAP,因此對于這類系統,不需單獨定制,隻需要通過LDAP做簡單的配置就可以與服務器做認證交互,大(dà)大(dà)降低了重複開(kāi)發和對接的成本。
目前知(zhī)名的LDAP廠商(shāng)如下(xià):
LDAP也适合用于統一(yī)身份認證,用戶的所有信息都存儲在AD Server中(zhōng)。終端用戶在需要使用公司内部服務的時候,都需要通過AD服務器的認證,認證框架示例圖如下(xià):
基于LDAP的認證方案主要有以下(xià)特點:
● 基于查詢做了優化,性能很好,适用身份認證的場景;
● 采用樹(shù)狀結構存儲,非常容易實現分(fēn)布式部署,可以把一(yī)棵樹(shù)的分(fēn)支單獨部署,易于擴展;
● 基于開(kāi)放(fàng)通用的協議标準,方案成熟,支持跨平台;
● 支持集中(zhōng)身份管理,集中(zhōng)認證。
5.4. Google Authenticator
Google Authenticator本身是一(yī)款手機APP軟件,可以用于組成基于動态口令牌的身份認證方案。目前Google的多種服務和很多互聯網應用都采用該方案進行增強身份認證。
Google Authenticator是一(yī)款基于TOTP算法(Time-Based One-Time Password,即基于時間的一(yī)次性密碼)的兩步驗證軟件令牌,此項服務所使用的算法已列于RFC 6238和RFC 4226中(zhōng)。
Google Authenticator會基于密鑰和時間每30秒計算一(yī)個HMAC-SHA1的hash值,這個hash是160bit的,然後将這個hash值随機取連續的4個字節生(shēng)成32位整數,最後将整數取31位,再取模得到一(yī)個的整數——這就是Google Authenticator顯示的數字。
在服務器端驗證的時候,使用同樣的算法方法來計算出這個數字,然後比較計算出來的結果和用戶輸入的是否一(yī)緻。
使用Google身份認證服務前,需要先在手機上下(xià)載Google
Authenticator,這就是一(yī)個客戶端的一(yī)次性口令牌軟件,安裝後圖标如下(xià):
服務器端可以使用Google公開(kāi)的Jar包,或者按照公開(kāi)的算法自己寫代碼實現。
這樣,客戶端使用用戶名、密碼,配合Google Authenticator的動态口令,形成雙因子認證方案。
基于Google Authenticator的認證方案主要有以下(xià)特點:
● 使用智能手機代替口令牌硬件,成本大(dà)幅降低;
● 通過算法保證口令一(yī)緻性,經過市場驗證,安全可靠;
● 已經發布客戶端應用和服務端代碼包,方便應用集成;
● 手機客戶端在生(shēng)成一(yī)次性口令時并不需要聯網,純粹依靠智能手機硬件進行計算,可以應用在沒有手機網絡的場景。