本发明涉及计算机技术,尤其涉及一种通信安全防护方法、装置和系统。
背景技术:
通常,物联网公司开发开放云平台,参见图1所示,第三方应用通过http client操作开放云平台提供的资源;设备实现OneNet提供的RestFUL接口,将业务数据封装成开放平台要求的格式传输到OneNet进行存储。第三方应用需要业务数据时,通过RestFUL接口获取。
参见图2所示,平台提供设备(device)、数据流(datastream)、数据点(datapoint)、触发器(trigger)、API key等资源,通过REST API可以对平台进行增删查改操作。
每个平台用户,可以创建自己的设备列表,设定设备相关属性;每个设备下,可以创建多个数据流;数据流是某一类按时间顺序存储的数据点;数据点则是以时间戳为key,任意json数据类型为value的key-value对;针对每个数据流,可设定对数据点进行监控的触发器;Key是用来规定用户是否具有操作相关资源的权限,细化到数据流级别;使用标准HTTP方法实现资源操作。
现有技术中根据规范说明,参见图3所示,API key以“api-key:xxxx-ffff-zzzzz”的格式放在HTTP头部信息中,以明文方式发送。根据设计原理,API key是用于物联网OneNet云平台鉴别物联网终端设备身份的密钥。但该密钥通过明文方式发送,在攻击者截获相关消息时,可直接解析获得API key,进而攻击者可以使用同样的API key冒充物联网终端发送虚假消息,从而使得物联网OneNet云平台收到错误的反馈信息或者请求。
传统的解决方案是对API key进行加密,但是加密之后将无法解决设备识别的问题,并且会面临消息被截获后被重放的问题。
或者传统的解决方案是通过挑战/响应类流程完成对用户身份的验证之后,再通过同时产生的会话密钥对后续消息进行保护。但是,这种方法将带来额外的流程与密钥的计算,将会导致设备额外的开销,对于物联网的终端这种资源受限的设备代价巨大。
技术实现要素:
为解决现有存在的技术问题,本发明实施例提供一种通信安全防护方法、装置和系统。
本发明实施例提供一种通信安全防护方法,应用于物联网,所述方法包括:
终端根据预设的第一规则生成特定的参数Para;
根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;
所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;
根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;
将所述验证值与所述第一信息中的所述摘要消息进行对比;
当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
其中,所述方法还包括:
所述服务器判断所述第一信息中的所述Para是否满足预设的条件;
当所述Para不满足预设的条件时,确定所述第一信息为重放的信息;
当所述Para满足预设的条件时,进行根据所述第一信息中的所述Device ID获取预存的API Key的步骤。
其中,所述方法还包括:
所述终端根据预设的第二规则生成第一随机数RAND;
相应的,所述生成摘要消息包括:
根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息;
所述计算得到验证值包括:
根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值。
其中,所述方法还包括:
检测所述终端的状态;
当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;
根据API Key和所述KDF_p,生成密钥;
相应的,所述生成摘要消息包括:
根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息;
所述计算得到验证值包括:
根据所述预存的API Key和所述KDF_p,生成验证密钥;
根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值。
其中,所述生成摘要消息包括:
通过HMAC函数生成摘要消息。
本发明实施例提供一种通信安全防护方法,应用于物联网,所述方法包括:
终端根据预设的第一规则生成特定的参数Para;
根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。
其中,所述方法还包括:
所述终端根据预设的第二规则生成第一随机数RAND;
相应的,所述生成摘要消息包括:
根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值,以对所述第一信息进行鉴权。
其中,所述方法还包括:
检测所述终端的状态;
当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;
根据API Key和所述KDF_p,生成密钥;
相应的,所述生成摘要消息包括:
根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key和所述KDF_p,生成验证密钥;并根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值,以对所述第一信息进行鉴权。
本发明实施例另一种通信安全防护方法,应用于物联网,所述方法包括:
服务器接收终端发来的第一信息;所述第一信息包括:API Key、特定的参数Para、所要传递的消息Payload和摘要消息;所述参数Para是所述终端根据预设的第一规则生成的,所述摘要消息是根据所述API Key、所述Payload以及所述Para生成的;
根据所述第一信息中的Device ID获取预存的API Key;
根据所述预存的API Key、所述第一信息中的Payload和Para,计算得到验证值;
将所述验证值与所述第一信息中的摘要消息进行对比;
当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
其中,所述方法还包括:
所述服务器判断所述第一信息中的所述Para是否满足预设的条件;
当所述Para不满足预设的条件时,确定所述第一信息为重放的信息;
当所述Para满足预设的条件时,进行根据所述第一信息中的所述Device ID获取预存的API Key的步骤。
本发明实施例再一种通信安全防护系统,应用于物联网,所述系统包括终端和服务器:
所述终端,用于根据预设的第一规则生成特定的参数Para;根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给所述服务器;
所述服务器,用于根据所述第一信息中的所述Device ID获取预存的API Key;根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;将所述验证值与所述第一信息中的所述摘要消息进行对比;当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
本发明实施例提供一种终端,应用于物联网,所述终端包括:
第一生成单元,用于根据预设的第一规则生成特定的参数Para;
第二生成单元,用于根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
第三生成单元,用于根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息
发送单元,用于将所述第一信息发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。
其中,所述终端还包括:
第四生成单元,用于根据预设的第二规则生成第一随机数RAND;
相应的,所述第二生成单元:用于根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
所述第三生成单元:用于根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值,以对所述第一信息进行鉴权。
其中,所述终端还包括:
检测单元,用于检测所述终端的状态;
第五生成单元,用于当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;根据API Key和所述KDF_p,生成密钥;
相应的,所述第二生成单元:用于根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
所述第三生成单元:用于根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key和所述KDF_p,生成验证密钥;并根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值,以对所述第一信息进行鉴权。
本发明实施例提供一种服务器,应用于物联网,所述服务器包括:
接收单元,用于接收终端发来的第一信息;所述第一信息包括:API Key、特定的参数Para、所要传递的消息Payload和摘要消息;所述参数Para是所述终端根据预设的第一规则生成的,所述摘要消息是根据所述API Key、所述Payload以及所述Para生成的;
获取单元,用于根据所述第一信息中的Device ID获取预存的API Key;
计算单元,用于根据所述预存的API Key、所述第一信息中的Payload和Para,计算得到验证值;
对比单元,将所述验证值与所述第一信息中的摘要消息进行对比;
确定单元,用于当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
其中,所述服务器还包括:
判断单元,用于判断所述第一信息中的所述Para是否满足预设的条件;
所述确定单元,还用于当所述Para不满足预设的条件时,确定所述第一信息为重放的信息;当所述Para满足预设的条件时,控制获取单元执行根据所述第一信息中的所述Device ID获取预存的API Key的操作。
由上可知,本发明实施例的技术方案包括:终端根据预设的第一规则生成特定的参数Para;根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;将所述验证值与所述第一信息中的所述摘要消息进行对比;当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。由此,本发明实施例能够有效解决API key被泄露的问题,保证通信安全。
附图说明
图1为云平台与第三方应用交互的工作原理示意图;
图2为云平台的工作原理示意图;
图3为现有技术中API key的发送示意图;
图4为本发明提供的一种通信安全防护方法的第一实施例的实现流程图;
图5为本发明提供的一种通信安全防护方法的第二实施例的实现流程图;
图6为本发明提供的一种通信安全防护方法的第三实施例的实现流程图;
图7为本发明提供的一种通信安全防护方法的第四实施例的实现流程图;
图8为本发明提供的另一种通信安全防护方法的实施例的实现流程图;
图9为本发明提供的再一种通信安全防护方法的实施例的实现流程图;
图10为本发明提供的一种通信安全防护系统的实施例的结构示意图;
图11为本发明提供的一种终端的实施例的结构示意图;
图12为本发明提供的一种服务器的实施例的结构示意图;
图13为本发明实施例提供的信息发送示意图。
具体实施方式
本发明提供的一种通信安全防护方法的第一实施例,如图4所示,应用于物联网,所述方法包括:
步骤401、终端根据预设的第一规则生成特定的参数Para;
这里,本文中所述终端可以是物联网终端。
步骤402、根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
具体的,可以根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,通过HMAC函数生成摘要消息。如,HMAC(Payload,API Key,Para)。
步骤403、根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;
具体的,所述第一信息可以表示为Message(Device ID,Payload,Para,HMAC(Payload,API Key,Para))。
这里,本文中所述服务器可以是物联网OneNet平台。
步骤404、所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;
这里,所述Device ID可以和所述API Key对应设置。
步骤405、根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;
步骤406、将所述验证值与所述第一信息中的所述摘要消息进行对比;
步骤407、当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
由此,本发明实施例提供的技术方案能够有效解决API key被泄露的问题,保证通信安全。
本发明提供的一种通信安全防护方法的第二实施例,如图5所示,应用于物联网,所述方法包括:
步骤501、终端根据预设的第一规则生成特定的参数Para;
步骤502、根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
具体的,可以根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,通过HMAC函数生成摘要消息。
步骤503、根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;
步骤504、所述服务器判断所述第一信息中的所述Para是否满足预设的条件;当所述Para满足预设的条件时,进入步骤505;当所述Para不满足预设的条件时,进入步骤509;
在实际应用中,终端与服务器各自设置一个列表,终端的列表存储不同的Para,服务器的列表用于存储终端发来的通过鉴权的第一信息中的Para,服务器的列表初始为空。
终端依次从其列表中选取Para。当确定所述第一信息通过验证时,所述服务器按照预设的第二规则记录所述Para;
具体的,所述判断所述第一信息中的所述Para是否满足预设的条件可以包括:
判断所述第一信息中的所述Para与所述服务器记录的Para是否相同,当相同时,则确定是重放攻击。
或者,在实际应用中,终端与服务器各自设置一个列表,终端的列表存储不同的Para,Para按照时间或者次数同步增长;服务器的列表(初始为空)用于存储终端发来的通过鉴权的第一信息中的Para。
终端依次从其列表中选取Para。当确定所述第一信息通过验证时,所述服务器按照预设的第二规则记录所述Para;
具体的,所述判断所述第一信息中的所述Para是否满足预设的条件可以包括:
判断所述第一信息中的所述Para与所述服务器记录的Para是否相同或者更小,当相同或更小时,则确定是重放攻击。
步骤505、所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;
步骤506、根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;
步骤507、将所述验证值与所述第一信息中的所述摘要消息进行对比;
步骤508、当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过,结束本次流程。
步骤509、确定所述第一信息为重放的信息,结束本次流程。
由此,本发明实施例提供的技术方案能够根据Para快速判断所述第一信息是否是重放攻击,有效保证通信安全。
本发明提供的一种通信安全防护方法的第三实施例,应用于物联网,如图6所示,所述方法包括:
步骤601、终端根据预设的第一规则生成特定的参数Para;
步骤602、所述终端根据预设的第二规则生成第一随机数RAND;
步骤603、根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
具体的,可以根据API Key、所要传递的消息Payload、所述Para以及所述RAND,通过HMAC函数生成摘要消息。如,HMAC(Payload,API key,Para||RAND)。
步骤604、根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息并发送给服务器;
具体的,所述第一信息可以表示为Message(Device ID,Payload,Para||RAND,HMAC(Payload,API key,Para||RAND))。
步骤605、所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;
步骤606、根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值。
步骤607、将所述验证值与所述第一信息中的所述摘要消息进行对比;
步骤608、当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
由此,本发明实施例提供的技术方案还能够使用随机数RAND避免API key泄露,进一步保证通信安全。
本发明提供的一种通信安全防护方法的第四实施例,应用于物联网,如图7所示,所述方法包括:
步骤701、终端根据预设的第一规则生成特定的参数Para;
步骤702、检测所述终端的状态;
步骤703、当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;
这里,所述第一状态是指第一次发送KDF_p,即物联网终端产生第一条消息时。可以理解的是,非第一次发送KDF_p可以是第二状态,即物联网终端产生第一条之后的消息时。
当网络侧收到第一条消息后,取出KDF_p并保存,随后,当物联网终端发送其他消息时,则利用已经保存的KDF_p进行计算。
当网络侧收到消息后,根据消息是否保存有KDF_p判断是否为第一条消息,若无则直接取出保存的对应终端的KDF_p进行计算。
步骤704、根据API Key和所述KDF_p,生成密钥;
步骤705、根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
具体的,根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,通过HMAC函数生成摘要消息,如,HMAC(Payload,f(API key,KDF_p),Para||KDF_p)。
步骤706、根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息并发送给服务器;
这里,所述第一信息可以表示为Message(Device ID,Payload,Para||KDF_p,HMAC(Payload,f(API key,KDF_p),Para||KDF_p))。
步骤707、所述服务器判断所述第一信息中的所述Para是否满足预设的条件;当所述Para满足预设的条件时,进入步骤708;当所述Para不满足预设的条件时,进入步骤713;
步骤708、所述服务器根据所述第一信息中的所述Device ID获取预存的API Key;
步骤709、根据所述预存的API Key和所述KDF_p,生成验证密钥;
步骤710、根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值。
步骤711、将所述验证值与所述第一信息中的所述摘要消息进行对比;
步骤712、当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过,结束本次流程。
步骤713、确定所述第一信息为重放的信息,结束本次流程。
这里,需要说明的是,当服务器收到第一条第一信息并鉴权通过后,保存其中的KDF_p,当收到所述终端随后发送的其他消息时,则利用已经保存的KDF_p计算验证密钥并计算验证值。
不难理解,非第一次的第一信息为:Message(Device ID,Payload,Para,HMAC(Payload,f(API key,KDF_p),Para))
由此,本发明实施例提供的技术方案还能够使用随机参数KDF_p避免API key泄露,进一步保证通信安全。
本发明提供的另一种通信安全防护方法的实施例,应用于物联网,参见图8所示,所述方法包括:
步骤801、终端根据预设的第一规则生成特定的参数Para;
步骤802、根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
步骤803、根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。
在一实施例中,所述方法包括:
步骤801、终端根据预设的第一规则生成特定的参数Para;
步骤802、根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
步骤803、根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。此外,所述方法还包括:
所述终端根据预设的第二规则生成第一随机数RAND;
相应的,所述生成摘要消息包括:
根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值,以对所述第一信息进行鉴权。
在一实施例中,所述方法包括:
步骤801、终端根据预设的第一规则生成特定的参数Para;
步骤802、根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
步骤803、根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。此外,所述方法还包括:
检测所述终端的状态;
当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;
根据API Key和所述KDF_p,生成密钥;
相应的,所述生成摘要消息包括:
根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
所述生成第一信息包括:
根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key和所述KDF_p,生成验证密钥;并根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值,以对所述第一信息进行鉴权。
本发明提供的再一种通信安全防护方法的实施例,应用于物联网,参见图9所示,所述方法包括:
步骤901、服务器接收终端发来的第一信息;所述第一信息包括:API Key、特定的参数Para、所要传递的消息Payload和摘要消息;所述参数Para是所述终端根据预设的第一规则生成的,所述摘要消息是根据所述API Key、所述Payload以及所述Para生成的;
步骤902、根据所述第一信息中的Device ID获取预存的API Key;
步骤903、根据所述预存的API Key、所述第一信息中的Payload和Para,计算得到验证值;
步骤904、将所述验证值与所述第一信息中的摘要消息进行对比;
步骤905、当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
在一实施例中,所述方法还包括:
所述服务器判断所述第一信息中的所述Para是否满足预设的条件;
当所述Para不满足预设的条件时,确定所述第一信息为重放的信息;
当所述Para满足预设的条件时,进行根据所述第一信息中的所述Device ID获取预存的API Key的步骤。
本发明提供的一种通信安全防护系统的实施例,应用于物联网,参见图10所示,所述系统包括终端和服务器:
所述终端1001,用于根据预设的第一规则生成特定的参数Para;根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息并发送给所述服务器;
所述服务器1002,用于根据所述第一信息中的所述Device ID获取预存的API Key;根据所述预存的API Key、所述第一信息中的所述Payload和所述Para,计算得到验证值;将所述验证值与所述第一信息中的所述摘要消息进行对比;当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
本发明提供的一种终端的实施例,应用于物联网,参见图11所示,所述终端包括:
第一生成单元1101,用于根据预设的第一规则生成特定的参数Para;
第二生成单元1102,用于根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
第三生成单元1103,用于根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息
发送单元1104,用于将所述第一信息发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。
在一实施例中,所述终端包括:
第一生成单元1101,用于根据预设的第一规则生成特定的参数Para;
第二生成单元1102,用于根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
第三生成单元1103,用于根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息
发送单元1104,用于将所述第一信息发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。此外,所述终端还包括:
第四生成单元1105,用于根据预设的第二规则生成第一随机数RAND;
相应的,所述第二生成单元:用于根据API Key、所要传递的消息Payload、所述Para以及所述RAND,生成摘要消息;
所述第三生成单元1103:用于根据所述终端的标识Device ID、所述Payload、所述Para、所述RAND以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key、所述第一信息中的所述Payload、所述Para和所述RAND,计算得到验证值,以对所述第一信息进行鉴权。
在一实施例中,所述终端包括:
第一生成单元1101,用于根据预设的第一规则生成特定的参数Para;
第二生成单元1102,用于根据应用程序编程接口密钥API Key、所要传递的消息Payload以及所述Para,生成摘要消息;
第三生成单元1103,用于根据所述终端的标识Device ID、所述Payload、所述Para以及所述摘要消息,生成第一信息
发送单元1104,用于将所述第一信息发送给服务器;以使所述服务器根据所述第一信息中的信息对所述第一信息进行鉴权。此外,所述终端还包括:
检测单元1106,用于检测所述终端的状态;
第五生成单元1107,用于当所述终端处于第一状态时,根据预设的第三规则生成第二随机参数KDF_p;根据API Key和所述KDF_p,生成密钥;
相应的,所述第二生成单元1102:用于根据所述密钥、所要传递的消息Payload、所述Para以及所述KDF_p,生成摘要消息;
所述第三生成单元1103:用于根据所述终端的标识Device ID、所述Payload、所述Para、所述KDF_p以及所述摘要消息,生成第一信息;以使所述服务器能够根据所述预存的API Key和所述KDF_p,生成验证密钥;并根据所述验证密钥、所述第一信息中的所述Payload、所述Para和所述KDF_p,计算得到验证值,以对所述第一信息进行鉴权。
实际应用中,上述各单元可由终端中的中央处理器(CPU,Central Processing Unit)、数字信号处理器(DSP,Digital Signal Processor)、或现场可编程门阵列(FPGA,Field-Programmable Gate Array)实现。
本发明提供的一种服务器的实施例,应用于物联网,参见图12所示,所述服务器包括:
接收单元1201,用于接收终端发来的第一信息;所述第一信息包括:API Key、特定的参数Para、所要传递的消息Payload和摘要消息;所述参数Para是所述终端根据预设的第一规则生成的,所述摘要消息是根据所述API Key、所述Payload以及所述Para生成的;
获取单元1202,用于根据所述第一信息中的Device ID获取预存的API Key;
计算单元1203,用于根据所述预存的API Key、所述第一信息中的Payload和Para,计算得到验证值;
对比单元1204,将所述验证值与所述第一信息中的摘要消息进行对比;
确定单元1205,用于当所述验证值与所述摘要消息匹配时,确定所述第一信息鉴权通过。
在一实施例中,所述服务器还包括:
判断单元1206,用于判断所述第一信息中的所述Para是否满足预设的条件;
所述确定单元1205,还用于当所述Para不满足预设的条件时,确定所述第一信息为重放的信息;当所述Para满足预设的条件时,控制获取单元执行根据所述第一信息中的所述Device ID获取预存的API Key的操作。
实际应用中,上述各单元可由服务器中的中央处理器(CPU,Central Processing Unit)、数字信号处理器(DSP,Digital Signal Processor)、或现场可编程门阵列(FPGA,Field-Programmable Gate Array)实现。
下面结合具体实施例、应用场景和附图对本发明实施例进行进一步介绍。
本发明实施例涉及物联网终端,物联网OneNet平台以及相关设备。
本发明实施例的主要技术方案在于改变API Key明文传递的方法,使得攻击者无法获得API key。与此同时,还能够保证OneNet平台可以有效鉴别物联网终端设备的身份。所以,在本发明实施例中在物联网终端与OneNet平台通信的时候,物联网终端通过消息中的Device ID标识终端,待发送的消息,以及利用API key直接或者间接对消息的处理摘要一并发送给网络侧。网络侧再利用同样的API key对摘要进行验证。并在随后的过程中按照同样的格式发送消息。
为此,在物联网终端设备与OneNet平台之间的消息传输方式变为:
1、设定设备ID(Device ID),用Device ID标识物联网终端,同时将Device ID与终端API key绑定。
2、在物联网终端与OneNet平台通信的时候,物联网终端在产生消息时,不再直接写入API key,而是:
A、在消息中增加Device ID,
B、产生特定的参数Para
C、根据API key,Para,以及所要传递的消息Payload产生摘要信息
然后终端将上述信息连同Payload一起组合成新的消息
3、终端将该消息发送至网络侧,此时,用来标记消息发送者的API key变为了Device ID。
4、网络侧在收到消息后,需要根据取代API key标识消息来源的Device ID确定发送者,然后从本地获得对应的API key,再根据相应的规则判断消息中所携带的Para是否可以接受。如果不可以接受,即认为消息为重放的消息,中止处理过程。如果可以接受,再利用消息中的Payload和Para计算验证值,最终与消息中携带的摘要信息进行对比,相同则通过验证。并按照相应的规则记录Para。
Para参数是为了保证消息不被第三方截获后重放,因此需要在摘要中附加相关的参数以避免重放攻击。
在消息产生过程中,API key的处理可以具有以下不同的实施例:
实施例1:利用API key直接对消息进行处理,因此消息体具体为:
Message(Device ID,Payload,Para,HMAC(Payload,API Key,Para))
即物联网终端在产生消息时,参见图13所示,在消息中写入Device ID,产生特定的参数Para,根据API key,Para,以及所要传递的消息Payload通过HMAC函数产生摘要信息H(即H=HMAC(Payload,API Key,Para))。然后终端将上述信息连同Payload一起组合成新的消息
当网络侧收到消息后,根据同样的算法计算出H’=HMAC(Payload,API Key,Para),对比H与H’,如果一致则认为消息正确,否则直接丢弃该消息
实施例2:为了避免API key的大量重复使用导致API key被破解,可以采用额外增加随机数的方式避免API key被泄露,因此消息体具体为:
Message(Device ID,Payload,Para||RAND,HMAC(Payload,API key,Para||RAND))
即物联网终端在产生消息时,在消息中写入Device ID,产生特定的参数Para,以及随机产生的随机数RAND。终端根据API key,Para,RAND以及所要传递的消息Payload通过HMAC函数产生摘要信息H。然后终端将上述信息连同Payload一起组合成新的消息。
当网络侧收到消息后,根据同样的算法计算出H,对比H与H’,如果一致则认为消息正确,否则直接丢弃该消息
实施例3:为了避免API key的大量重复使用导致API key被破解,可以采用利用API key产生会话密钥并在第一次将密钥产生参数发送过去的方式避免API key被泄露,因此消息体具体为:
第一次:Message(Device ID,Payload,Para||KDF_p,HMAC(Payload,f(API key,KDF_p),Para||KDF_p))
非第一次:Message(Device ID,Payload,Para,HMAC(Payload,f(API key,KDF_p),Para))
即物联网终端在产生第一条消息时,首先产生随机参数KDF_p并保存,然后利用API key和KDF_p,计算产生新的密钥f(API key,KDF_p),在消息中写入Device ID,产生特定的参数Para,以及随机产生的随机参数KDF_p。终端根据API key,Para,KDF_p,以及所要传递的消息Payload通过HMAC函数产生摘要信息H。然后终端将上述信息连同Payload一起组合成新的消息。
当网络侧收到第一条消息后,取出KDF_p并保存,然后同样计算f(API key,KDF_p)根据同样的算法计算出H,对比H与H’,如果一致则认为消息正确,否则直接丢弃该消息。
随后,当物联网终端发送其他消息时,则利用已经保存的KDF_p计算产生密钥f(API key,KDF_p)并计算H。
当网络侧收到消息后,根据消息是否保存有KDF_p判断是否为第一条消息,若无则直接取出保存的对应终端的KDF_p计算H’,对比H与H’,如果一致则认为消息正确,否则直接丢弃该消息。
针对抗重放攻击的参数设计,可以具有不同的实施例:
实施例1:M2M终端与OneNet云平台各自保留一个固定长度的列表,用于存储发送过来的参数Para,并在收到新的Para与保留的参数进行对比,如果相同,则认为是重放攻击。当列表保留Para已满之后,则新接收到的不同的Para覆盖列表中最早接收到的Para,如下所示:
OneNet平台(假设列表长度为5):
接收到消息前:list(NULL,NULL,NULL,NULL,NULL)
接收到第一条消息:list(Para1,NULL,NULL,NULL,NULL)
接收到第二条消息:首先判断Para2<>Para1,否则判断重放,拒绝消息。然后list变为(Para1,Para2,NULL,NULL,NULL)
接收到第三条消息:list(Para1,Para2,Para3,NULL,NULL)
以此类推
接收到第五条消息:list(Para1,Para2,Para3,Para4,Para5)
接收到第六条消息:list(Para6,Para2,Para3,Para4,Para5)
接收到第七条消息:list(Para6,Para7,Para3,Para4,Para5)
以此类推,此处不再赘述。
实施例2:M2M终端与OneNet云平台各自保留一个列表,用于存储发送过来的参数Para并保留一定的时间,并在收到新的Para与保留的参数进行对比,如果相同,则认为是重放攻击。当列表保留Para时间到期,则从列表中移除。如下所示:
OneNet平台(假设列表设定时间为60秒):
接收到消息前:list()
接收到第一条消息:list(Para1:60)
2秒后接收到第二条消息:首先判断Para2<>Para1,否则判断重放,拒绝消息。然后list变为(Para1:58,Para2:60,)
以此类推
第59秒接收到第n条消息:list(Para1:1,Para2:3,…,Para_n:60)
第60秒后删除到期的参数:list(Para2:2,…,Para_n:59)
第62秒后删除到期的参数:list(Para3:x,…,Para_n:57)
以此类推,此处不再赘述。
实施例3:参数Para按照时间或者次数同步增长,保留参数并用于比较,并在收到新的Para与保留的参数进行对比,如果接收到的Para比保存的相同或者更小,则认为是重放攻击。如下所示:
OneNet平台(假设列表设定时间为60秒):
接收到消息前:list()
接收到第一条消息:list(1)
接收到第二条消息时,首先判断Para是否大于1,如果否,则重放攻击。如果是,则list(2)
以此类推,此处不再赘述。
本发明实施例提供的技术方案可实现通信过程中利用API key提供消息安全性,且能够保障API key不会被泄露。
综上所示,本发明实施例提供的技术方案能够防止恶意攻击者非法获取到API key,同时能够标识对应的设备,还能够防止重放攻击。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。