上节咱们说到,关于opt算法的说明,也说到这个项目是使用TOTP(基于时间)方法。 算法
这节讲的主要把它怎么整合项目中。整合项目中,此算法须要注意这么几点。安全
1. 与服务器端统一的准确时间
因为是使用totp算法,客户端与服务器端的算法是必需要保存一致的。
对时接口,获取服务器端准确时间,返回{“svr_time”:1319512158},以秒为单位的时间戳。时间偏移量 = 本地时间 – 服务器端时间, 将时间偏移量保存在地SharePreference中,供计算动态密码时读取服务器端时间 = 本地时间 - 时间偏移量使用时间偏移量的好处是:只须要从服务器获取一次时间,之后均可以离线使用微盾。服务器
2. 静态密钥。
加密后静态密钥保存在本地,加密算法为DES,一种对称加密算法,支持加密解密密钥 = 固定字符串 + 设备IMEI号码
这个解密的密钥有什么做用了,是用于微盾两边安全性的提高了。这就引出一个话题,密钥的做用。公钥加密,保存在客户端 不少个,用户知道。私钥解密,保存在服务器 只有一个,只有服务器知道。这种不对称加密的方式,大大的提高了破解难度。至于你们认为,设备的IMEI号是否是画蛇添足,在之后我会专门用一篇文章论述,这里,就不作过多的赘述了。
有了这两点的分析,咱们有了一个完美的设计方案:
有了准确的服务器时间和静态密钥,就能计算出正确的6位动态密码
当用户输入动态密码登陆时,服务器会使用一样的时间和密钥算出6位密码进行比对。
服务器作了容错处理,会计算出在某个时刻前1分钟和后一分钟的全部6位密码,只要用户输入正确了其中一个,就算经过.
至于这个方法具体代码,我准备是在Google一个开源项目Google Authenticator 修改。
下面的课程,咱们将进入具体的源代码的说明。
用了3节的篇幅,说明了微盾概要设计和技术实现,不知道你们明白没,请给予反馈。