徐又又,韋政
(深圳第二高級技工學校電氣技術系,深圳 518049)
基于STM8L單片機的動態密碼電子鎖設計
徐又又,韋政
(深圳第二高級技工學校電氣技術系,深圳518049)
電子密碼鎖是一種通過電子系統輸入密碼并與設置的密碼比對,由機電執行機構控制柜門(鎖舌)啟閉的鎖具。隨著物質財富的日益增長,人們對電子密碼鎖的安全性要求越來越高。紅外線遙控電子密碼鎖[1]、基于無線電遙控電子密碼鎖[2]、基于遠程控制和三維運動的密碼鎖[3],這些密碼鎖都在一定程度上提高了安全性,但大都是采用靜態密碼[4]的方式,其開鎖密碼在一定周期內保持不變,但具備修改開鎖密碼的功能。這種方式存在較大的安全隱患[4]:一是密碼強度不夠。密碼鎖用戶一般采用位數較短的密碼。如果采用過長的密碼對用戶來說記憶有難度。二是靜態密碼容易被盜用。為方便使用,大部分的靜態密碼均采用生日日期等特征顯著的密碼,非常容易被猜測并破解。解決這一問題的主要方法就是采用動態密碼[4],其特征是:密碼依據安全算法自動生成,一次一個密碼,使用者無法預知,每次使用的密碼均不相同,避免了他人的盜竊和猜測。因此設計了一種使用動態密碼方式的電子鎖系統,可以實時地生成動態密碼,以單片機為控制核心的電子鎖會對輸入的密碼進行驗證判斷其合法性,實現對鎖的“一次一密”[5]控制,并具有供用戶查詢開鎖記錄、顯示開鎖信息,顯示當前日期時間、檢測震動等多種功能,具有簡單實用的特點,有很高的可靠性。

(1)動態密碼的產生
動態密碼是用專門的算法生成的一個不可預測的隨機數字的組合。該電子鎖系統的動態密碼是由單向Hash算法產生的。單向Hash算法(也稱雜湊函數)是密碼學和信息安全領域中的一個非常重要的基本算法,是把任意長的消息轉化為較短的、固定長度的消息摘要的算法。系統采用的是Hash算法的一種,即Sha256算法。由于Sha256算法生成的信息摘要長度固定為256bit,而電子鎖系統最多顯示8位數字,因此將256bit的信息摘要通過異或的方式轉換成范圍為0-999999的動態密碼。
(2)動態密碼的認證方式
電子鎖的動態密碼認證系統主要由兩個部分組成:一個是安裝在智能設備上的動態密碼App,另一個是單片機控制的電子鎖。在動態密碼App和電子鎖中加載了相同的加密算法。當用戶將App生成的動態密碼輸入至電子鎖,電子鎖將此動態密碼與自己產生的動態密碼相比較,如果匹配則執行開鎖動作。
動態密碼認證主要分為時間同步和事件同步兩種方式[6]:時間同步認證是在一個固定時間內(通常是 1分鐘)產生同一個動態密碼,依據時間的流逝產生不同的密碼;事件同步依據認證卡上的私有密鑰產生一序列的動態密碼,如果用戶意外多產生了幾組密碼造成不同步的狀態,服務器會自動重新同步到目前使用的密碼,一旦一個密碼被使用過后,在密碼序列中所有這個密碼之前的密碼都會失效。
電子鎖系統采用的是事件同步方式,用密鑰種子(Seed)與同步值(Sync)組成的字符串作為Sha256算法的輸入,產生動態密碼,如圖1所示。密鑰種子(Seed)是一組由用戶指定的字符串。系統將密碼種子值設計為長度是5的數字字符串,并且在設置好之后不會隨著動態密碼的生成而更新。同步值(Sync)的初始值是由用戶設置的,長度為3的數字字符串,其值是動態增加的,每生成一次動態密碼,其值自動加1。由于加密算法是復雜、非線性的,即使同步值中只有一位數據發生改變,也會使動態密碼中一半以上的數據位發生改變。

圖1 Sha256算法框圖
App中,每生成一次動態密碼,同步值就加1。電子鎖系統中,每次在動態密碼輸入之后,產生20個以當前的同步值為基數并順序遞增的值對應的動態密碼;輸入的動態密碼與20個計算出來的動態密碼進行匹配,若匹配正常,即電子鎖執行開鎖動作,并將其同步值更新到當前使用的同步值,否則就只將同步值加1。只要正確執行一次開鎖動作就可以實現動態密碼App與電子鎖的同步。
1.2密碼鎖系統的總體設計
(1)系統架構
系統由智能設備(基于Android系統或者iOS的智能手機、平板等)和單片機控制的密碼鎖系統兩部分組成。智能設備主要是利用已有的硬件基礎執行動態密碼App,生成動態密碼并將結果顯示在顯示屏上。
單片機密碼鎖系統主要包括單片機、矩陣鍵盤、LCD顯示模塊、復位電路模塊、RTC時鐘模塊、數據存儲模塊、震動檢測模塊。系統框圖如圖2所示:

