获取公钥的方法、装置和系统的制作方法

文档序号:7704144阅读:139来源:国知局
专利名称:获取公钥的方法、装置和系统的制作方法
技术领域
本发明涉及通信领域,特别涉及获取公钥的方法、装置和系统。
背景技术
DKIM(Domain Key Identified Mail,域名密钥识别邮件)是一种新兴的电子邮件 验证标准,被广泛应用于防止电子邮件欺诈、防止垃圾邮件、防止网络钓鱼等领域。在DKIM方案中,每个域(如ABC. com)都拥有自己的公钥/私钥对,在由该域发出 的报文(如电子邮件)中,携带利用该域自己的私钥生成的签名。接收者接收到报文后,利 用该域的公钥来验证报文中的签名,以确认该报文确实是来自该域的。如果接收者没有该 域的公钥,则需要通过DNS (Domain Name System,域名系统)Request (请求)报文,到DNS 服务器获取该域的公钥。实际的应用中,DNS报文通常都是使用UDP(User DatagramProtocol,用户数据报 协议)来进行传输的。因此,当上述接收者没有该域的公钥时,需要与上述DNS服务器建立 UDP连接,通过UDP报文,获取到该域的公钥。但是在现有技术中,DKIM仅支持RSA密钥体系,而为提高保密度,RSA密钥通常都 很长。当某个域的RSA公钥长度过长,以至于超出UDP报文规定的长度时,上述接收者就无 法通过UDP报文获取到这个域的RSA公钥。

发明内容
有鉴于此,本发明的实施例提供了以下方案—种获取公钥的方法,该方法包括与域名系统DNS服务器建立传输控制协议TCP连接;通过该TCP连接,向所述DNS 服务器发送DNS请求报文,请求获取第一域的公钥;并且,还通过该TCP连接,接收来自该 DNS服务器的DNS响应报文;其中,DNS响应报文携带所述第一域的公钥;根据该DNS响应 报文,获取第一域的公钥。一种获取公钥的装置,该装置包括建立连接模块,用于与DNS服务器建立TCP连接;发送模块,用于通过建立连接模块建立的TCP连接,向DNS服务器发送DNS请求报 文,请求获取第一域的公钥;接收模块,用于通过建立连接模块建立的TCP连接,接收来自DNS服务器的DNS响 应报文,该DNS响应报文中携带第一域的公钥;获取模块,用于根据接收模块接收到的DNS响应报文,获取第一域的公钥。一种获取公钥的系统,该系统包括第一设备,用于与DNS服务器建立TCP连接,通过该TCP连接,向DNS服务器发送 DNS请求报文,请求获取第一域的公钥;并且,接收来自DNS服务器的DNS响应报文,获取该 DNS响应报文中携带的所述第一域的公钥;
DNS服务器,用于在接收到上述DNS请求报文之后,通过上述TCP连接,向第一设备 发送DNS响应报文,该DNS响应报文携带所述第一域的公钥。一种获取公钥的方法,该方法包括与DNS服务器建立通信连接;通过该通信连接,向该DNS服务器发送DNS请求报 文,请求获取第一域的公钥;该公钥为采用短密钥体系的密钥;通过该通信连接,接收来自 DNS服务器的DNS响应报文;该DNS响应报文携带第一域的公钥;根据该DNS响应报文,获 取第一域的公钥。一种获取公钥的装置,该装置包括建立连接模块,用于与DNS服务器建立通信连接; 发送模块,用于通过建立连接模块建立的通信连接,向DNS服务器发送DNS请求报 文,请求获取第一域的公钥;该公钥为采用短密钥体系的密钥;接收模块,用于通过建立连接模块建立的通信连接,接收来自DNS服务器的DNS响 应报文,该DNS响应报文中携带第一域的公钥;获取模块,用于根据接收模块接收到的DNS响应报文,获取第一域的公钥。一种获取公钥的系统,该系统包括第一设备,用于与DNS服务器建立通信连接,通过该通信连接,向DNS服务器发送 DNS请求报文,请求获取第一域的公钥;并且,接收来自DNS服务器的DNS响应报文,获取该 DNS响应报文中携带的第一域的公钥;该公钥为采用短密钥体系的密钥;DNS服务器,用于在接收到DNS请求报文之后,通过上述通信连接,向第一设备发 送DNS响应报文,该DNS响应报文携带第一域的公钥。采用本发明的实施例提供的获取公钥的方法、装置和系统,能够解决现有技术中 由于域的公钥长度过长,而无法通过UDP报文获取到公钥的问题。


