徐又又,韦政
(深圳第二高级技工学校电气技术系,深圳 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.