王 棟 宮兆陽
(中國海洋大學圖書館 山東 青島 266100)
目前絕大多數高校都使用了校園一卡通系統,該系統將智能卡和計算機網絡應用于校園,將學校多種系統聯為一體,實現生活消費、學籍管理、身份認證等多種功能,給予了師生校園生活中很大的便利,也提高了學校的管理水平。圖書館的各種讀者服務也大多依賴智能卡的身份認證功能,如門禁通道、自助選座、圖書借還、研討間門禁等。如果校園智能卡一旦丟失或者忘記攜帶,則無法進行身份認證,嚴重影響了師生使用圖書館的各項服務。因此在校園智能卡之外,如何安全、快捷地進行身份認證和用戶信息傳遞成為重要研究內容。
當下二維碼技術在人們生產生活各個方面都廣泛應用。由于二維碼具有容量大、識別速度快、防偽效果好等特點,能夠很好地適用于移動終端和服務器端的相互認證。由于手機和人聯系緊密,因此認證交互方式多以手機為中介。認證過程中首先以移動終端設備某種硬件標識(手機號、IMEI等)和用戶信息在服務端注冊。當進行認證請求時,服務端生成動態二維碼,手機掃描二維碼并解密驗證后,將硬件標識等信息發送至服務端,服務端檢索數據庫后確認請求,進而完成此次認證[1]。此種認證過程方便快捷,安全性高,但是手機掃描解密需要通過客戶端App完成,開發手機App和說服圖書館用戶安裝成本較高。
微信這一社交平臺出現后,為圖書館服務提供了一個全新信息傳播和分享平臺,它具有用戶量巨大、構建服務成本低、功能靈活且全平臺支持等優點。近年來基于微信二維碼的身份認證方式受到了研究者普遍關注。
目前已經有高校將二維碼技術應用于門禁閘機的通過機制,以下兩種方式都是基于微信的身份信息綁定后,采集不同掃描模式進行身份認證。(1) 用戶需首先關注圖書館微信公眾號,將微信號與圖書館管理系統中的讀者個人信息進行綁定,然后調用微信掃碼功能掃描門禁通道上的二維碼圖像[2],驗證用戶身份。該方式建設成本低,無須對門禁設備進行改造,只需要在門禁粘貼一幅二維碼圖像,通過軟件編程調用圖書館管理系統和門禁通道開放接口即可實現。但該方式存在明顯漏洞,例如對二維碼進行拍照再掃描照片即可開門。(2) 在每個門禁通道上配置掃描設備,由該設備掃描用戶微信中的二維碼[3]。該方式是以在微信卡包中增加一種虛擬卡,如微信校園卡,基于虛擬卡生成動態二維碼進行圖書館閘機身份識別。中國石油大學(華東)和上海盛卡恩門禁通道產品都是采用此方式,該方式采用定時更新的二維碼,所以安全等級較高,并且可以基于微信虛擬卡拓展更多功能,比如放置各種功能鏈接入口、實現跨校漫游認證等。但該方式需要微信公眾號申請開通卡券功能,建卡過程比較繁瑣,需要開通騰訊微校并借助學校力量,僅依靠圖書館難以實現,另外要求及時更新微信版本。
借鑒上述方式的優點,本文從研究微信公眾平臺入手,結合圖書館管理系統和微信兩種身份認證方式,設計一種基于動態二維碼的圖書館安全身份認證方式。研究內容主要包括動態二維碼生成和二維碼掃描終端兩個部分:動態二維碼生成部分以微信用戶OpenID作為身份標識,增加時間戳并進行AES加密后生成動態二維碼;二維碼掃描終端部分實現掃描二維碼后解密數據,脫機自驗證或者聯網向服務端發送認證請求。在完成軟硬件開發后,配置專門的身份認證服務器,并對圖書館門禁通道、研討間管理兩套設施進行改裝,實際應用測試驗證了本文提出方案的可行性。
微信公眾號提供了開發模式,該模式功能豐富,不僅可以獲取到用戶的基本信息,還能獲取用戶的地理位置及其他功能。開發模式提供了豐富的接口,雖然沒有提供關注微信公眾號的用戶微信賬號,但是有用戶的OpenID。同一個用戶微信賬號對應一個微信公眾號的OpenID是唯一的,因此可以將OpenID作為微信用戶的身份標識。
系統認證過程首先通過圖書館管理系統用戶登錄校驗,將用戶信息與用戶微信的OpenID綁定。用戶通過微信公眾號調用身份認證功能時,服務端根據用戶OpenID從已綁定數據庫中提取用戶ID和信息,增加時間戳后通過系統密鑰加密后生成動態二維碼。當認證終端掃描此二維碼,利用系統密鑰解密后驗證時間戳的有效性,完成認證過程并將用戶信息傳遞給服務設施。系統認證過程主要包括基于微信的身份信息綁定、動態二維碼生成及終端認證三個步驟。
圖書館用戶身份綁定需要一個認證方驗證用戶賬號密碼來確認用戶身份。中國海洋大學圖書館采用江蘇匯文圖書館自動化管理平臺,在校師生都擁有平臺的有效讀者身份。讀者以本人學工號作為平臺賬號和自定義密碼登錄平臺后,可以修改個人信息、查看圖書借閱情況、預約和薦購圖書等。該管理系統提供了一個讀者身份驗證接口,可以作為身份信息綁定和動態二維碼生成過程的認證方,實現過程如圖1所示。