圖2 密碼鎖系統框圖
(2)密碼鎖功能設計
密碼鎖關閉時,啟動鍵盤掃描模塊以監視鍵盤輸入的情況。用戶輸入動態密碼并按下“#”鍵確認之后,電子密碼鎖利用與智能設備中的App相同的算法,也生成一個動態密碼,并與用戶輸入的動態密碼進行比較。若是匹配成功就執行開鎖動作,并更新動態密碼算法的同步值,同時存儲當前的日期時間作為開鎖記錄可供查詢;若是不滿足匹配條件就提示重新輸入密碼。如果連續三次輸入密碼錯誤則鎖定鍵盤,并發出聲光報警。在開鎖狀態下,用戶可以修改動態密碼的種子與同步值以及查詢之前的開鎖記錄。用戶修改產生動態密碼的種子或者同步值時,需要同步在App上進行更新。系統可選擇開啟或者關閉振動檢測功能,若是開啟并且也檢測到有效的振動信號就聲光報警提示用戶,同時還集成了萬年歷功能,系統待機狀態下顯示當前的日期以及時間,并且為存儲開鎖記錄提供時間以及日期。

微控制器是整個控制部分的核心,要滿足系統的以下設計需求:
(1)主流典型的微控制器
(2)低功耗(適合電池供電系統)
(3)豐富的節電模式控制
(4)內置TNLCD驅動電路[7]
(5)內置存儲器,用于存儲用戶信息、開鎖記錄及動態密碼的初始化信息
(6)內置RTC萬年歷時鐘控制電路[7]
基于以上設計需求,采用STM8L作為控制核心,其工作電源電壓范圍為1.8-3.6V,靜態功耗為幾uA,有5種低功耗模式。該電子密碼鎖設計為正常運行、Green和Halt等三種工作模式,鎖大部分時間都工作在Green和Halt模式,因此系統功耗很低。STM8L具有67個I/O,內置2KBE2PROM、TNLCD驅動、RTC萬年歷時鐘等豐富的資源,因此需要外擴的電路很少,從而能夠有效降低整體控制系統的成本。

TN LCD有兩個重要的參數Bias和Duty,決定了LCD的驅動方式。基于本系統需要顯示的段數以及芯片的驅動電壓,選擇的TN LCD的驅動是1/3 Bias和1/4Duty。其對應的驅動電壓配置電路如圖3所示。由于STM8L內部集成了LCD驅動電路,硬件上將LCD的COM/SEG與MCU上的COM/SEG一一連接起來即可。

圖3 1/3 Bias和1/4Duty驅動電壓配置電路

本系統中涉及輸入的主要是數字0-9以及功能菜單“*”以及“#”按鍵,一共十二個按鍵,因此選擇3×4的矩陣鍵盤設計。由于STM8L內部集成了上拉電阻,因此鍵盤驅動電路中不需要外接上拉電阻。

STM8L內置2KB的E2PROM用于存儲有效性檢測字符串、動態密碼對應的種子、同步值以及開鎖記錄。有效性檢測字符串,主要用于進行數據有效性檢測,即每次上電檢測特定位置是否存在特殊規律的字符串,若沒有就初始化當前的E2PROM,若有則認為E2PROM中的數據是有效的。每條開鎖記錄保存的是當前開鎖的日期及時間,并且以BCD碼的方式存儲,便于顯示,如0001201504011230表示0001條記錄2015年04月01日12點30分,單條記錄需要8個字節,一共可以存儲200條記錄。由于前面兩個字節時作為記錄的索引,每次需要存儲新的開鎖記錄時,只要更新索引值最小的那條記錄就行。例如在當前已有存儲是索引值0156到0355的200條記錄時,只需要在0156的位置更新0356對應的開鎖記錄。

STM8L中內置了RTC時鐘驅動電路,程序中對RTC相關的特殊功能寄存器進行初始化之后,在日期以及時間對應的特殊功能寄存器中就能夠讀取BCD碼格式的萬年歷時間。
中國教師:近年來,除新教育實驗外,“親近母語”實驗、深圳三葉草等民間組織也都在致力于推廣閱讀,您怎么評價這些民間閱讀公益組織?您覺得,還應該集合哪些方面的力量來推廣閱讀?

門鎖驅動電路采用典型的“H橋驅動電路”,其形狀酷似字母H。具體驅動電路如圖4所示。通過置位iPMotorCntr(GPIOG0)以及清零iNMotorCntr(GPIOG1)實現電機的順時針轉動(即開鎖動作);通過置位iNMotorCntr(GPIOG1)以及清零iPMotorCntr(GPIOG0)實現電機的逆時針轉動(即關鎖動作)。

