本发明涉及智能门锁领域,尤其涉及一种一次性临时密码生成机制。
背景技术:
在智能门锁领域,存在户主未在房中,而有临时访客访问场景,针对该场景,若将户主常用密码告知临时访客,常用密码的传输会造成极大的安全隐患。为了解决该问题,本发明通过使用app直接向临时密钥分发系统申请临时密码,获取临时密码后,访客通过数字键输入临时密码,门锁验证成功后,门锁将打开。该机制中,无需传输户主常用密码,密码由临时密钥分发系统临时生成临时有效,安全性高。
技术实现要素:
为解决以上技术问题,本发明提供一种智能门锁一次性临时密码生成方法以及一种智能门锁临时用户开锁方法。
本发明采用以下技术方案:
一种智能门锁一次性临时密码生成方法,包括以下步骤:
a)临时密钥分发系统获取从app发起的申请临时密码请求;
b)临时密钥分发系统比较当前时间与基准时间的差值,计算得到tid值;
c)临时密钥分发系统根据存储在临时密钥分发系统中的智能门锁设备信息对tid值加密计算得到密文及tag值;并将密文及tag值通过运算得到临时密码;
d)临时密钥分发系统对app下发生成的临时密码。
进一步,所述tid值计算方法如下:当前时间与基准时间的差值除以20min所得值,tid值长度为20bit。比如当前时间为2019年1月1日2点,基准时间为2019年1月1日0点,则tid(20bit)为120min/20min=6,则对应的tid值是将6(当前时间与基准时间的差值除以20min所得值),转换为20bit的二进制值为00000000000000000110bit。
再进一步,若20min内临时密钥分发系统获取从app发起的申请临时密码的多次请求,则将当前时间与基准时间的差值除以20min所得值加1后转换为20bit的二进制值作为新tid值。确保不同的临时密码使用不同的tid值。比如当前时间为2019年1月1日2点10分又一次收到申请临时密码的请求,则tid(20bit)为120min/20min+1=7,则对应的tid值为00000000000000000111bit。
进一步,所述智能门锁设备信息为门锁序列号和出厂前门锁内已配置的ek密钥(encryptionkey,16字节)。
进一步,每个门锁的ek密钥不同,如果临时密钥分发系统不便存储各个门锁的ek密钥,也可通过对门锁序列号进行hash(哈希)算法得到的值作为所述ek密钥,这样临时密钥分发系统需要ek密钥时可以临时生成。
进一步,所述对tid值根据存储在临时密钥分发系统中的智能门锁设备信息加密计算得到密文及tag值为:根据门锁序列号和出厂前门锁内已配置的ek密钥,对tid值进行aes-gcm-128加密后得到20bit的密文及12字节的tag值。
进一步,所述临时密码=密文(20bit)||tag值的高6bit,并将所得临时密码转为十进制并补齐8位,高位补0。
一种智能门锁临时用户开锁方法,包括:
临时用户通过app向临时密钥分发系统发起获取临时密码的请求;
临时密钥分发系统根据权利要求1~7之一所述生成所述临时密码并对app下发临时密码;
临时用户获取临时密码并在智能门锁上输入临时密码;
智能门锁检测输入的临时密码是否正确,如果正确则开锁成功,否则,智能门锁提示密码错误。
进一步,所述智能门锁检测输入的临时密码是否正确具体为:智能门锁判断输入密码长度是否为8位,如果是,则将密码转成十六进制,使用aes-gcm-128解密高20bit并验证低6bit的tag值,校验出错则提示密码错误;校验正确则检查解密后的tid值是否大于当前锁内保存的tid值,是则开锁成功,并更新当前的tid值,否则提示密码错误。
进一步,所述临时用户通过身份认证后才能通过app向系统临时密钥分发系统发起获取临时密码的请求。
与现有技术相比,本发明具有以下优点:
(1)本发明通过使用app直接向临时密钥分发系统申请临时密码,获取临时密码后,访客通过数字键输入临时密码,门锁验证成功后,门锁将打开。该机制中,无需传输户主常用密码,密码由临时密钥分发系统临时生成临时有效,安全性高。
(2)引入tid值作为临时密码产生时进行加密的一个输入因子,可以确保临时密码的唯一性。确保临时密码不会被重复攻击。
(3)tid值计算方式间隔为20min的周期内不重复产生临时密钥的情况下,该算法可支持39年产生的临时密钥不同。即使临时密钥产生周期比较密集,也可确保较长周期内临时密钥不重复。
(4)本发明设计的临时密码计算方法,产生的临时密码为8位十进制数字,不会因密码长度过长,带来用户输入的不便,同时该算法中使用的加密算法包含了门锁序列号,tid值等输入因子,确保了临时密码的安全性、唯一性。
(5)智能门锁只要支持密码开锁即可实现本发明的方案,无需联网。
附图说明
图1为本发明的工作流程图。
图2为本发明的临时密码生成机制图。
具体实施方式
为了便于理解本发明技术方案,以下结合附图与具体实施例进行详细说明。
如图1、2所示,
一种智能门锁一次性临时密码生成方法,包括以下步骤:
a)临时密钥分发系统获取从app发起的申请临时密码请求。
b)临时密钥分发系统比较当前时间与基准时间的差值,引入tid值作为密码因子。tid值计算公式为:当前时间与基准时间的差值除以20min所得值,tid值长度为20bit。比如当前时间为2019年1月1日2点,基准时间为2019年1月1日0点,则tid(20bit)为120min/20min=6,则对应的tid值为00000000000000000110bit。
若20min内临时密钥分发系统获取从app发起的申请临时密码的多次请求,则将原tid(20bit)加1作为新的tid(20bit),也就是当前时间与基准时间的差值除以20min所得值加1后转换为20bit的二进制值作为新的tid值,确保不同的临时密码使用不同的tid值。比如当前时间为2019年1月1日2点10分又一次收到申请临时密码的请求,则tid(20bit)为120min/20min+1=7,则对应的tid值为00000000000000000111bit。
c)根据门锁序列号和出厂前门锁内已配置的ek密钥,对tid值进行aes-gcm-128加密后得到20bit的密文及12字节的tag值,并将密文及tag值通过运算得到临时密码。
如图2所示,四个输入因子iv、add、ek密钥、tid值通过aes-gcm-128算法加密后得到20bit的密文及12字节的tag值。其中,iv、add都是基于门锁序列号,不同的是iv固定为12字节,在不足或多余12字节时,仅采用12字节,而add则为实际的门锁序列号信息。aes-gcm-128算法对应的原文与密文长度相同,所以如果原始tid值为20bit,则加密后仍为20bit。该算法对应的tag值为固定16字节,取前12字节。
得到20bit的密文及12字节的tag值后,所述临时密码(16进制,26bit)=密文(20bit)||tag值的高6bit,并将所得临时密码转为十进制并补齐8位(高位补0)。此处“||”表示级联,即字符串连接。
下面举例说明:
tid20bit后面补4bit的0变成:001120
门锁序列号12字节:001122334455667000000000
ak16字节:00112233445566700011223344556670
ek16字节:000102030405060708090a0b0c0d0e0f
密文:899afb
tag:a79728d6fedcff620d23dc86
则,临时密码为:000000||密文的高20bit||tag的高6bit=0x02266be9
00000010001001100110101111101001=0x02266be9,转为十进制并补齐8位后得到临时密码36072425。
d)临时密钥分发系统对app下发生成的临时密码。通过上述方法可生成唯一的、不重复的、安全性高的临时密码。
本发明还提供一种智能门锁临时用户开锁方法,包括:
临时用户通过身份认证后,通过app向临时密钥分发系统发起获取临时密码的请求;
临时密钥分发系统生成的所述临时密码,并对app下发临时密码;
临时用户获取临时密码并在智能门锁上通过门锁键盘手动输入8位十进制的临时密码;
智能门锁判断输入密码长度是否为8位,如果是,则将密码转成十六进制,使用aes-gcm-128解密高20bit并验证低6bit的tag值,校验出错则提示密码错误;校验正确则检查解密后的tid值是否大于当前锁内保存的tid值,是则开锁成功,并更新当前的tid值,否则提示密码错误。锁内保存的tid(20bit)初始值为0,对应的tid值为0的20bit的二进制值。
为了防止任意无关访客都能申请临时密码,确保临时密码的安全性,在app中申请临时密码时,需登录或注册账号,会有相应的用户名、密码验证作为临时用户身份认证。验证方式有很多种,如验证时与主人的手机号相关联,app向主人手机发送验证码,临时用户向主人索取验证码后才能登陆app使用申请临时密码的权限。
以上仅是本发明的优选实施方式,本发明的保护范围以权利要求所限定的范围为准,本领域技术人员在不脱离本发明的精神和范围内做出的若干改进和润饰,也应视为本发明的保护范围。