圖1 基于微信和圖書館管理系統的身份綁定過程
身份綁定過程步驟具體如下:
(1) 用戶關注圖書館微信公眾號后,啟動其中的身份綁定功能;(2) 微信從認證服務器回調顯示登錄驗證頁面,認證服務程序獲取用戶OpenID并向圖書館管理系統發送身份驗證請求;(3) 用戶在登錄驗證頁面填寫賬號密碼后,提交驗證,圖書館管理系統將驗證結果返回認證服務程序;(4) 認證服務程序根據驗證結果返回用戶提示,如驗證通過,在本地數據庫保存用戶信息。
通過上述步驟審核后,圖書館用戶就可以調用微信公眾號中的“我的二維碼”功能,身份綁定過程界面如圖2所示。

圖2 身份綁定過程界面
生成動態二維碼的過程如圖3所示。

圖3 基于微信和圖書館管理系統的動態二維碼生成過程
(1) 用戶調用微信公眾號功能,微信向認證服務程序發送微信用戶OpenID。
(2) 認證服務程序使用OpenID在本地數據庫查詢用戶信息,如果未查詢到用戶記錄則自動跳轉至登錄驗證綁定頁面;為確保用戶身份有效,認證服務程序還會將用戶信息在圖書館管理系統進行驗證,返回讀者最新的信息和狀態。
(3) 認證服務確認用戶為有效讀者后,更新本地用戶記錄,將用戶信息和當前時間加密后生成動態二維碼,并返回用戶二維碼圖像頁面。
為防止二維碼包含的用戶信息泄露或二維碼圖像被篡改利用,還須對二維碼所包含的信息進行加密處理。加密前原文格式為:“用戶ID+時間戳+驗證信息”,其中驗證信息是根據用戶ID和時間戳的運算結果,運算方法可以自定義,最簡單方法是前兩項求和。本文采用AES(高級加密標準)加密方法對原文進行加密。認證服務程序使用.Net Framework+C#開發,其中.Net Framework自帶Rijndael算法類RijndaelManaged,代碼實現如下:
//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 生成的二維碼圖像和密文
終端認證過程主要通過二維碼掃描器讀取二維碼信息,根據系統密鑰將二維碼信息解碼獲取明文。從明文中截取用戶ID、時間和驗證信息,判斷時間是否在有效期內,并按照之前定義的運算方法檢驗驗證信息是否正確,進而實現人員身份認證。
師:也就是說,P、A、O、B,這四點是共圓的.那我們就可以研究四邊形PAOB的外接圓了.因為點P的移動,所以這個外接圓也在動.關注這個動圓,我們還可以研究什么?
認證結果在不同類型的服務設備上反饋結果不同,有的可以直接觸發電氣設備動作,如門禁通道扇門、房門電子鎖等;而有的服務則需要詳細的用戶信息,認證終端還需要根據用戶ID從認證服務器數據庫中讀取用戶記錄,反饋給服務設備上的操作軟件,如座位管理系統選座終端機、研討間預約機等。
針對上述兩種服務設備情況,本文設計了兩種認證終端方案,分別為基于嵌入式系統的硬件終端和基于Windows應用程序的軟件終端。
硬件認證終端可以直接控制服務設施的電氣機構,如門禁通道機的扇門開啟。為了給門禁通道機增加二維碼掃碼認證功能,本文選取了一款帶有UART TTL接口的二維碼掃描設備與STM32F1系列單片機相配合。硬件外觀如圖5所示。

