当前位置:首页 »“秋了秋”个人博客 » 网络技术 » 智能密码锁离线密钥配对加密解密原理剖析

智能密码锁离线密钥配对加密解密原理剖析

作者:秋了秋 发表时间:2023年03月23日

事情是这样的,前几天在淘宝买了一个指纹密码锁,200多块钱,加上安装费也就300多,便宜得简直惊掉了我的下巴。担心安全问题,问了下客服原理,一问困惑更多。以下是跟客服的对话:


指纹锁客服对话1.jpg

对话大概的意思就是在手机或者JC LOCK小程序不绑定物理设备的时候并且没有时间系统的情况下,问手机端跟指纹密码锁远距离的通讯方式,但是卖家也不是很清楚,只知道怎么操作可以设置密码可以打开门。后来回家试了下门锁的功能,洗澡的时候想了下,大概摸清了它的原理。


首先先解答下这个对话有几个误区:


误区一:

这个密码锁只能生成临时密钥,不能远程开门,一开始以为可以远程控制开门。

误区二:

小程序里面操作生成临时密钥玩的是文字游戏,临时密钥并不是小程序生成(SET)的,更正确的叫法应该是获取(GET)。

误区三:

小程序不需要跟某个物理设备绑定。JC LOCK小程序跟所有此品牌的门锁具有相同的算法机制。后面卖家也说了:

指纹锁客服对话2.jpg

误区四

门锁是有时间系统的,只是安装师傅在安装的时候“偷偷”给我设置了正确的北京时间,这个时间是离线的,所以可能会存在走偏,但不太影响最小设置单位为小时的临时密钥。


排除了误区,那么原理很快就显现出来了,小程序里面的新增智能锁其实就是算法里面的加盐,跟是不是你的锁没有半毛钱关系,它只是算法里面的一个盐。如果门锁和小程序的算法都没有这个盐,那么小程序生成的密钥可以打开所有的门,如果加了这个盐,则小程序生成的密钥必须会跟具有相同盐的其它端生成的密钥一致,而这个盐就是管理员密码。

新增密码只有三种:按小时,按天数,按次数。

新增智能锁.jpg

新增密码.jpg

写给第一次接触加盐加密算法的人看,首先先了解加密算法原理:

 

加密算法其实就是一个规则,在不泄漏规则的情况下只有设计这个规则的人怎么知道怎么解密。譬如最简单的加密算法,设置一串密码123666,如果不加密,那它就是一个明码,不需要算法。你把设置的这个密码存储到别人的服务器上,那这个密码就可以被服务器管理员或者非法访问服务器的人看到,别人拿到这个密码就可以解密你的设备。

 

在高级一点,从明码到加密那就需要一套算法(规则),设置一串密码123666,规则定好,【1其实对应的是5,2其实对应的是8,3其实对应的是6,6其实对应的是1】。根据这个规则加密后密码就是586111,服务器管理员或者非法访问服务器的人只能得到一个加密后的密码,而得不到明码,而解码需要明码来解码,即使黑客破解了存储密码的物理设备拿到了加密后的密码他也无法解密。这个举例是最简单的加密算法,实际往往一个数字对应的而不是另一个数字而是不确定位数的多位数字,在高级一点加密后得到一长串密码,最后截取固定位数某一个片段的数字作为密码。这种密码靠暴.力轮询破解几乎是不可能的。

 

再把这个加密算法原理放到门锁里面(其实适用所有的密码设备,不止门锁),程序员设计了一个算法规则,把这个规则写到门锁的硬件里面,同时把这个规则写到小程序代码里面,这样同一个密码在小程序和门锁里面生成的加密后的密码就是相等的,只要相等就能开门。这里精髓的不是加密算法,而是通讯机制,其实不需要通讯,只是它的操作让你误认为有一个通讯,其实它有一个比算法更高级的本地实时配对原理,为了便于理解以下都用明码来解释。

 

QUESION 1:

不需要通讯,那门锁怎么知道我什么时候点了手机要开始用某个密码开门了并自身也生成一个密码等着开门的人按?


ANSER:

其实加密规则里面有一个非常至关重要的东西,那就是时间,也叫做加密算法的盐,比如当前时间2023年03月23日20点30分45秒,简写就是20230323203045,生成一个1小时后就失效的密码,那截止时间就是2023年03月23日21点30分45秒,简写就是20230323213045,可以使用这两串简写数字加上算法生成密钥。如果用手机小程序设置一个1小时内的临时密码,呸,说错了,是获取一个1小时内的临时密码(门锁里面始终都有临时密码)。小程序最多可以获取255个小时内的临时密码,一个小时60分钟,一分钟60秒,如果不加盐的话,那么意味着任意时刻门锁都可以使用255*60*60=918000个“小时数”密码开门,小程序给你的密码只是一个小时内这批密码中的一个密码(获取密码那一刻的时间密码)。

 

QUESION 2:

上面提到了一个小时内有918000个“小时数”密码可以开门,门锁每秒都要使用算法生成918000个密码等着被核对吗?


ANSER:

显然这样是不现实的,电量不够它耗半年甚至一年,可能几天就没电了。正确的猜想是反过来,是门锁等着你去按,当你按完密码按#确定的时候它才计算一次,而且不是算出918000个核对,下个问题接着讲。

 

