徐又又,韋政
(深圳第二高級技工學(xué)校電氣技術(shù)系,深圳 518049)
基于STM8L單片機的動態(tài)密碼電子鎖設(shè)計
徐又又,韋政
(深圳第二高級技工學(xué)校電氣技術(shù)系,深圳518049)
電子密碼鎖是一種通過電子系統(tǒng)輸入密碼并與設(shè)置的密碼比對,由機電執(zhí)行機構(gòu)控制柜門(鎖舌)啟閉的鎖具。隨著物質(zhì)財富的日益增長,人們對電子密碼鎖的安全性要求越來越高。紅外線遙控電子密碼鎖[1]、基于無線電遙控電子密碼鎖[2]、基于遠(yuǎn)程控制和三維運動的密碼鎖[3],這些密碼鎖都在一定程度上提高了安全性,但大都是采用靜態(tài)密碼[4]的方式,其開鎖密碼在一定周期內(nèi)保持不變,但具備修改開鎖密碼的功能。這種方式存在較大的安全隱患[4]:一是密碼強度不夠。密碼鎖用戶一般采用位數(shù)較短的密碼。如果采用過長的密碼對用戶來說記憶有難度。二是靜態(tài)密碼容易被盜用。為方便使用,大部分的靜態(tài)密碼均采用生日日期等特征顯著的密碼,非常容易被猜測并破解。解決這一問題的主要方法就是采用動態(tài)密碼[4],其特征是:密碼依據(jù)安全算法自動生成,一次一個密碼,使用者無法預(yù)知,每次使用的密碼均不相同,避免了他人的盜竊和猜測。因此設(shè)計了一種使用動態(tài)密碼方式的電子鎖系統(tǒng),可以實時地生成動態(tài)密碼,以單片機為控制核心的電子鎖會對輸入的密碼進(jìn)行驗證判斷其合法性,實現(xiàn)對鎖的“一次一密”[5]控制,并具有供用戶查詢開鎖記錄、顯示開鎖信息,顯示當(dāng)前日期時間、檢測震動等多種功能,具有簡單實用的特點,有很高的可靠性。
(1)動態(tài)密碼的產(chǎn)生
動態(tài)密碼是用專門的算法生成的一個不可預(yù)測的隨機數(shù)字的組合。該電子鎖系統(tǒng)的動態(tài)密碼是由單向Hash算法產(chǎn)生的。單向Hash算法(也稱雜湊函數(shù))是密碼學(xué)和信息安全領(lǐng)域中的一個非常重要的基本算法,是把任意長的消息轉(zhuǎn)化為較短的、固定長度的消息摘要的算法。系統(tǒng)采用的是Hash算法的一種,即Sha256算法。由于Sha256算法生成的信息摘要長度固定為256bit,而電子鎖系統(tǒng)最多顯示8位數(shù)字,因此將256bit的信息摘要通過異或的方式轉(zhuǎn)換成范圍為0-999999的動態(tài)密碼。
(2)動態(tài)密碼的認(rèn)證方式
電子鎖的動態(tài)密碼認(rèn)證系統(tǒng)主要由兩個部分組成:一個是安裝在智能設(shè)備上的動態(tài)密碼App,另一個是單片機控制的電子鎖。在動態(tài)密碼App和電子鎖中加載了相同的加密算法。當(dāng)用戶將App生成的動態(tài)密碼輸入至電子鎖,電子鎖將此動態(tài)密碼與自己產(chǎn)生的動態(tài)密碼相比較,如果匹配則執(zhí)行開鎖動作。
動態(tài)密碼認(rèn)證主要分為時間同步和事件同步兩種方式[6]:時間同步認(rèn)證是在一個固定時間內(nèi)(通常是 1分鐘)產(chǎn)生同一個動態(tài)密碼,依據(jù)時間的流逝產(chǎn)生不同的密碼;事件同步依據(jù)認(rèn)證卡上的私有密鑰產(chǎn)生一序列的動態(tài)密碼,如果用戶意外多產(chǎn)生了幾組密碼造成不同步的狀態(tài),服務(wù)器會自動重新同步到目前使用的密碼,一旦一個密碼被使用過后,在密碼序列中所有這個密碼之前的密碼都會失效。
電子鎖系統(tǒng)采用的是事件同步方式,用密鑰種子(Seed)與同步值(Sync)組成的字符串作為Sha256算法的輸入,產(chǎn)生動態(tài)密碼,如圖1所示。密鑰種子(Seed)是一組由用戶指定的字符串。系統(tǒng)將密碼種子值設(shè)計為長度是5的數(shù)字字符串,并且在設(shè)置好之后不會隨著動態(tài)密碼的生成而更新。同步值(Sync)的初始值是由用戶設(shè)置的,長度為3的數(shù)字字符串,其值是動態(tài)增加的,每生成一次動態(tài)密碼,其值自動加1。由于加密算法是復(fù)雜、非線性的,即使同步值中只有一位數(shù)據(jù)發(fā)生改變,也會使動態(tài)密碼中一半以上的數(shù)據(jù)位發(fā)生改變。
圖1 Sha256算法框圖
App中,每生成一次動態(tài)密碼,同步值就加1。電子鎖系統(tǒng)中,每次在動態(tài)密碼輸入之后,產(chǎn)生20個以當(dāng)前的同步值為基數(shù)并順序遞增的值對應(yīng)的動態(tài)密碼;輸入的動態(tài)密碼與20個計算出來的動態(tài)密碼進(jìn)行匹配,若匹配正常,即電子鎖執(zhí)行開鎖動作,并將其同步值更新到當(dāng)前使用的同步值,否則就只將同步值加1。只要正確執(zhí)行一次開鎖動作就可以實現(xiàn)動態(tài)密碼App與電子鎖的同步。
1.2密碼鎖系統(tǒng)的總體設(shè)計
(1)系統(tǒng)架構(gòu)
系統(tǒng)由智能設(shè)備(基于Android系統(tǒng)或者iOS的智能手機、平板等)和單片機控制的密碼鎖系統(tǒng)兩部分組成。智能設(shè)備主要是利用已有的硬件基礎(chǔ)執(zhí)行動態(tài)密碼App,生成動態(tài)密碼并將結(jié)果顯示在顯示屏上。
單片機密碼鎖系統(tǒng)主要包括單片機、矩陣鍵盤、LCD顯示模塊、復(fù)位電路模塊、RTC時鐘模塊、數(shù)據(jù)存儲模塊、震動檢測模塊。系統(tǒng)框圖如圖2所示:
圖2 密碼鎖系統(tǒng)框圖
(2)密碼鎖功能設(shè)計
密碼鎖關(guān)閉時,啟動鍵盤掃描模塊以監(jiān)視鍵盤輸入的情況。用戶輸入動態(tài)密碼并按下“#”鍵確認(rèn)之后,電子密碼鎖利用與智能設(shè)備中的App相同的算法,也生成一個動態(tài)密碼,并與用戶輸入的動態(tài)密碼進(jìn)行比較。若是匹配成功就執(zhí)行開鎖動作,并更新動態(tài)密碼算法的同步值,同時存儲當(dāng)前的日期時間作為開鎖記錄可供查詢;若是不滿足匹配條件就提示重新輸入密碼。如果連續(xù)三次輸入密碼錯誤則鎖定鍵盤,并發(fā)出聲光報警。在開鎖狀態(tài)下,用戶可以修改動態(tài)密碼的種子與同步值以及查詢之前的開鎖記錄。用戶修改產(chǎn)生動態(tài)密碼的種子或者同步值時,需要同步在App上進(jìn)行更新。系統(tǒng)可選擇開啟或者關(guān)閉振動檢測功能,若是開啟并且也檢測到有效的振動信號就聲光報警提示用戶,同時還集成了萬年歷功能,系統(tǒng)待機狀態(tài)下顯示當(dāng)前的日期以及時間,并且為存儲開鎖記錄提供時間以及日期。
微控制器是整個控制部分的核心,要滿足系統(tǒng)的以下設(shè)計需求:
(1)主流典型的微控制器
(2)低功耗(適合電池供電系統(tǒng))
(3)豐富的節(jié)電模式控制
(4)內(nèi)置TNLCD驅(qū)動電路[7]
(5)內(nèi)置存儲器,用于存儲用戶信息、開鎖記錄及動態(tài)密碼的初始化信息
(6)內(nèi)置RTC萬年歷時鐘控制電路[7]
基于以上設(shè)計需求,采用STM8L作為控制核心,其工作電源電壓范圍為1.8-3.6V,靜態(tài)功耗為幾uA,有5種低功耗模式。該電子密碼鎖設(shè)計為正常運行、Green和Halt等三種工作模式,鎖大部分時間都工作在Green和Halt模式,因此系統(tǒng)功耗很低。STM8L具有67個I/O,內(nèi)置2KBE2PROM、TNLCD驅(qū)動、RTC萬年歷時鐘等豐富的資源,因此需要外擴(kuò)的電路很少,從而能夠有效降低整體控制系統(tǒng)的成本。
TN LCD有兩個重要的參數(shù)Bias和Duty,決定了LCD的驅(qū)動方式?;诒鞠到y(tǒng)需要顯示的段數(shù)以及芯片的驅(qū)動電壓,選擇的TN LCD的驅(qū)動是1/3 Bias和1/4Duty。其對應(yīng)的驅(qū)動電壓配置電路如圖3所示。由于STM8L內(nèi)部集成了LCD驅(qū)動電路,硬件上將LCD的COM/SEG與MCU上的COM/SEG一一連接起來即可。
圖3 1/3 Bias和1/4Duty驅(qū)動電壓配置電路
本系統(tǒng)中涉及輸入的主要是數(shù)字0-9以及功能菜單“*”以及“#”按鍵,一共十二個按鍵,因此選擇3×4的矩陣鍵盤設(shè)計。由于STM8L內(nèi)部集成了上拉電阻,因此鍵盤驅(qū)動電路中不需要外接上拉電阻。
STM8L內(nèi)置2KB的E2PROM用于存儲有效性檢測字符串、動態(tài)密碼對應(yīng)的種子、同步值以及開鎖記錄。有效性檢測字符串,主要用于進(jìn)行數(shù)據(jù)有效性檢測,即每次上電檢測特定位置是否存在特殊規(guī)律的字符串,若沒有就初始化當(dāng)前的E2PROM,若有則認(rèn)為E2PROM中的數(shù)據(jù)是有效的。每條開鎖記錄保存的是當(dāng)前開鎖的日期及時間,并且以BCD碼的方式存儲,便于顯示,如0001201504011230表示0001條記錄2015年04月01日12點30分,單條記錄需要8個字節(jié),一共可以存儲200條記錄。由于前面兩個字節(jié)時作為記錄的索引,每次需要存儲新的開鎖記錄時,只要更新索引值最小的那條記錄就行。例如在當(dāng)前已有存儲是索引值0156到0355的200條記錄時,只需要在0156的位置更新0356對應(yīng)的開鎖記錄。
STM8L中內(nèi)置了RTC時鐘驅(qū)動電路,程序中對RTC相關(guān)的特殊功能寄存器進(jìn)行初始化之后,在日期以及時間對應(yīng)的特殊功能寄存器中就能夠讀取BCD碼格式的萬年歷時間。
中國教師:近年來,除新教育實驗外,“親近母語”實驗、深圳三葉草等民間組織也都在致力于推廣閱讀,您怎么評價這些民間閱讀公益組織?您覺得,還應(yīng)該集合哪些方面的力量來推廣閱讀?
門鎖驅(qū)動電路采用典型的“H橋驅(qū)動電路”,其形狀酷似字母H。具體驅(qū)動電路如圖4所示。通過置位iPMotorCntr(GPIOG0)以及清零iNMotorCntr(GPIOG1)實現(xiàn)電機的順時針轉(zhuǎn)動(即開鎖動作);通過置位iNMotorCntr(GPIOG1)以及清零iPMotorCntr(GPIOG0)實現(xiàn)電機的逆時針轉(zhuǎn)動(即關(guān)鎖動作)。
圖4 門鎖驅(qū)動電路
根據(jù)自頂向下設(shè)計原則,將系統(tǒng)分成多個功能模塊。為了減少功能模塊之間的耦合并且有效清晰地實現(xiàn)模塊之間的數(shù)據(jù)傳遞以及功能切換,因此使用了通過多態(tài)實現(xiàn)不同狀態(tài)的切換,即狀態(tài)機模式。
系統(tǒng)主要有動態(tài)密碼檢測、動態(tài)密碼設(shè)置、時間顯示,以及開鎖查詢記錄等功能。每個功能設(shè)置一種狀態(tài),并且通過狀態(tài)機的方式實現(xiàn)各個功能塊之間的切換,如圖5所示。例如在系統(tǒng)時間顯示狀態(tài)下,按Sharp按鍵就進(jìn)入了動態(tài)密碼檢測狀態(tài),此時MCU等待用戶輸入密碼。不同的觸發(fā)條件對應(yīng)不同的操作,如Sharp按鍵確認(rèn)密碼輸入完成則進(jìn)行密碼比對操作,密碼正確就顯示“Open”執(zhí)行開鎖動作,否則顯示”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}均為系統(tǒng)狀態(tài),箭頭 TimeOver6/EnterPowerDown表示在 Idle Status狀態(tài)下 TimeOver6超時觸發(fā)系統(tǒng)進(jìn)入PowerDown Mode狀態(tài),并進(jìn)行EnterPowerDown(進(jìn)入低功耗模式的系統(tǒng)配置等)操作。
圖5 系統(tǒng)狀態(tài)切換圖
用動態(tài)密碼App生成密碼后,用戶操作固定鍵盤輸入App產(chǎn)生的密碼,單片機系統(tǒng)調(diào)用動態(tài)密碼匹配子程序,驗證輸入的密碼是否匹配。Sha256算法以用戶設(shè)定的密鑰種子Seed以及同步值Sync組成的字串作為輸入,計算出信息摘要并通過異或操作產(chǎn)生動態(tài)密碼。程序根據(jù)當(dāng)前保存的同步值Sync之后連續(xù)的20個同步值產(chǎn)生可能匹配的20個動態(tài)密碼,再與當(dāng)前輸入的密碼進(jìn)行匹配,若匹配正確就更新同步值到與之匹配的同步值,并執(zhí)行開鎖動作;若是匹配不正確,再嘗試密碼匹配特征識別,若成立則認(rèn)為是有非法用戶嘗試輸入密碼,此時同步值自動更新到下一個。該子程序流程圖如圖6所示。
圖6 動態(tài)密碼匹配子程序流程圖
系統(tǒng)充分利用STM8L單片機的低功耗特性,設(shè)計為兩個功耗模式:正常模式與睡眠模式。正常模式下通過不斷對各個模塊控制權(quán)輪詢處理,完成萬年歷時鐘的計算、按鍵信息的識別、顯示控制,動態(tài)密碼的匹配等功能。程序主流程圖如圖7(a)所示。睡眠模式下主要是RTC時鐘模塊、中斷系統(tǒng)以及顯示模塊工作,其他模塊處于關(guān)閉狀態(tài)。中斷系統(tǒng)可以喚醒MCU退出睡眠模式,此時MCU根據(jù)對中斷源的判斷決定是否返回正常模式。RTC中斷喚醒MCU,此時更新LCD顯示內(nèi)容,再次進(jìn)入睡眠模式;若是按鍵中斷喚醒MCU,此時退出睡眠模式返回正常模式。睡眠喚醒子程序流程圖如圖7(b)所示。MCU絕大部分時間是處于睡眠模式的。此時電流最低到20 uA左右,可大大減少電池?fù)p耗,延長使用時間。
圖7 系統(tǒng)軟件流程圖
為了防止硬件的損壞,在電路板上電前進(jìn)行芯片的焊接方向以及芯片引腳開短路檢查。在上電無異常狀況的前提下,可以使用萬用表和示波器進(jìn)行測量,首先測量電源芯片的輸出電壓是否正常,復(fù)位電壓是否正常,然后使用示波器測量各個主要芯片電源引腳,查看電源的波形情況。確認(rèn)單片機正常之后就可以通過仿真器連接用戶板進(jìn)行調(diào)試。
軟件調(diào)試需要用到IAR For STM8、焊接好的樣板等。首先打開IAR for STM8,新建工程,新建文本框輸入程序后保存,檢查是否有語法錯誤,經(jīng)過反復(fù)檢查無誤后編譯連接,生成STM8可執(zhí)行的Hex文件。軟件部分的測試主要方法是通過設(shè)置斷點、單步執(zhí)行等方法來測試程序的正確性。
動態(tài)密碼鎖電路上電之后,先自檢E2PROM中有效性檢測字符串,若是符合設(shè)定規(guī)則,就使用指定位置的數(shù)據(jù)作為密鑰種子Seed以及同步值Sync,否則初始化當(dāng)前的E2PROM,并且恢復(fù)密鑰種子Seed(“12345”)以及同步值Sync(“999”)的出廠值并顯示“rESEt In”。在系統(tǒng)時間顯示界面,按下“#”鍵進(jìn)入密碼輸入狀態(tài),允許用戶輸入動態(tài)密碼,如圖8所示。按下“*”鍵可以清除當(dāng)前輸入的密碼。如果密碼輸入匹配成功,則顯示“-oPEn-”,同時門鎖驅(qū)動電路打開門鎖;如果密碼輸入匹配不成功,提示密碼輸入錯誤并聲光報警,連續(xù)三次密碼匹配不成功,則鎖住鍵盤3分鐘不讓用戶再次輸入密碼。門鎖打開之后,按“#”按鍵可以修改五位的密鑰種子Seed以及三位同步值Sync,第一次密鑰種子以及同步值輸入完成提示再次輸入新的密鑰種子以及同步值,若果第一次輸入與第二次輸入不同,則顯示“Set Err”提示密鑰種子及同步值修改失敗,退出當(dāng)前修改界面,若是兩次輸入一致,則顯示“InFo In”表示修改成功;按“*”可以查看開鎖歷史記錄,通過按鍵“2”或者“8”實現(xiàn)翻頁功能。
圖8 動態(tài)密碼鎖的系統(tǒng)實物圖
在系統(tǒng)設(shè)計完成后,對系統(tǒng)進(jìn)行了測試,主要參數(shù)指標(biāo)如下:
(1)系統(tǒng)動態(tài)功耗:在4.5V供電的情況下,系統(tǒng)開機瞬間動態(tài)電流為5.21mA,有按鍵觸發(fā)瞬間動態(tài)功耗是6.32mA;
(2)系統(tǒng)靜態(tài)功耗:在一定時間內(nèi)沒有事件觸發(fā),系統(tǒng)進(jìn)入低功耗模式,系統(tǒng)的靜態(tài)功耗為20.76uA。
從以上指標(biāo)可以看出,系統(tǒng)的動態(tài)功耗與靜態(tài)功耗差異極大,而系統(tǒng)絕大部分時間處于靜態(tài),即最大靜態(tài)化。因此系統(tǒng)的總功耗主要是靜態(tài)功耗,基本可以滿足電池供電系統(tǒng)的低功耗指標(biāo)要求。
針對目前國內(nèi)大多數(shù)電子鎖采用靜態(tài)密碼的方式,安全可靠性不高,而少數(shù)安全性較高的鎖成本又很高的現(xiàn)狀,設(shè)計了基于STM8L單片機的低功耗動態(tài)密碼電子鎖。該系統(tǒng)實現(xiàn)了“一次一密”的動態(tài)密碼方式,且功耗很低,大約可持續(xù)使用3~4年。此外系統(tǒng)與市面上現(xiàn)有的電子密碼鎖電路基本一致,只需要升級軟件,就能實現(xiàn)從靜態(tài)密碼鎖到動態(tài)密碼的更換,具有易開發(fā),成本低的特點。因此該電子鎖實用性很強,可應(yīng)用于住宅、辦公室的保險箱以及檔案柜等。
[1]崔巖,吳國興,顧媛媛,陸惠,殷美琳.基于FPGA的紅外遙控密碼鎖的設(shè)計[J].電子技術(shù)應(yīng)用,2013(11):44-46.
[2]董慶賀.基于GSM的防盜密碼鎖系統(tǒng)設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2011(9):64-66,73.
[3]鄒曉宇,朱濤,肖守訥.基于遠(yuǎn)程控制和三維運動的密碼鎖設(shè)計[J].工程設(shè)計學(xué)報,2014(5):476-480.
[4]韓桂明.動態(tài)口令網(wǎng)絡(luò)身份認(rèn)證系統(tǒng)的設(shè)計與實現(xiàn)[J].無線互聯(lián)科技,2012(10):78.
[5]毛淑平.ATM動態(tài)密碼電子鎖使用研究[J].軟件服務(wù)·實務(wù),2012(3):65-69.
[6]朱繼團(tuán).動態(tài)密碼在保密信息系統(tǒng)中的應(yīng)用[J].現(xiàn)代計算機,2004(6):41-44.
[7]潘永雄.STM8S系列單片機原理與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,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-),女,廣東深圳人,講師,碩士研究生,研究方向為嵌入式系統(tǒng)
2015-06-25
2015-08-24
鎖具的安全性日益受到人們的重視,而現(xiàn)有的電子鎖大都采用靜態(tài)密碼的方式。這種方式存在較大的安全隱患,即密碼易被遺忘或盜用。針對這一問題,設(shè)計一種采用動態(tài)密碼方式的電子鎖系統(tǒng)。該系統(tǒng)由產(chǎn)生動態(tài)密碼的智能設(shè)備和以單片機作為控制核心的電子鎖兩部分組成,對鎖控制系統(tǒng)進(jìn)行深入研究。首先根據(jù)功能要求進(jìn)行系統(tǒng)整體設(shè)計,在硬件電路設(shè)計上,采用單片機STM8L實現(xiàn)超低功耗控制,在軟件設(shè)計上主要通過對動態(tài)密碼的匹配與識別實現(xiàn)“一次一密”。經(jīng)過驗證系統(tǒng)能夠達(dá)到預(yù)期目標(biāo),且功耗特別低,具有很高的實用價值。
動態(tài)密碼;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.