圖5 二維碼掃描模塊和單片機控制板
該認證終端工作流程如圖6所示。二維碼掃描模塊掃描二維碼,并將識別出的二維碼信息通過USART接口送至單片機。為避免與認證服務網絡通信延遲影響認證通過效率,本文開發嵌入式程序直接對二維碼信息進行解碼,并判斷時間有效性和檢驗驗證信息。認證通過則指令控制單片機的IO口電平驅動繼電器導通,為門禁通道機的扇門控制電路提供開門信號,并通過以太網芯片將用戶ID發送至認證服務器,由認證服務端程序記錄刷卡認證日志。

圖6 基于嵌入式系統的認證終端工作流程
圖書館座位管理、圖書自助借還設備和研討間預約等服務設備中的軟件認證過程中,驗證身份有效性之外還需要自動獲取用戶信息,代替交互過程中的手工錄入,因此軟件認證終端還需要從認證服務器實時獲取用戶信息,執行過程如圖7所示。

圖7 認證流程
兩種認證終端方案流程相似,區別可見圖7中虛線框部分,基于Windows應用程序的認證過程需要以用戶ID在認證服務器中查詢用戶信息,并傳遞給服務設備應用程序。另外,為確保時間驗證成功,兩種終端都需要與認證服務器保持時間同步。
為測試方案的可行性,本文對圖書館現有的門禁通道機和研討間預約終端機進行了升級改造,分別安裝兩種二維碼認證終端后,投入實際應用測試。
基于嵌入式系統的認證終端主要應用于門禁通道,本文使用的是上海盛卡恩智能系統有限公司的門禁通道產品,型號為SKE780,該產品中心控制板為無線遙控器預留了控制接口TRD101。如圖8所示,短接TRD101接口第2、5針腳就可以實現扇門開啟。終端產品及人員掃碼通過如圖9所示。

圖8 門禁通道控制板

圖9 門禁通道加裝認證終端和人員掃碼通過圖像
為了基于Windows應用程序的認證終端的應用測試,本文定制了一款帶二維碼掃描器的觸控一體機,如圖10所示。

圖10 加裝認證終端的研討間預約終端機
研討間預約系統是自主研發軟件,加裝二維碼認證終端后,程序中新增解碼認證流程實現了智能卡和二維碼雙重認證方式。有些服務設備軟件交換界面無法定制開發,則可以向界面窗口句柄發送模擬鍵盤消息,完成信息輸入。
設備加裝二維碼掃碼認證功能后,本文對方案的安全性進行了測試,主要進行記錄二維碼圖像重復刷卡認證和二維碼編碼破解測試。測試結果證明本方案具有較高的安全性。分析原因如下:(1) 由于二維碼有效期只有一分鐘,因此通過復制二維碼圖像后沒法二次利用;(2) 破解者有可能獲得用戶的圖書館管理系統登錄賬號,但是無法通過同一微信賬號的OpenID冒充用戶獲取二維碼;(3) 二維碼信息是由用戶ID+時間戳+驗證信息通過AES算法加密得出,每次產生的密文變化復雜,不能還原得到原始信息和系統密鑰。
本文設計實現了一種基于動態二維碼的圖書館安全身份認證方案,包括基于微信的動態二維碼的身份認證系統和兩種刷卡認證終端。該認證方案實現簡單,不需要借助第三方,綁定和認證過程快捷,并且有較高的安全性。基于該方案,實現了門禁通道、研討間管理等多項服務的統一管理,并在中國海洋大學圖書館投入實用,取得了良好的應用示范效果。另外基于微信公眾號的便捷功能服務吸引師生關注圖書館,有效促進了圖書館各項服務在微信公眾號中的宣傳和推廣工作。
本文系統的門禁控制器等硬件由開發人員自行研制,不是通用性門禁產品,所以系統的安裝部署相對復雜,需要專業的技術人員才能勝任。未來將考慮在對系統效率、穩定性和可靠性進行大量測試完善的基礎上,改善硬件的集成度和可操作性。