王 棟 宮兆陽
(中國海洋大學(xué)圖書館 山東 青島 266100)
目前絕大多數(shù)高校都使用了校園一卡通系統(tǒng),該系統(tǒng)將智能卡和計算機(jī)網(wǎng)絡(luò)應(yīng)用于校園,將學(xué)校多種系統(tǒng)聯(lián)為一體,實現(xiàn)生活消費、學(xué)籍管理、身份認(rèn)證等多種功能,給予了師生校園生活中很大的便利,也提高了學(xué)校的管理水平。圖書館的各種讀者服務(wù)也大多依賴智能卡的身份認(rèn)證功能,如門禁通道、自助選座、圖書借還、研討間門禁等。如果校園智能卡一旦丟失或者忘記攜帶,則無法進(jìn)行身份認(rèn)證,嚴(yán)重影響了師生使用圖書館的各項服務(wù)。因此在校園智能卡之外,如何安全、快捷地進(jìn)行身份認(rèn)證和用戶信息傳遞成為重要研究內(nèi)容。
當(dāng)下二維碼技術(shù)在人們生產(chǎn)生活各個方面都廣泛應(yīng)用。由于二維碼具有容量大、識別速度快、防偽效果好等特點,能夠很好地適用于移動終端和服務(wù)器端的相互認(rèn)證。由于手機(jī)和人聯(lián)系緊密,因此認(rèn)證交互方式多以手機(jī)為中介。認(rèn)證過程中首先以移動終端設(shè)備某種硬件標(biāo)識(手機(jī)號、IMEI等)和用戶信息在服務(wù)端注冊。當(dāng)進(jìn)行認(rèn)證請求時,服務(wù)端生成動態(tài)二維碼,手機(jī)掃描二維碼并解密驗證后,將硬件標(biāo)識等信息發(fā)送至服務(wù)端,服務(wù)端檢索數(shù)據(jù)庫后確認(rèn)請求,進(jìn)而完成此次認(rèn)證[1]。此種認(rèn)證過程方便快捷,安全性高,但是手機(jī)掃描解密需要通過客戶端App完成,開發(fā)手機(jī)App和說服圖書館用戶安裝成本較高。
微信這一社交平臺出現(xiàn)后,為圖書館服務(wù)提供了一個全新信息傳播和分享平臺,它具有用戶量巨大、構(gòu)建服務(wù)成本低、功能靈活且全平臺支持等優(yōu)點。近年來基于微信二維碼的身份認(rèn)證方式受到了研究者普遍關(guān)注。
目前已經(jīng)有高校將二維碼技術(shù)應(yīng)用于門禁閘機(jī)的通過機(jī)制,以下兩種方式都是基于微信的身份信息綁定后,采集不同掃描模式進(jìn)行身份認(rèn)證。(1) 用戶需首先關(guān)注圖書館微信公眾號,將微信號與圖書館管理系統(tǒng)中的讀者個人信息進(jìn)行綁定,然后調(diào)用微信掃碼功能掃描門禁通道上的二維碼圖像[2],驗證用戶身份。該方式建設(shè)成本低,無須對門禁設(shè)備進(jìn)行改造,只需要在門禁粘貼一幅二維碼圖像,通過軟件編程調(diào)用圖書館管理系統(tǒng)和門禁通道開放接口即可實現(xiàn)。但該方式存在明顯漏洞,例如對二維碼進(jìn)行拍照再掃描照片即可開門。(2) 在每個門禁通道上配置掃描設(shè)備,由該設(shè)備掃描用戶微信中的二維碼[3]。該方式是以在微信卡包中增加一種虛擬卡,如微信校園卡,基于虛擬卡生成動態(tài)二維碼進(jìn)行圖書館閘機(jī)身份識別。中國石油大學(xué)(華東)和上海盛卡恩門禁通道產(chǎn)品都是采用此方式,該方式采用定時更新的二維碼,所以安全等級較高,并且可以基于微信虛擬卡拓展更多功能,比如放置各種功能鏈接入口、實現(xiàn)跨校漫游認(rèn)證等。但該方式需要微信公眾號申請開通卡券功能,建卡過程比較繁瑣,需要開通騰訊微校并借助學(xué)校力量,僅依靠圖書館難以實現(xiàn),另外要求及時更新微信版本。
借鑒上述方式的優(yōu)點,本文從研究微信公眾平臺入手,結(jié)合圖書館管理系統(tǒng)和微信兩種身份認(rèn)證方式,設(shè)計一種基于動態(tài)二維碼的圖書館安全身份認(rèn)證方式。研究內(nèi)容主要包括動態(tài)二維碼生成和二維碼掃描終端兩個部分:動態(tài)二維碼生成部分以微信用戶OpenID作為身份標(biāo)識,增加時間戳并進(jìn)行AES加密后生成動態(tài)二維碼;二維碼掃描終端部分實現(xiàn)掃描二維碼后解密數(shù)據(jù),脫機(jī)自驗證或者聯(lián)網(wǎng)向服務(wù)端發(fā)送認(rèn)證請求。在完成軟硬件開發(fā)后,配置專門的身份認(rèn)證服務(wù)器,并對圖書館門禁通道、研討間管理兩套設(shè)施進(jìn)行改裝,實際應(yīng)用測試驗證了本文提出方案的可行性。
微信公眾號提供了開發(fā)模式,該模式功能豐富,不僅可以獲取到用戶的基本信息,還能獲取用戶的地理位置及其他功能。開發(fā)模式提供了豐富的接口,雖然沒有提供關(guān)注微信公眾號的用戶微信賬號,但是有用戶的OpenID。同一個用戶微信賬號對應(yīng)一個微信公眾號的OpenID是唯一的,因此可以將OpenID作為微信用戶的身份標(biāo)識。
系統(tǒng)認(rèn)證過程首先通過圖書館管理系統(tǒng)用戶登錄校驗,將用戶信息與用戶微信的OpenID綁定。用戶通過微信公眾號調(diào)用身份認(rèn)證功能時,服務(wù)端根據(jù)用戶OpenID從已綁定數(shù)據(jù)庫中提取用戶ID和信息,增加時間戳后通過系統(tǒng)密鑰加密后生成動態(tài)二維碼。當(dāng)認(rèn)證終端掃描此二維碼,利用系統(tǒng)密鑰解密后驗證時間戳的有效性,完成認(rèn)證過程并將用戶信息傳遞給服務(wù)設(shè)施。系統(tǒng)認(rèn)證過程主要包括基于微信的身份信息綁定、動態(tài)二維碼生成及終端認(rèn)證三個步驟。
圖書館用戶身份綁定需要一個認(rèn)證方驗證用戶賬號密碼來確認(rèn)用戶身份。中國海洋大學(xué)圖書館采用江蘇匯文圖書館自動化管理平臺,在校師生都擁有平臺的有效讀者身份。讀者以本人學(xué)工號作為平臺賬號和自定義密碼登錄平臺后,可以修改個人信息、查看圖書借閱情況、預(yù)約和薦購圖書等。該管理系統(tǒng)提供了一個讀者身份驗證接口,可以作為身份信息綁定和動態(tài)二維碼生成過程的認(rèn)證方,實現(xiàn)過程如圖1所示。
圖1 基于微信和圖書館管理系統(tǒng)的身份綁定過程
身份綁定過程步驟具體如下:
(1) 用戶關(guān)注圖書館微信公眾號后,啟動其中的身份綁定功能;(2) 微信從認(rèn)證服務(wù)器回調(diào)顯示登錄驗證頁面,認(rèn)證服務(wù)程序獲取用戶OpenID并向圖書館管理系統(tǒng)發(fā)送身份驗證請求;(3) 用戶在登錄驗證頁面填寫賬號密碼后,提交驗證,圖書館管理系統(tǒng)將驗證結(jié)果返回認(rèn)證服務(wù)程序;(4) 認(rèn)證服務(wù)程序根據(jù)驗證結(jié)果返回用戶提示,如驗證通過,在本地數(shù)據(jù)庫保存用戶信息。
通過上述步驟審核后,圖書館用戶就可以調(diào)用微信公眾號中的“我的二維碼”功能,身份綁定過程界面如圖2所示。
圖2 身份綁定過程界面
生成動態(tài)二維碼的過程如圖3所示。
圖3 基于微信和圖書館管理系統(tǒng)的動態(tài)二維碼生成過程
(1) 用戶調(diào)用微信公眾號功能,微信向認(rèn)證服務(wù)程序發(fā)送微信用戶OpenID。
(2) 認(rèn)證服務(wù)程序使用OpenID在本地數(shù)據(jù)庫查詢用戶信息,如果未查詢到用戶記錄則自動跳轉(zhuǎn)至登錄驗證綁定頁面;為確保用戶身份有效,認(rèn)證服務(wù)程序還會將用戶信息在圖書館管理系統(tǒng)進(jìn)行驗證,返回讀者最新的信息和狀態(tài)。
(3) 認(rèn)證服務(wù)確認(rèn)用戶為有效讀者后,更新本地用戶記錄,將用戶信息和當(dāng)前時間加密后生成動態(tài)二維碼,并返回用戶二維碼圖像頁面。
為防止二維碼包含的用戶信息泄露或二維碼圖像被篡改利用,還須對二維碼所包含的信息進(jìn)行加密處理。加密前原文格式為:“用戶ID+時間戳+驗證信息”,其中驗證信息是根據(jù)用戶ID和時間戳的運算結(jié)果,運算方法可以自定義,最簡單方法是前兩項求和。本文采用AES(高級加密標(biāo)準(zhǔn))加密方法對原文進(jìn)行加密。認(rèn)證服務(wù)程序使用.Net Framework+C#開發(fā),其中.Net Framework自帶Rijndael算法類RijndaelManaged,代碼實現(xiàn)如下:
//AES加密
public static string AesEncrypt(string str,string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] to EncryptArray=Encoding.UTF8.GetBytes(str);
RijndaelManaged rm=new RijndaelManaged
{
Key=Encoding.UTF8.GetBytes(key),
Mode=CipherMode.ECB,
Padding=PaddingMode.PKCS7
};
ICryptoTransform cTransform=rm.CreateEncryptor();
Byte[]result Array=cTransform.TransformFinalBIock(to EncryptArray,0,toEncryptArray.Length);
return Convert.ToBase64String(resultArray,0,resultArray.Length);
}
生成的二維碼圖像和密文如圖4所示。
圖4 生成的二維碼圖像和密文
終端認(rèn)證過程主要通過二維碼掃描器讀取二維碼信息,根據(jù)系統(tǒng)密鑰將二維碼信息解碼獲取明文。從明文中截取用戶ID、時間和驗證信息,判斷時間是否在有效期內(nèi),并按照之前定義的運算方法檢驗驗證信息是否正確,進(jìn)而實現(xiàn)人員身份認(rèn)證。
師:也就是說,P、A、O、B,這四點是共圓的.那我們就可以研究四邊形PAOB的外接圓了.因為點P的移動,所以這個外接圓也在動.關(guān)注這個動圓,我們還可以研究什么?
認(rèn)證結(jié)果在不同類型的服務(wù)設(shè)備上反饋結(jié)果不同,有的可以直接觸發(fā)電氣設(shè)備動作,如門禁通道扇門、房門電子鎖等;而有的服務(wù)則需要詳細(xì)的用戶信息,認(rèn)證終端還需要根據(jù)用戶ID從認(rèn)證服務(wù)器數(shù)據(jù)庫中讀取用戶記錄,反饋給服務(wù)設(shè)備上的操作軟件,如座位管理系統(tǒng)選座終端機(jī)、研討間預(yù)約機(jī)等。
針對上述兩種服務(wù)設(shè)備情況,本文設(shè)計了兩種認(rèn)證終端方案,分別為基于嵌入式系統(tǒng)的硬件終端和基于Windows應(yīng)用程序的軟件終端。
硬件認(rèn)證終端可以直接控制服務(wù)設(shè)施的電氣機(jī)構(gòu),如門禁通道機(jī)的扇門開啟。為了給門禁通道機(jī)增加二維碼掃碼認(rèn)證功能,本文選取了一款帶有UART TTL接口的二維碼掃描設(shè)備與STM32F1系列單片機(jī)相配合。硬件外觀如圖5所示。
圖5 二維碼掃描模塊和單片機(jī)控制板
該認(rèn)證終端工作流程如圖6所示。二維碼掃描模塊掃描二維碼,并將識別出的二維碼信息通過USART接口送至單片機(jī)。為避免與認(rèn)證服務(wù)網(wǎng)絡(luò)通信延遲影響認(rèn)證通過效率,本文開發(fā)嵌入式程序直接對二維碼信息進(jìn)行解碼,并判斷時間有效性和檢驗驗證信息。認(rèn)證通過則指令控制單片機(jī)的IO口電平驅(qū)動繼電器導(dǎo)通,為門禁通道機(jī)的扇門控制電路提供開門信號,并通過以太網(wǎng)芯片將用戶ID發(fā)送至認(rèn)證服務(wù)器,由認(rèn)證服務(wù)端程序記錄刷卡認(rèn)證日志。
圖6 基于嵌入式系統(tǒng)的認(rèn)證終端工作流程
圖書館座位管理、圖書自助借還設(shè)備和研討間預(yù)約等服務(wù)設(shè)備中的軟件認(rèn)證過程中,驗證身份有效性之外還需要自動獲取用戶信息,代替交互過程中的手工錄入,因此軟件認(rèn)證終端還需要從認(rèn)證服務(wù)器實時獲取用戶信息,執(zhí)行過程如圖7所示。
圖7 認(rèn)證流程
兩種認(rèn)證終端方案流程相似,區(qū)別可見圖7中虛線框部分,基于Windows應(yīng)用程序的認(rèn)證過程需要以用戶ID在認(rèn)證服務(wù)器中查詢用戶信息,并傳遞給服務(wù)設(shè)備應(yīng)用程序。另外,為確保時間驗證成功,兩種終端都需要與認(rèn)證服務(wù)器保持時間同步。
為測試方案的可行性,本文對圖書館現(xiàn)有的門禁通道機(jī)和研討間預(yù)約終端機(jī)進(jìn)行了升級改造,分別安裝兩種二維碼認(rèn)證終端后,投入實際應(yīng)用測試。
基于嵌入式系統(tǒng)的認(rèn)證終端主要應(yīng)用于門禁通道,本文使用的是上海盛卡恩智能系統(tǒng)有限公司的門禁通道產(chǎn)品,型號為SKE780,該產(chǎn)品中心控制板為無線遙控器預(yù)留了控制接口TRD101。如圖8所示,短接TRD101接口第2、5針腳就可以實現(xiàn)扇門開啟。終端產(chǎn)品及人員掃碼通過如圖9所示。
圖8 門禁通道控制板
圖9 門禁通道加裝認(rèn)證終端和人員掃碼通過圖像
為了基于Windows應(yīng)用程序的認(rèn)證終端的應(yīng)用測試,本文定制了一款帶二維碼掃描器的觸控一體機(jī),如圖10所示。
圖10 加裝認(rèn)證終端的研討間預(yù)約終端機(jī)
研討間預(yù)約系統(tǒng)是自主研發(fā)軟件,加裝二維碼認(rèn)證終端后,程序中新增解碼認(rèn)證流程實現(xiàn)了智能卡和二維碼雙重認(rèn)證方式。有些服務(wù)設(shè)備軟件交換界面無法定制開發(fā),則可以向界面窗口句柄發(fā)送模擬鍵盤消息,完成信息輸入。
設(shè)備加裝二維碼掃碼認(rèn)證功能后,本文對方案的安全性進(jìn)行了測試,主要進(jìn)行記錄二維碼圖像重復(fù)刷卡認(rèn)證和二維碼編碼破解測試。測試結(jié)果證明本方案具有較高的安全性。分析原因如下:(1) 由于二維碼有效期只有一分鐘,因此通過復(fù)制二維碼圖像后沒法二次利用;(2) 破解者有可能獲得用戶的圖書館管理系統(tǒng)登錄賬號,但是無法通過同一微信賬號的OpenID冒充用戶獲取二維碼;(3) 二維碼信息是由用戶ID+時間戳+驗證信息通過AES算法加密得出,每次產(chǎn)生的密文變化復(fù)雜,不能還原得到原始信息和系統(tǒng)密鑰。
本文設(shè)計實現(xiàn)了一種基于動態(tài)二維碼的圖書館安全身份認(rèn)證方案,包括基于微信的動態(tài)二維碼的身份認(rèn)證系統(tǒng)和兩種刷卡認(rèn)證終端。該認(rèn)證方案實現(xiàn)簡單,不需要借助第三方,綁定和認(rèn)證過程快捷,并且有較高的安全性?;谠摲桨?,實現(xiàn)了門禁通道、研討間管理等多項服務(wù)的統(tǒng)一管理,并在中國海洋大學(xué)圖書館投入實用,取得了良好的應(yīng)用示范效果。另外基于微信公眾號的便捷功能服務(wù)吸引師生關(guān)注圖書館,有效促進(jìn)了圖書館各項服務(wù)在微信公眾號中的宣傳和推廣工作。
本文系統(tǒng)的門禁控制器等硬件由開發(fā)人員自行研制,不是通用性門禁產(chǎn)品,所以系統(tǒng)的安裝部署相對復(fù)雜,需要專業(yè)的技術(shù)人員才能勝任。未來將考慮在對系統(tǒng)效率、穩(wěn)定性和可靠性進(jìn)行大量測試完善的基礎(chǔ)上,改善硬件的集成度和可操作性。