圖4 門鎖驅動電路

根據自頂向下設計原則,將系統分成多個功能模塊。為了減少功能模塊之間的耦合并且有效清晰地實現模塊之間的數據傳遞以及功能切換,因此使用了通過多態實現不同狀態的切換,即狀態機模式。
系統主要有動態密碼檢測、動態密碼設置、時間顯示,以及開鎖查詢記錄等功能。每個功能設置一種狀態,并且通過狀態機的方式實現各個功能塊之間的切換,如圖5所示。例如在系統時間顯示狀態下,按Sharp按鍵就進入了動態密碼檢測狀態,此時MCU等待用戶輸入密碼。不同的觸發條件對應不同的操作,如Sharp按鍵確認密碼輸入完成則進行密碼比對操作,密碼正確就顯示“Open”執行開鎖動作,否則顯示”Psw Err”。
如圖5所示,其中 {Init Status,Action trap Status,IDLE Status,Power Down Status,System Time Display Status,System Time setting Status,Password Check Status,Password Setting Status,Record Inquire Status}均為系統狀態,箭頭 TimeOver6/EnterPowerDown表示在 Idle Status狀態下 TimeOver6超時觸發系統進入PowerDown Mode狀態,并進行EnterPowerDown(進入低功耗模式的系統配置等)操作。

圖5 系統狀態切換圖

用動態密碼App生成密碼后,用戶操作固定鍵盤輸入App產生的密碼,單片機系統調用動態密碼匹配子程序,驗證輸入的密碼是否匹配。Sha256算法以用戶設定的密鑰種子Seed以及同步值Sync組成的字串作為輸入,計算出信息摘要并通過異或操作產生動態密碼。程序根據當前保存的同步值Sync之后連續的20個同步值產生可能匹配的20個動態密碼,再與當前輸入的密碼進行匹配,若匹配正確就更新同步值到與之匹配的同步值,并執行開鎖動作;若是匹配不正確,再嘗試密碼匹配特征識別,若成立則認為是有非法用戶嘗試輸入密碼,此時同步值自動更新到下一個。該子程序流程圖如圖6所示。

圖6 動態密碼匹配子程序流程圖

系統充分利用STM8L單片機的低功耗特性,設計為兩個功耗模式:正常模式與睡眠模式。正常模式下通過不斷對各個模塊控制權輪詢處理,完成萬年歷時鐘的計算、按鍵信息的識別、顯示控制,動態密碼的匹配等功能。程序主流程圖如圖7(a)所示。睡眠模式下主要是RTC時鐘模塊、中斷系統以及顯示模塊工作,其他模塊處于關閉狀態。中斷系統可以喚醒MCU退出睡眠模式,此時MCU根據對中斷源的判斷決定是否返回正常模式。RTC中斷喚醒MCU,此時更新LCD顯示內容,再次進入睡眠模式;若是按鍵中斷喚醒MCU,此時退出睡眠模式返回正常模式。睡眠喚醒子程序流程圖如圖7(b)所示。MCU絕大部分時間是處于睡眠模式的。此時電流最低到20 uA左右,可大大減少電池損耗,延長使用時間。

圖7 系統軟件流程圖

為了防止硬件的損壞,在電路板上電前進行芯片的焊接方向以及芯片引腳開短路檢查。在上電無異常狀況的前提下,可以使用萬用表和示波器進行測量,首先測量電源芯片的輸出電壓是否正常,復位電壓是否正常,然后使用示波器測量各個主要芯片電源引腳,查看電源的波形情況。確認單片機正常之后就可以通過仿真器連接用戶板進行調試。
軟件調試需要用到IAR For STM8、焊接好的樣板等。首先打開IAR for STM8,新建工程,新建文本框輸入程序后保存,檢查是否有語法錯誤,經過反復檢查無誤后編譯連接,生成STM8可執行的Hex文件。軟件部分的測試主要方法是通過設置斷點、單步執行等方法來測試程序的正確性。