图1为本发明实施例的一个应用场景示意图;图2为本发明实施例提供的一种获取公钥的方法流程图;图3为本发明实施例提供的一种获取公钥的装置示意图;图4为本发明实施例提供的一种获取公钥的装置中发送模块310的示意图;图5为本发明实施例提供的一种获取公钥的系统示意图;图6为本发明实施例的又一个应用场景示意图;图7为本发明实施例提供的又一种获取公钥的方法流程图;图8 (a)为DNS请求报文中的Question选项的格式;图 8 (b)为 Question 选项中 Query Name 域的格式;图9为本发明实施例提供的又一种获取公钥的装置示意图;图10为本发明实施例提供的又一种获取公钥的装置中发送模块910的示意图;图11为本发明实施例提供的又一种获取公钥的系统示意图。
具体实施例方式为使本发明实施例的目的、技术方案及优点更加清楚明白,以下参照附图,对本发明实施例作进一步地详细说明。为便于说明,下面简单结合一个实际应用中较常见的场景,具体介绍本发明的几 个实施例。如图1所示,域ABC. com拥有密钥对X1/X2 (公钥/私钥),当域ABC. com向用户P 发送报文(如电子邮件)时,报文中携带有签名,该签名是域ABC. com利用自己的私钥X2 生成的。在本场景中,域ABC. com可以采用RSA密钥,也可以采用其他密钥体系,此处不做限定。用户P接收到报文后,需要对该签名进行验证,以确认该报文确实是来自域ABC. com的。例如,用户P可以利用与私钥X2相对应的公钥XI来验证报文中的签名。如果用户 P没有公钥XI,则需要向DNS服务器发送DNS请求报文,以请求获取该公钥XI。有别于现有技术中的方案,在本场景中,用户P与DNS服务器之间不建立UDP连 接,而直接建立TCP (Transfer Control Protocol,传输控制协议)连接,用户P通过TCP连 接向DNS服务器发送上述DNS请求报文。可选的,本场景中,由于域ABC. con可以采用RSA密钥,也可以采用其他密钥体系, 因此,用户P接收到来自域ABC. com的报文后,可以通过报文中携带的签名,获知域ABC. com 是利用哪一个密钥体系生成签名。从而,用户P发送给DNS服务器的DNS请求报文中,可以 携带请求获取的公钥的类型标识。DNS服务器收到该DNS请求报文后,基于上述TCP连接,向用户P发送DNS Response (响应)报文,该DNS响应报文中携带了域ABC. com的公钥XI。例如,该DNS响应 报文中可以携带公钥XI的文本(TXT)类型的资源记录(RR,ReSourCe Record)。当DNS请 求报文携带请求获取的公钥的类型标识时,DNS服务器还可以根据该类型标识,将相应类型 的公钥携带在DNS响应报文中,发送给用户P。至此,用户P就获取到了域ABC. com的公钥XI。然后就能够利用获取到的公钥XI 来验证报文中的签名。本场景中,由于用户P与DNS服务器之间是基于TCP进行通信,因此,即使公钥XI 的长度超过了协议规定的报文长度,DNS服务器也能通过多个TCP报文将公钥XI发送给用 户。用户P能够按照TCP报文中携带的报文序号,按顺序接收这些TCP报文,获取到公钥 XI。从而解决了现有技术中由于域的公钥长度过长,而无法通过UDP报文获取到公钥的问题。图2为本发明实施例提供的一种获取公钥的方法流程图,如图2所示,该方法包 括200,与DNS服务器建立TCP连接;210,通过200中建立的TCP连接,向DNS服务器发送DNS请求报文,以请求获取第 一域的公钥;在本实施例中,该公钥可以是RSA密钥,也可以是采用其他密钥体系的密钥, 此处不做限定;220,通过200中建立的TCP连接,接收来自DNS服务器的DNS响应报文,该DNS响 应报文是DNS服务器对上述DNS请求报文的响应,该DNS响应报文中携带第一域的公钥;230,根据接收到的DNS响应报文,获取第一域的公钥。可选的,本实施例中,向DNS服务器发送的DNS请求报文中还可以携带请求获取的第一域的公钥的类型标识。这样,DNS服务器就能够将相应类型的公钥携带在DNS响应报 文中。又一可选的,本实施例中,DNS响应报文中可以携带公钥的TXT类型的资源记录。 此时,根据接收到的DNS响应报文中携带的第一域公钥的TXT类型的资源记录,获取第一域 的公钥。图3为本发明实施例提供的一种获取公钥的装置示意图,如图3所示,该装置包 括建立连接模块300,用于与DNS服务器建立TCP连接;发送模块310,用于通过建立连接模块300建立的TCP连接,向DNS服务器发送DNS 请求报文,以请求获取第一域的公钥;在本实施例中,该公钥可以RSA密钥,也可以是采用 其他密钥体系的密钥,此处不做限定;接收模块320,用于通过建立连接模块300建立的TCP连接,接收来自DNS服务器 的DNS响应报文,该DNS响应报文是DNS服务器对上述DNS请求报文的响应,该DNS响应报 文中携带第一域的公钥;获取模块330,用于根据接收模块320接收到的DNS响应报文,获取第一域的公钥。可选的,如图4所示,发送模块310还可以包括标识单元311,用于在DNS请求报文中携带第一域的公钥的类型标识;发送单元312,用于向DNS服务器发送上述携带第一域的公钥的类型标识的DNS请 求报文。可选的,DNS响应报文中可以携带公钥的TXT类型的资源记录,此时,获取模块330 用于根据接收模块320接收到的DNS响应报文中携带的第一域公钥的TXT类型的资源记 录,获取第一域的公钥。图5为本发明实施例提供的一种获取公钥的系统示意图,如图5所示,该系统包括 第一设备和DNS服务器,其中第一设备,用于与DNS服务器建立TCP连接,向DNS服务器发送DNS请求报文,以 请求获取第一域的公钥;接收来自DNS服务器的DNS响应报文,获取该DNS响应报文中携带 的第一域的公钥;在本实施例中,该公钥可以是RSA密钥,也可以是采用其他密钥体系的密 钥,此处不做限定;DNS服务器,用于在接收到上述DNS请求报文之后,通过上述TCP连接,向第一设备 发送DNS响应报文,该DNS响应报文携带第一域的公钥。采用上述本发明的实施例提供的获取公钥的方法、装置和系统,由于与DNS服务 器之间并不建立UDP连接,而是基于TCP进行通信,因此,即使域的公钥的长度超过了协议 规定的报文长度,也能通过多个TCP报文获取到域的公钥。从而解决了现有技术中由于域 的公钥长度过长,而无法通过UDP报文获取到公钥的问题。下面,再通过实际应用中较常见的另一个场景,具体介绍本发明的另外几个实施 例。如图6所示,域ABC. com拥有密钥对Y1/Y2 (公钥/私钥)以及Z1/Z2 (公钥/私 钥),当域ABC. com向用户Q发送报文(如电子邮件)时,利用其中一对密钥中的私钥生成 了签名,携带在报文中。例如,域ABC. com利用密钥对Y1/Y2中的私钥Y2生成了签名,并携
7带在发送给用户Q的报文中。在本场景中,域ABC. com采用的密钥体系是短密钥体系(也 可以称为短密钥算法)。在本申请中,短密钥可以理解为密钥长度能够由单个UDP报文承载、而且安全 强度大于80、每比特强度大于0. 1的密钥。此处,“每比特强度”是指是密钥的安全强度 (Security Strength)和密钥长度的比值。一个给定长度的密钥的安全强度通常指是指攻 破这一密钥所需要的工作量。以RSA密钥体系为例,不同长度的RSA密钥的安全强度和每 比特强度如表1所示表1 较为常见的短密钥体系例如椭圆曲线数字签名算法E⑶SA(Ellipic Curve Digital Signature Algorithm)、基于格的公钥密码系统(Lattice-Based Public-Key Cryptography)、基于□令白勺公_密石马系统(Password-Based Public-Key cryptography) > 基于身份的公钥密码系统(Identity-Based Public-Key Cryptography Using Pairing) 等等。当然,其他符合上述要求的密钥也可以理解为短密钥。此处不做限定。在本场景中, 密钥对Y1/Y2以及Z1/Z2均可以为短密钥体系中的任意一种密钥,此处不做限定。用户Q接收到报文后,需要对该签名进行验证,以确认该报文确实是来自域ABC. com的。例如,用户Q可以利用与私钥Y2相对应的公钥Y1来验证报文中的签名。如果用户 Q没有公钥Y1,则需要向DNS服务器发送DNS请求报文,以请求获取该公钥Y1。在本场景中,用户Q与DNS服务器之间可以建立UDP连接,用户Q通过UDP连接向 DNS服务器发送上述DNS请求报文;用户Q与DNS服务器之间也可以建立TCP连接,用户Q 通过TCP连接向DNS服务器发送上述DNS请求报文;当然,还可以是其他通信连接,此处不 做限定。当用户Q与DNS服务器之间建立TCP连接时,具体的过程可以参照上述图1中用 户P与DNS服务器通信的过程,此处就不再赘述了。可选的,在本场景中,由于域ABC. com拥有两对公钥/私钥对,因此,用户Q接收到 来自域ABC. com的报文后,可以通过报文中携带的签名,获知域ABC. com是利用哪一个密钥 体系生成签名。从而,用户Q发送给DNS服务器的DNS请求报文中,可以携带请求获取的公 钥的类型标识。例如,假设密钥对Y1/Y2采用的是E⑶SA密钥体系,则用户Q发送给DNS服 务器的DNS请求报文中,就携带有该密钥体系的类型标识。这样就能避免DNS服务器将另 一密钥对Z1/Z2的公钥Z1发送给用户Q,或者是将Y1和Z1都发给用户Q。DNS服务器收到该DNS请求报文后,基于上述通信连接,向用户Q发送DNS响应报 文,该DNS响应报文中携带了域ABC. com的公钥Y1。例如,该DNS响应报文中可以携带公钥 Y1的TXT类型的资源记录。当DNS请求报文携带请求获取的公钥的类型标识时,DNS服务器还可以根据DNS请求报文中携带的公钥的类型标识,将相应类型的公钥携带在DNS响应 报文中,发送给用户Q。至此,用户Q就获取到了域ABC. com的公钥Y1。然后就能够利用获取到的公钥Y1 来验证报文中的签名。本场景中,由于用户Q与DNS服务器之间传递的是基于短密钥体系的公钥,因此, 不管用户Q和DNS服务器之间建立的是UDP连接还是TCP连接,公钥的长度都不会超过协 议规定的报文长度。从而解决了现有技术中由于域的公钥长度过长,而无法通过UDP报文 获取到公钥的问题。图7为本发明实施例提供的又一种获取公钥的方法流程图,如图7所示,该方法包 括700,与DNS服务器建立通信连接;在本实施例中,该通信连接可以是UDP连接,也 可以是TCP连接,还可以是其他通信连接,此处不做限定;710,通过700中建立的通信连接,向DNS服务器发送DNS请求报文,以请求获取第 一域的公钥;在本实施例中,该公钥为采用短密钥体系的密钥;720,通过700中建立的TCP连接,接收来自DNS服务器的DNS响应报文,该DNS响 应报文是DNS服务器对上述DNS请求报文的响应,该DNS响应报文中携带第一域的公钥;730,根据接收到的DNS响应报文,获取第一域的公钥。可选的,本实施例中,向DNS服务器发送的DNS请求报文中还可以携带请求获取的 第一域的公钥的类型标识。这样,DNS服务器就能够将相应类型的公钥携带在DNS响应报 文中。又一可选的,本实施例中,DNS响应报文中可以携带公钥的TXT类型的资源记录。 此时,根据接收到的DNS响应报文中携带的第一域公钥的TXT类型的资源记录,获取第一域 的公钥。可选的,可以在DNS请求报文中的QUeSti0n(问题)选项携带该第一域的公钥的 类型标识。如图8(a)所示,Question选项中有三个域,分别是Query Name, Query Type以及 Query Class。可以在Query Name域中携带本实施例中第一域的公钥的类型标识。例如,可 以在 Query Name 域中携带如下信息:ecdsa. Beijing. _domainkey. ABC. com。其中,"ecdsa,, 代表ecdsa类型公钥,“Beijing”为选择器标识,“—domainkey”为DKIM标识,“ABC. com”为 域名。具体的,可以参考图8(b)所示的格式。其中,count为计数位,表示在当前count位 和下一 count位之间的比特数。当然,图8(a)和图8(b)仅示出了 DNS请求报文中公钥的类型标识一种可选的表 示方式。本实施例中DNS请求报文中公钥的类型标识的表示方式并不局限于此。图9为本发明实施例提供的又一种获取公钥的装置示意图,如图9所示,该装置包 括建立连接模块900,用于与DNS服务器建立通信连接;在本实施例中,该通信连接 可以是UDP连接,也可以是TCP连接,还可以是其他通信连接,此处不做限定;发送模块910,用于通过建立连接模块900建立的通信连接,向DNS服务器发送 DNS请求报文,以请求获取第一域的公钥;在本实施例中,该公钥为采用短密钥体系的密钥;接收模块920,用于通过建立连接模块900建立的通信连接,接收来自DNS服务器 的DNS响应报文,该DNS响应报文是DNS服务器对上述DNS请求报文的响应,该DNS响应报 文中携带第一域的公钥;获取模块930,用于根据接收模块920接收到的DNS响应报文,获取第一域的公钥。可选的,如图10所示,发送模块910还可以包括标识单元911,用于在DNS请求报文中携带第一域的公钥的类型标识;发送单元912,用于向DNS服务器发送上述携带第一域的公钥的类型标识的DNS请 求报文。可选的,DNS响应报文中可以携带公钥的TXT类型的资源记录,此时,获取模块930 用于根据接收模块920接收到的DNS响应报文中携带的第一域公钥的TXT类型的资源记 录,获取第一域的公钥。图11为本发明实施例提供的又一种获取公钥的系统示意图,如图11所示,该系统 包括第一设备和DNS服务器,其中第一设备,用于与DNS服务器建立通信连接,向DNS服务器发送DNS请求报文,以 请求获取第一域的公钥;接收来自DNS服务器的DNS响应报文,获取该DNS响应报文中携带 的第一域的公钥;在本实施例中,该公钥是采用短密钥体系的密钥;上述通信连接可以是 UDP连接,也可以是TCP连接,还可以是其他通信连接,此处不做限定;DNS服务器,用于在接收到上述DNS请求报文之后,通过上述通信连接,向第一设 备发送DNS响应报文,该DNS响应报文携带第一域的公钥。采用上述本发明的实施例提供的获取公钥的方法、装置和系统,由于与DNS服务 器之间传递的是基于短密钥体系的公钥,因此,不管和DNS服务器之间建立的是UDP连接还 是TCP连接,公钥的长度都不会超过协议规定的报文长度。从而解决了现有技术中由于域 的公钥长度过长,而无法通过UDP报文获取到公钥的问题。通过以上的实施方式的描述,本领域的普通技术人员可以清楚地了解到本发明实 施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于 这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产 品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设 备、或者服务器、或者其他网络设备执行本发明各个实施例或者实施例的某些部分所述的 方法。以上仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种获取公钥的方法,其特征在于,包括与域名系统DNS服务器建立传输控制协议TCP连接;通过所述TCP连接,向所述DNS服务器发送DNS请求报文,请求获取第一域的公钥;通过所述TCP连接,接收来自所述DNS服务器的DNS响应报文;所述DNS响应报文携带所述第一域的公钥;根据所述DNS响应报文,获取所述第一域的公钥。
2.如权利要求1所述的方法,其特征在于,所述DNS请求报文携带所述第一域的公钥的 类型标识。
3.如权利要求1或2所述的方法,其特征在于,所述DNS响应报文携带所述第一域的公 钥,具体为所述DNS响应报文携带所述第一域公钥的文本类型的资源记<录。
4.一种获取公钥的装置,其特征在于,包括建立连接模块,用于与DNS服务器建立TCP连接;发送模块,用于通过所述建立连接模块建立的TCP连接,向所述DNS服务器发送DNS请 求报文,请求获取第一域的公钥;接收模块,用于通过所述建立连接模块建立的TCP连接,接收来自所述DNS服务器的 DNS响应报文,所述DNS响应报文中携带所述第一域的公钥;获取模块,用于根据所述接收模块接收到的所述DNS响应报文,获取所述第一域的公钥。
5.如权利要求4所述的装置,其特征在于,所述发送模块包括标识单元,用于在所述DNS请求报文中携带所述第一域的公钥的类型标识; 发送单元,用于向所述DNS服务器发送所述携带第一域的公钥的类型标识的DNS请求 报文。
6.一种获取公钥的系统,其特征在于,包括第一设备,用于与DNS服务器建立TCP连接,通过所述TCP连接,向所述DNS服务器发 送DNS请求报文,请求获取第一域的公钥;接收来自所述DNS服务器的DNS响应报文,获取 所述DNS响应报文中携带的所述第一域的公钥;所述DNS服务器,用于在接收到所述DNS请求报文之后,通过所述TCP连接,向所述第 一设备发送所述DNS响应报文,所述DNS响应报文携带所述第一域的公钥。
7.一种获取公钥的方法,其特征在于,包括 与DNS服务器建立通信连接;通过所述通信连接,向所述DNS服务器发送DNS请求报文,请求获取第一域的公钥;所 述公钥为采用短密钥体系的密钥;通过所述通信连接,接收来自所述DNS服务器的DNS响应报文;所述DNS响应报文携带 所述第一域的公钥;根据所述DNS响应报文,获取所述第一域的公钥。
8.如权利要求6所述的方法,其特征在于,所述DNS请求报文携带所述第一域的公钥的 类型标识。
9.如权利要求7或8所述的方法,其特征在于,所述DNS响应报文携带所述第一域的公 钥,具体为所述DNS响应报文携带所述第一域公钥的文本类型的资源记录。
10.一种获取公钥的装置,其特征在于,包括建立连接模块,用于与DNS服务器建立通信连接;发送模块,用于通过所述建立连接模块建立的通信连接,向所述DNS服务器发送DNS请 求报文,请求获取第一域的公钥;所述公钥为采用短密钥体系的密钥;接收模块,用于通过所述建立连接模块建立的通信连接,接收来自所述DNS服务器的 DNS响应报文,所述DNS响应报文中携带所述第一域的公钥;获取模块,用于根据所述接收模块接收到的所述DNS响应报文,获取所述第一域的公钥。
11.如权利要求10所述的装置,其特征在于,所述发送模块包括标识单元,用于在所述DNS请求报文中携带所述第一域的公钥的类型标识; 发送单元,用于向所述DNS服务器发送所述携带第一域的公钥的类型标识的DNS请求 报文。
12.一种获取公钥的系统,其特征在于,包括第一设备,用于与DNS服务器建立通信连接,通过所述通信连接,向所述DNS服务器发 送DNS请求报文,请求获取第一域的公钥;接收来自所述DNS服务器的DNS响应报文,获取 所述DNS响应报文中携带的所述第一域的公钥;所述公钥为采用短密钥体系的密钥;所述DNS服务器,用于在接收到所述DNS请求报文之后,通过所述通信连接,向所述第 一设备发送所述DNS响应报文,所述DNS响应报文携带所述第一域的公钥。
全文摘要
本发明涉及通信领域,公开了一种获取公钥的方法,该方法通过与DNS服务器建立TCP连接,通过该连接,向DNS服务器发送DNS请求报文,请求获取第一域的公钥;通过该连接,接收来自DNS服务器的DNS响应报文,根据该响应报文中携带的第一域的公钥,获取第一域的公钥。本发明还公开了获取公钥的装置和系统。
文档编号H04L12/58GK101877693SQ20091010693
公开日2010年11月3日 申请日期2009年4月29日 优先权日2009年4月29日
发明者沈烁 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1