QUESION 3:

开门的时候怎么配对解码?


ANSER:

这又有一个误区,开门其实并不是配对,配对的原理是相等就会打开门,但其实应该是比较,当大于某个时间并且小于等于某个时间即可开门。比如我2023年03月23日20点30分45秒获取了一个密码20230323203045,我在2023年03月23日20点45分59秒的时候按开门,门锁就会拿着你输入的密码去跟当前时间(20230323204559)(A)和倒退一个小时前的时间(20230323194559)(B)同时比较,如果你输入的密码(20230323203045)大于B且小于等于A就能开门,由此可见使用类似20230323200045等918000个密码也能开门。

 

QUESION 4:

上面提到了时间,那么这个设备没有联网,哪来的时间系统?


ANSER:

确实没有时间系统,但是有时间,安装门锁的时候,放入电池开机的时候需要设置一个正确的实时时间,然后里面就有一个定时器根据起始时间不断算下一秒的时间,要是出现卡顿就会导致门锁时间不正确,因为不能联网不会自动校对时间,需要正常使用临时密码就必须手动把时间调对。但实际误差几乎可以忽略不计,除非发生电池电量用完或者卡机时间比较长。所以时间才是密码锁临时密码的关键性因素。

 

QUESION 5:

这样的密码还有安全可言吗?北京时间众所周知,我只要偷溜到使用智能门锁的别人家门口,输入一个一小时前的时间就能开门了,那不是所有门都可以开?


ANSER:

上面说的都是按明码来解释,实际是加密了的,而且加密算法你是不知道的,即使知道时间,你也不知道这个时间加密后的样子。门锁是要拿加密后的密码开门的,门锁收到这个密码会按照算法规则反推出时间再做比较。且这个时间只是辅助本地配对用的,而非真正的密码,顶多算加盐算法的盐,下个问题继续讲。

 

QUESION 6:

既然加密了,我得不到,但是我家跟邻居家都使用了同一款密码锁,那我是不是可以使用小程序得到一个密码开我家的门,同时也能开他家的门?


ANSER:

想法很完美,现实很残酷。这就是加盐加密算法的用途了,除了时间,还有一个管理员密码,两组数字共同决定一个密码,其中有一个是盐,即真正的密码再加一个干扰素,加强安全性的,而管理员密码就是一个盐,呸,说错了,其实管理员密码才是真正的临时密码,我家的管理员密码只有我家知道,你家是不知道的,所以你进不了别人家。

管理员密码它不止是个管理设备的密码还是一个临时密码,离谱吧,只能说新颖。管理员密码都是固定的,无论再高深的算法,恒定算法算出来的加密密码都应该是一样的,这样才能被反破译,但是它却是动态的,那怎么做到每次的临时密码都不一样,正是因为加入了时间这个盐。比如管理员密码是123456,如果加密规则是反过来一一对应,加密后的密码是654321,这是未加盐的加密算法。如果我加点盐(666)再加密呢?123666456加密后就是654111321,而这个盐它使用的是时间,所以他是动态变化的。而门锁配对的时候会从破译后的数字里面按照规则提取出时间作为失效规则,而真正比对的是管理员密码是否一样。

 

QUESION 7:

会不会有安全性问题?


ANSER:

大可不必多虑。要进你家门除了要知道管理员密码或者刚好他家的管理员密码跟你家的是一样,这已经是难于上青天了,还需要天时地利人和,需要他使用了和你家一样的门锁,十几亿人他必须是你的邻居或者知道你的住址这个概率有多低。这个破解难度比传统锁强上万倍不止,费这么大劲开你家门都不如买个手榴弹直接爆破。

 

QUESION 8:

小程序里面获取的临时密码有三种类型:小时数、次数、天数。小时数和天数都和时间相挂钩这个好理解,那按次数的临时密码是什么原理?


ANSER:

其实实现起来很简单,门锁设置管理员密码的时候就生成了255个静态密码,对应1~255次失效,每次更改管理员密码都重新生成,写入到硬件设备。比如小程序获取了一个2次的临时密码,小程序会根据组合数字202303232045(时间)+ 123456(管理员密码)+ 2(次数)加密后生成一个密钥。当你在门锁端输入密码按#开门的时候,就拿门锁破译出来的数字提取出管理员密码和次数重新生成一组加密密码跟生成出来的255个密码比对。如果能对上其中一个就开门,并且记录下开门时候的这个密码,之后每次使用相同的密码开门都会次数减1,直到减为0就不能开门了,需要小程序重新获取密码,而重新获取的密码跟上次都不一样原因就是时间(盐)不一样,其实门锁破译出来还是一个样,使用完之后之所以不认之前的密码完全就是芯片记忆功能。

 

小门锁大门道,以上只是猜测,并且符合程序实现逻辑,如有不对请指教。从零到有设计出这种离线门锁也是很牛x的,特别适合出租屋,省了拉宽带网络长期在线的要求。低成本高安全。


10
文章作者: “秋了秋”个人博客,本站鼓励原创。
转载请注明本文地址:http://netblog.cn/blog/392.html

请求播放音乐,请点击播放

登 录
点击获取验证码
还没账号?点击这里