動態密碼鎖電路上電之后,先自檢E2PROM中有效性檢測字符串,若是符合設定規則,就使用指定位置的數據作為密鑰種子Seed以及同步值Sync,否則初始化當前的E2PROM,并且恢復密鑰種子Seed(“12345”)以及同步值Sync(“999”)的出廠值并顯示“rESEt In”。在系統時間顯示界面,按下“#”鍵進入密碼輸入狀態,允許用戶輸入動態密碼,如圖8所示。按下“*”鍵可以清除當前輸入的密碼。如果密碼輸入匹配成功,則顯示“-oPEn-”,同時門鎖驅動電路打開門鎖;如果密碼輸入匹配不成功,提示密碼輸入錯誤并聲光報警,連續三次密碼匹配不成功,則鎖住鍵盤3分鐘不讓用戶再次輸入密碼。門鎖打開之后,按“#”按鍵可以修改五位的密鑰種子Seed以及三位同步值Sync,第一次密鑰種子以及同步值輸入完成提示再次輸入新的密鑰種子以及同步值,若果第一次輸入與第二次輸入不同,則顯示“Set Err”提示密鑰種子及同步值修改失敗,退出當前修改界面,若是兩次輸入一致,則顯示“InFo In”表示修改成功;按“*”可以查看開鎖歷史記錄,通過按鍵“2”或者“8”實現翻頁功能。

圖8 動態密碼鎖的系統實物圖

在系統設計完成后,對系統進行了測試,主要參數指標如下:
(1)系統動態功耗:在4.5V供電的情況下,系統開機瞬間動態電流為5.21mA,有按鍵觸發瞬間動態功耗是6.32mA;
(2)系統靜態功耗:在一定時間內沒有事件觸發,系統進入低功耗模式,系統的靜態功耗為20.76uA。
從以上指標可以看出,系統的動態功耗與靜態功耗差異極大,而系統絕大部分時間處于靜態,即最大靜態化。因此系統的總功耗主要是靜態功耗,基本可以滿足電池供電系統的低功耗指標要求。
針對目前國內大多數電子鎖采用靜態密碼的方式,安全可靠性不高,而少數安全性較高的鎖成本又很高的現狀,設計了基于STM8L單片機的低功耗動態密碼電子鎖。該系統實現了“一次一密”的動態密碼方式,且功耗很低,大約可持續使用3~4年。此外系統與市面上現有的電子密碼鎖電路基本一致,只需要升級軟件,就能實現從靜態密碼鎖到動態密碼的更換,具有易開發,成本低的特點。因此該電子鎖實用性很強,可應用于住宅、辦公室的保險箱以及檔案柜等。
[1]崔巖,吳國興,顧媛媛,陸惠,殷美琳.基于FPGA的紅外遙控密碼鎖的設計[J].電子技術應用,2013(11):44-46.
[2]董慶賀.基于GSM的防盜密碼鎖系統設計與實現[J].電子技術應用,2011(9):64-66,73.
[3]鄒曉宇,朱濤,肖守訥.基于遠程控制和三維運動的密碼鎖設計[J].工程設計學報,2014(5):476-480.
[4]韓桂明.動態口令網絡身份認證系統的設計與實現[J].無線互聯科技,2012(10):78.
[5]毛淑平.ATM動態密碼電子鎖使用研究[J].軟件服務·實務,2012(3):65-69.
[6]朱繼團.動態密碼在保密信息系統中的應用[J].現代計算機,2004(6):41-44.
[7]潘永雄.STM8S系列單片機原理與應用[M].西安:西安電子科技大學出版社,2011.
Dynamic Password;STM8L;Special Low-Power
Design of Dynamic Password Electronic Lock Based on STM8L MCU
XU You-you,WEI Zheng
(Shenzhen Second Senior Technical School,Shenzhen 518049)
1007-1423(2015)25-0045-07
10.3969/j.issn.1007-1423.2015.25.013
徐又又(1977-),女,廣東深圳人,講師,碩士研究生,研究方向為嵌入式系統
2015-06-25
2015-08-24
鎖具的安全性日益受到人們的重視,而現有的電子鎖大都采用靜態密碼的方式。這種方式存在較大的安全隱患,即密碼易被遺忘或盜用。針對這一問題,設計一種采用動態密碼方式的電子鎖系統。該系統由產生動態密碼的智能設備和以單片機作為控制核心的電子鎖兩部分組成,對鎖控制系統進行深入研究。首先根據功能要求進行系統整體設計,在硬件電路設計上,采用單片機STM8L實現超低功耗控制,在軟件設計上主要通過對動態密碼的匹配與識別實現“一次一密”。經過驗證系統能夠達到預期目標,且功耗特別低,具有很高的實用價值。
動態密碼;STML單片機;超低功耗
韋政(1970-),男,廣東深圳人,高級技師,研究方向為電氣自動化方向
Lock security problem is increasingly valued,but the existing electronic locks mostly use static password mode,which has security risk of password being missed or theft.In order to solve this problem,designs a dynamic password electronic lock system.This system is composed of two core modules:intelligent equipment to generate dynamic password and electronic lock controlled by MCU.Studies the lock system,designs an overall design of the system.Uses STM8L microcontroller to realize special low-power control in the hardware design. Realizes“one password at a time”through matching and distinguishing dynamic password in the software design.The system can reach the expected target by test and verification,with special low-power control and with great practical value.