具体实施方式
当数字内容在两个消费电子设备之间传播时,为了保证数字内容是在两个合法的消费电子设备之间传播,并且能够使被传播的数字内容得到有效的保护而不易被拦截或窃取,两个消费电子设备各接口需要根据其各自的配置选择适当的认证密钥协商方式进行身份认证和密钥协商。
在本发明中,所述的认证密钥协商方式包括单向认证方式和双向认证方式。所述单向认证方式包括单向完全认证方式以及单向重新认证方式;所述双向认证方式包括双向完全认证方式以及双向重新认证方式。
这里,将参与认证密钥协商方式运行的两个设备分别称为源设备和目的设备。源设备和目的设备根据双方接口的配置选择执行一种认证方式:
1)接口类型为POD或者HDMI,DVI,执行单向认证密钥协商和密钥更新。
2)接口类型为IEEE1394,USB,源设备和目的设备均支持双向认证,则执行双向认证密钥协商和更新。
3)接口类型为IEEE1394,USB,目的设备仅支持单向认证,源设备配置的策略中允许执行单向认证,则执行单向认证密钥协商和更新。
4)其它接口类型,根据源设备的配置策略,支持的认证方案,目的设备支持的认证方案决定执行的认证方案类型。
一般情形下,源设备在选择执行单向或双向认证方式后,如果本地没有存储以前的共享密钥,则执行单向或双向完全认证方式;如果本地存储着以前的共享密钥,则执行单向或双向重新认证方式。
在本发明所提及的四种认证密钥协商方式中使用如下内容:
1)参与认证密钥协商方式运行的源设备和目的设备分别在本地存储证书列表Cert_Source_list和Cert_Des_list,这些证书列表中所包含的证书的数量由应用环境的信任模型决定。Cert_Source_list至少包括源设备证书Cert_Source,Cert_Des_list则至少包括目的设备证书Cert_Des。所使用的设备证书的证书格式可以遵照CCITT X.509规定的格式或者某种通用于多个接口的证书格式,至少要包含“证书持有者唯一标志”,“公钥信息”,“证书签发者标志”,“证书签名算法信息”,“证书签名”等内容。认证密钥协商方式中将使用的证书信息包括源设备证书的“证书持有者标志”ID_Source和目的设备证书的“证书持有者唯一标志”ID_Des,其它与证书相关的操作以文字形式叙述。
2)认证密钥协商方式需要关于椭圆曲线的一组参数,设为(Fq,E,G,n),其中Fq为特征为q的有限域,E是Fq上的椭圆曲线,G为E上的基点,n为G的阶。
3)认证密钥协商方式中的签名算法E_S{}表示使用设备的唯一私钥来对{}中的内容签名。签名算法可以是任何一种具体算法,只要该算法满足适应性选择消息攻击安全。该方式中的HMAC密钥杂凑函数Hash(key,content)表示使用密钥key来计算content的杂凑值。同样Hash可以是任何一种具体算法,只要该算法具有混合变换、抗碰撞攻击、抗原像攻击这样三个性质属性。
4)认证密钥协商方式中使用符号|x|来表示数据x的长度,即该数据转化为二进制表示时所使用的二进制符号的数目,例如|2192|=192;使用符号[x]lsby来表示取数据x从最低位(0比特位)到y-1比特位的y比特数据;使用符号[x]msby来表示取数据x从y比特位到最高位的(|x|-y)比特数据。
本发明的电子设备接口间基于公钥证书的认证密钥协商和更新方法通过使用Diffie-Hellman密钥交换技术来生成共享秘密;通过HMAC算法保证所生成的共享秘密的一致性和消息的完整性;在完全认证的情况下,通过使用签名技术来保证证书的发送者确实持有与证书中公钥相对应的私钥,从而确定设备的合法性;在重新认证的情况下,通过使用持有共享密钥这一事实来确认设备的合法性。这里,假设椭圆曲线上判定性Diffie-Hellman问题是困难问题,假设所用的签名算法在适应性选择消息攻击下是安全的,假设所用的HMAC算法具有混合变换、抗碰撞攻击、抗原像攻击这样三个性质。在上述假定条件下,可以证明本发明的认证密钥协商和更新方法在秘密性和认证性方面是安全的。
源设备和目的设备根据其接口的配置确定一种认证密钥协商方式后,则按照该选定的认证密钥协商方式的内容进行身份认证和密钥交换。
下面分别描述本发明的四种认证密钥协商方式。源设备选择执行双向认证方式后,如果本地没有存储以前的共享密钥,则执行双向完全认证方式。
(一)双向完全认证
当源设备和目的设备之间采用双向完全认证方式时,通过以下步骤在椭圆曲线(Fq,E,G,n)上实现,其中Fq为特征为q的有限域,E是Fq上的椭圆曲线,G为E上的基点,n为G的阶。
如图1所示,双向完全认证方式包括如下步骤:
1.源设备主程序调用双向完全认证子程序来发送双向完全认证第一条消息。该子程序读取源设备证书列表Cert_Source_list,计算随机数1<x<n,计算标量乘xG,发送消息,即源设备证书列表和标量乘xG:
Cert_Source_list||xG
在实际应用中,上述消息需要封装之后再发送。对该消息单元的封装应指明该消息所属的认证类型(双向完全认证0x01),如果源设备和目的设备之间可以存在多个会话同时运行,则封装信息还包括会话序列号。
2.目的设备主程序把双向完全认证第一条消息转交给该设备的双向完全认证子程序处理。该协议子程序要完成以下操作:
a)通过目的设备的证书有效性查询资源来验证源设备证书Cert_Source是否被吊销。如果目的设备不存在证书有效性查询资源,则发送通知消息给源设备指示目的设备能力不足,终止执行该双向完全方式。
在实际应用中,各接口为该通知消息分配特定的序列号(例如0x01表示不存在证书有效性查询的资源),并按照各接口通知消息的形式封装并发送该序列号,封装的信息应该足以表明出现错误的会话序列,例如包括特定会话的部分DH公钥信息,或者包括特定会话的会话序列号,或者源设备和目的设备之间不存在多重会话。
b)鉴于证书有效性验证有可能耗时较长,因此该子程序需要与证书有效性验证并行执行以下操作:
i.验证源设备证书列表中证书各个域的信息,具体验证内容由证书***的规范决定。验证失败则向源设备发送通知消息,报告证书验证失败,终止执行该方式。
ii.计算随机数y,计算标量乘yG,计算共享秘密xyG,使用HMAC密钥杂凑函数Hash,计算Hash([xyG]lsb|q|,ID_Source),使用目的设备的私钥对所计算的杂凑值使用签名算法E_S{}签名,读取目的设备证书列表Cert_Des_list,发送消息给源设备:
Cert_Des_list||yG||E_S{Hash([xyG]lsb|q|,ID_Source)}
在实际应用中,封装上述消息,然后再发送。封装该协议消息时要明确消息所属的会话序列和认证类型。
3.源设备主程序负责把双向完全认证第二条消息转交给该设备的完全双向认证子程序来处理,把目的设备发送的通知消息转交给通知消息处理子程序执行。
源设备的通知消息处理子程序对于目的设备发送的“不存在有效性查询资源”,“证书验证失败”这样两类通知消息,终止这些通知消息所指明的会话,收回***资源。
双向完全认证子程序完成以下操作:
a)通过源设备的证书有效性查询资源来验证目的设备证书Cert_Des是否被吊销。如果源设备不存在证书有效性查询资源,则发送通知消息给目的设备指示源设备能力不足,终止执行该双向完全认证方式。
在实际应用中,各接口需要为该通知消息分配特定的序列号(例如0x01表示不存在证书有效性查询的资源),并按照各接口通知消息的形式封装并发送该序列号,要求封装时能够指明出现错误的会话序列。
b)鉴于证书有效性验证有可能耗时较长,因此该协议子程序需要与证书有效性验证并行执行以下操作:
i.验证目的设备证书列表中证书各个域的信息,具体验证内容由各接口证书***的规范决定。验证失败则向目的设备发送通知消息,报告证书验证失败,终止执行双向完全认证。
ii.计算共享秘密xyG,使用HMAC密钥杂凑函数Hash,计算Hash([xyG]lsb|q|,ID_Source),验证接收消息中签名的有效性,如果验证没有通过则发送通知消息给目的设备报错,终止执行双向完全认证。
在实际应用中,各接口应该为该通知消息分配特定的序列号(例如0x02表示证书验证失败),并按照各接口通知消息的形式封装并发送该序列号,同样要求封装时能够指明出现错误的会话序列。
iii.使用Hash函数,以[xyG]msb|q|为密钥,对目的设备的证书唯一标志ID_Des进行杂凑,使用源设备的私钥对该杂凑值使用签名算法E_S{}签名:
E_S{Hash([xyG]msb|q|,ID_Des)};
在实际应用中,对上述签名进行封装,封装时要明确消息的会话序列和认证类型。
iv.源设备使用Hash函数,以xyG为密钥,对ID_Source||xG||ID_Des||yG进行杂凑,其结果作为双方的共享密钥K_M:
K_M=Hash(xyG,ID_Source||xG||ID_Des||yG);
V.检查在步骤a)中证书有效性查询的结果,如果目的设备的证书是有效的,则存储数据对<K_M,ID_Des>,发送步骤iii中生成的签名消息给目的设备,否则发送通知消息,终止协议执行。
在实际应用中,各接口应该为该通知消息分配特定的序列号(例如0x04表示证书已经被吊销),并按照各接口通知消息的形式封装并发送该序列号,要求封装时能够指明出现错误的会话序列。
4.目的设备主程序负责把双向完全认证第三条消息的消息单元转交给该设备的双向完全认证协议子程序来处理接收的消息,把接收的通知消息转交给目的设备的通知消息处理子程序执行。
目的设备的通知消息处理子程序对于源设备发送的“不存在有效性查询资源”,“证书验证失败”,“签名消息验证失败”,“证书已经被吊销”这样几类通知消息,终止这些通知消息所指明的会话,收回***资源。
目的设备双向完全认证子程序完成以下操作:
a)使用HMAC密钥杂凑函数Hash,计算Hash([xyG]msb|q|,ID_Des),读取Cert_Source中公钥,验证接收消息中签名,验证无效则发送通知消息给源设备报错,终止执行双向完全认证。
在实际应用中,各接口为该通知消息分配特定的序列号(例如0x03表示协议签名消息验证失败),并按照各接口通知消息的形式封装并发送该序列号,封装时指明出现错误的会话序列。
b)检查步骤2的a)中Cert_Source有效性查询的结果,如果查询结果表明源设备证书已经被吊销,则发送通知消息给源功能设备报错,终止执行双向完全认证。
在实际应用中,各接口为该通知消息分配特定的序列号(例如0x04表示证书已经被吊销),并按照各接口通知消息的形式封装并发送该序列号,封装时能够指明出现错误的会话序列。
c)使用Hash函数计算主密钥K_M如下:
K_M=Hash(xyG,ID_Source||xG||ID_Des||yG);
d)存储<K_M,ID_Source>。
5.源设备在接收到目的设备的通知消息后,清除存储的数据对<K_M,ID_Des>。
(二)双向重新认证
源设备选择执行双向认证后,如果本地存储着以前的共享密钥,则执行双向重新认证方式。如图2所示,该协议具体步骤如下:
1.源设备主程序调用双向重新认证子程序来发送双向完全认证第一条消息。该协议子程序读取源设备证书中的持有者唯一标志ID_Source,计算不少于64比特的随机数Rand_Source,发送消息:
ID_Source||Rand_Source
在实际应用中,上述消息需要封装,对该消息单元的封装要能够指明该消息所属的认证类型,如果源设备和目的设备之间可以存在多个会话同时运行,则封装信息还包括会话序列号。
2.目的设备主程序负责把双向重新认证第一条消息转交给该设备的双向重新认证子程序处理。该协议子程序要完成以下操作:
a)比较所接收的ID_Source与本地存储的<K_M,ID_Source>中的ID_Source是否相同,如果不同,则清除<K_M,ID_Source>,然后向源设备发送通知消息,终止此次双向重新认证方式的执行,请求执行双向完全认证。
在实际应用中,各接口应该为该通知消息分配特定的序列号(例如0x05表示重新认证证书持有者标志不匹配),并按照各接口通知消息的形式封装并发送该序列号,要求封装时能够指明出现错误的会话序列。
b)如果所接收的ID_Source与本地存储的<K_M,ID_Source>中的ID_Source相同,则读取目的设备证书中的证书持有者标志ID_Des,计算不少于64比特随机数Rand_Des,使用HMAC密钥杂凑函数Hash,以共享密钥K_M的高|K_M|/2位比特,对ID_Source||Rand_Source||ID_Des||Rand_Des进行杂凑,获得Des_HashValue值,计算杂凑值Des_HashValue:
Hash([K_M]msb|K_M|/2,ID_Source||Rand_Source||ID_Des||Rand_Des)
d)发送消息:
ID_Des||Rand_Des||Des_HashValue。
在实际应用中,需要对消息封装,封装时要明确消息所属的会话序列和认证类型。
3.源设备主程序负责把双向重新认证第二条消息的消息单元转交给该设备的双向重新认证子程序来处理接收的消息,把目的设备发送的通知消息转交给通知消息处理子程序执行。
源设备的通知消息处理子程序对于目的设备发送的“重新认证证书持有者标志不匹配”这样的通知消息,终止这些通知消息所指明的会话,收回***资源,清除<K_M,ID_Des>,然后与该目的设备执行双向完全认证。
源设备采用的双向重新认证方式具有以下步骤:
a)比较所接收的ID_Des和本地存储的<K_M,ID_Des>中的ID_Des是否相同,如果不同,则清除本地存储的<K_M,ID_Des>,发送“重新认证证书持有者不匹配”通知消息给目的设备,终止此次会话,回收***资源,清除<K_M,ID_Des>,然后与该目的设备执行双向完全认证。
b)如果所接收的ID_Des和本地存储的<K_M,ID_Des>中的ID_Des相同,则使用HMAC密钥杂凑函数Hash计算以下杂凑值Local_Des_HashValue:
Hash([K_M]msb|K_M|/2,ID_Source||Rand_Source||ID_Des||Rand_Des)
c)比较接收的HashValue与计算的Local_Des_HashValue是否相同,不同则清除本地存储的<K_M,ID_Des>,发送“重新认证杂凑值不匹配”通知消息给目的设备,终止此次会话,回收***资源,清除<K_M,ID_Des>,然后与该目的设备执行双向完全认证。
d)使用Hash函数,以共享密钥K_M的低|K_M|/2位比特为密钥,对ID_Des||Rand_Des进行杂凑,计算并发送杂凑值Source_HashValue给目的设备:
Hash([K_M]lsb|K_M|/2||ID_Des||Rand_Des)
在实际应用中,需要封装之后发送杂凑值Source_HashValue给目的设备。这时协议消息单元仅包含该杂凑值。封装时要明确消息所属的会话序列和认证类型。
e)计算新的K_M,更新<K_M,ID_Des>中的K_M。新的K_M计算如下:
K_M=Hash(K_M,Rand_Des||Rand_Source)
4.目的设备主程序负责把双向重新认证第三条消息转交给该设备的双向重新认证协议子程序来处理接收的消息,把接收的通知消息转交给目的设备的通知消息处理子程序执行。
目的设备的通知消息处理子程序对于源设备发送的“重新认证证书持有者标志不匹配”,“重新认证杂凑值不匹配”这样两类通知消息,终止这些通知消息所指明的会话,收回***资源,清除<K_M,ID_Source>。
目的设备双向重新认证协议子程序完成以下操作:
a)用HMAC密钥杂凑函数Hash计算杂凑值Local_Source_HashValue:
Hash([K_M]lsb|K_M|/2||ID_Des||Rand_Des)
b)比较接收的Source_HashValue与计算的Local_Source_HashValue是否相同,不同则发送“重新认证杂凑值不匹配”通知消息给源设备,终止此次会话,回收***资源,清除<K_M,ID_Source>。
c)计算新的K_M,更新<K_M,ID_Source>中的K_M,设置认证状态。新的K_M计算如下:
K_M=Hash(K_M,Rand_Des||Rand_Source)。
5.源设备在接收到目的设备的通知消息后,清除数据对<K_M,ID_Des>,执行双向完全认证协议。
(三)单向完全认证
源设备选择执行单向认证后,如果本地没有存储以前的认证密钥,则执行单向完全认证协议。如图3所示,该协议具体步骤如下:
1.在决定执行单向完全认证后,源设备主程序调用单向完全认证协议子程序来发送单向完全认证第一条消息。该协议子程序读取源设备证书中的证书持有者标志ID_Source,计算随机数x,计算标量乘xG,并发送协议消息:
ID_Source||xG
在实际应用中,上述消息需要封装发送,对该协议消息单元的封装要能够指明该消息所属的认证类型,如果源设备和目的设备之间可以存在多个同时运行的会话,则封装信息还应包括会话序列号。
2.目的设备主程序负责把单向完全认证第一条协议消息转交给该设备的单向完全认证子程序处理。该协议子程序要完成以下操作:
a)计算随机数y,计算yG,计算共享秘密xyG,使用HMAC密钥杂凑函数Hash,计算Hash([xyG]lsb|q|,ID_Source),对计算的杂凑值签名,读取目的设备证书列表,发送协议消息:
Cert_Des_list||yG||E_S{Hash([xyG]lsb|q|,ID_Source)}
在实际应用中,上述消息需要封装发送。封装时要明确消息所属的会话序列和认证类型。
b)使用Hash函数,以xyG为密钥,对ID_Source||xG||ID_Des||yG进行杂凑,计算主密钥K_M作为双方的共享密钥,存储<K_M,ID_Source>。K_M计算如下:
K_M=Hash(xyG,ID_Source||xG||ID_Des||yG)
3.源设备主程序负责把单向完全认证第二条协议消息转交给该设备的单向完全认证协议子程序来处理接收的协议消息。该协议子程序完成以下操作:
a)通过源设备的证书有效性查询资源验证接收的证书是否被吊销。如果源设备不存在证书有效性查询资源,则发送“不存在证书有效性查询的资源”通知消息给目的设备指示源设备能力不足,终止执行单向认证。
在实际应用中,封装上述步骤a)中产生的通知消息时要能够指明出现错误的会话序列。
b)鉴于证书有效性验证有可能耗时较长,因此该协议子程序需要与证书有效性验证并行执行以下操作:
i.验证目的设备证书列表中证书各个域的信息,具体验证内容由各接口证书***的规范决定。验证失败则向目的设备发送“证书验证失败”通知消息,终止协议执行。
在实际应用中,封装上述步骤b)第i项中产生的通知消息时要能够指明出现错误的会话序列。
ii.计算共享秘密xyG,使用HMAC密钥杂凑函数Hash计算Hash([xyG]lsb|q|,ID_Source),读取Cert_Des的公钥验证接收消息中签名的有效性,如果验证没有通过则发送“协议签名消息验证失败”通知消息给目的设备报错,终止协议执行。
在实际应用中,封装上述步骤b)第ii项中产生的通知消息时要能够指明出现错误的会话序列。
iii.使用Hash,以xyG为密钥,对ID_Source||xG||ID_Des||yG进行杂凑,计算主密钥K_M作为双方的共享密钥:
K_M=Hash(xyG,ID_Source||xG||ID_Des||yG)。
iv.检查在步骤a)中有效性查询结果,如果证书有效则存储<K_M,ID_Des>,否则发送通知消息,指示“证书已经被吊销”,结束程序执行。
在实际应用中,封装上述步骤b)第iv项中产生的通知消息时要能够指明出现错误的会话序列。
4.目的设备主程序负责把接收的通知消息转交给通知消息处理子程序执行。
目的设备的通知消息处理子程序对于源设备发送的“不存在有效性查询资源”,“证书验证失败”,“签名消息验证失败”,“证书已经被吊销”这样几类通知消息,终止这些通知消息所指明的会话,收回***资源。
(四)单向重新认证
源设备选择执行单向认证后,如果本地存储着以前的认证密钥,则执行单向重新认证方式。如图4所示,该协议具体步骤如下:
1.源设备主程序调用单向重新认证子程序来发送单向完全认证第一条消息。该子程序读取源设备证书中的持有者唯一标志ID_Source,计算不少于64比特随机数Rand_Source,发送消息:
ID_Source||Rand_Source
在实际应用中,上述消息需要封装,对该消息单元的封装要能够指明该消息所属的认证类型,如果源设备和目的设备之间可以存在多个会话同时运行,则封装信息还应包括会话序列号。
2.目的设备主程序负责把单向重新认证第一条消息转交给该设备的单向重新认证子程序处理。该协议子程序要完成以下操作:
a)比较所接收的ID_Source与本地存储的<K_M,ID_Source>中的ID_Source是否相同,如果不同,则清除<K_M,ID_Source>,然后向源设备发送“证书持有者标志不匹配”通知消息,终止此次单向重新认证的执行。
在实际应用中,封装上述步骤a)中通知消息时要能够指明出现错误的会话序列。
b)如果所接收的ID_Source与本地存储的<K_M,ID_Source>中的ID_Source相同,则使用HMAC密钥杂凑函数Hash,以共享密钥K_M的低|K_M|/2位比特,对ID_Source||Rand_Source进行杂凑,计算以下杂凑值Uni_Des_HashValue:
Hash([K_M]lsb|K_M|/2,ID_Source||Rand_Source)
c)读取目的设备证书中的证书持有者标志ID_Des,发送消息:
ID_Des||Uni_Des_HashValue
在实际应用中,上述消息需要封装。封装时要明确消息所属的会话序列和认证类型。
d)计算新的K_M,更新<K_M,ID_Source>中的K_M。新的K_M计算如下:
K_M=Hash(K_M,Rand_Source)
3.源设备主程序负责把单向重新认证第二条消息转交给该设备的单向重新认证子程序来处理接收的消息,把目的设备发送的通知消息转交给通知消息处理子程序执行。
源设备的通知消息处理子程序对于目的设备发送的“重新认证证书持有者标志不匹配”这样的通知消息,终止这些通知消息所指明的会话,收回***资源,清除数据对<K_M,ID_Des>,然后与该目的设备执行单向完全认证。
源设备单向重新认证子程序执行以下步骤:
a)比较所接收的ID_Des和本地存储的数据对<K_M,ID_Des>中的ID_Des是否相同,如果不同则清除本地存储的<K_M,ID_Des>,发送“重新认证证书持有者不匹配”通知消息给目的设备,终止此次会话,回收***资源,清除<K_M,ID_Des>,然后与该目的设备执行单向完全认证。
b)如果所接收的ID_Des和本地存储的<K_M,ID_Des>中的ID_Des相同,则使用HMAC密钥杂凑函数Hash计算以下杂凑值Uni_Local_Des_HashValue:
Hash([K_M]lsb|K_M|/2,ID_Source||Rand_Source)
c)比较接收的Uni_Des_HashValue与计算的Uni_Local_Des_HashValue是否相同,如果不同则清除本地存储的<K_M,ID_Des>,发送“重新认证杂凑值不匹配”通知消息给目的设备,终止此次会话,回收***资源,清除<K_M,ID_Des>,然后与该目的设备执行单向完全认证。
d)计算新的K_M,更新<K_M,ID_Des>中的K_M,设置认证状态。新的K_M计算如下:
K_M=Hash(K_M,Rand_Source)
4.目的设备主程序负责把接收的通知消息转交给目的设备的通知消息处理子程序执行。
目的设备的通知消息处理子程序可以对于源设备发送的“重新认证证书持有者标志不匹配”,“重新认证杂凑值不匹配”这样两类通知消息,终止这些通知消息所指明的会话,收回***资源,清除<K_M,ID_Source>。
本发明与现有技术相比具有的有益效果是:本发明综合考虑消费电子的多种接口,提供了基于公钥的一种认证和密钥协商方案。该方案在基本算法具有安全保障时,具有可证明的认证特性和认证密钥的秘密性及一致性。该方案同时优化了消息交换次数和计算代价,具有较高的效率。
本发明的上述认证密钥协商方式可以以协议的形式来实现,应用于参与认证密钥协商的源设备和目的设备中。
下面描述本发明的上述认证密钥协商协议的具体应用。
假设源设备A和目的设备B进行认证密钥协商和更新。设备A本地存储证书列表:设备证书Cert_A,设备A的签发机构证书Cert_A_Adm,签发Cert_A_Adm的机构的证书Cert_Root。设备B本地存储证书列表:设备证书Cert_B,设备B的签发机构证书Cert_B_Adm,签发Cert_B_Adm的机构的证书Cert_Root。设备A和设备B商定了一组算法和公开参数,包括签名算法ECCDSA,HMAC算法HMAC-SHA(key,content),椭圆曲线公开参数(Fq,E,G,n),|q|=192,|K_M|=256,椭圆曲线标量乘计算表示为xG,yG等。
设备A和设备B的DVI,HDMI或者POD-Host等接口在传输数据之前,会执行单向认证密钥协商和更新。设备A如果检测不到本地存储有共享密钥,则执行单向完全认证。设备A计算随机数1<x<n,发送设备A唯一标志ID_A和xG给设备B;设备B按照单向完全认证规定的步骤操作,发送Cert_B,Cert_B_Adm,yG和签名的杂凑值ECCDSA{HMAC-SHA([xyG]lsb192,ID_A)}给设备A,并按照规定计算认证密钥K_M;设备A检测接收的消息,完成对设备B的认证,认证成功则计算K_M,设置认证状态,否则发送通知消息给设备B报错。
设备A和设备B在DVI,HDMI,POD-Host等接口在执行单向认证密钥协商和更新时如果发现本地存储有共享密钥,则执行单向重新认证。设备A计算64比特随机数Rand_A,发送设备A唯一标志ID_A和Rand_A给设备B;设备B使用储存的密钥K_M计算ID_A||Rand_A的HMAC杂凑值,并发送设备B唯一标志ID_B和杂凑值给设备A;设备A验证杂凑值的正确性,从而确认设备B是否拥有相同的共享密钥,如果有则更新该密钥。
设备A和设备B在IEEE1394,USB等可能支持双向认证密钥协商和更新的接口间传输数据时,由设备B向设备A提交设备B的认证能力,设备A优先选择执行双向认证密钥协商和更新。如果设备A本地没有存储共享密钥或者目的设备的认证能力中显示目的设备没有存储共享密钥,则执行双向完全认证。设备A给设备B发送Cert_A,Cert_A_Adm和计算的xG;设备B按照双向完全认证的步骤给设备A发送Cert_B,Cert_B_Adm,yG和签名消息,签名的内容是使用xyG的部分信息作密钥对ID_Source进行HMAC-SHA运算得到的杂凑值;设备A验证接收的消息,完成对设备B的认证,发送签名消息给设备B,同时设置认证状态,计算和存储共享密钥。设备B检验接收的签名消息,结合第一步接收的消息,完成对设备A的认证,设置认证状态,计算和存储共享密钥。
设备A和设备B在选择执行双向认证密钥协商和更新后,如果目的设备存储有共享密钥,同时源设备也存储有共享密钥,则执行双向重新认证。设备A给设备B发送设备A唯一标志ID_A和Rand_A;目的设备发送ID_Des,Rand_Des和一个杂凑值,该杂凑值使用HMAC-SHA计算,密钥是本地存储的K_M的部分信息,杂凑的内容包括了设备A的标志和随机数,设备B的标志和随机数。设备A通过验证杂凑值来确认设备B和设备A具有相同的共享密钥,然后设备A按照规定计算并发送新的杂凑值给设备B,并设置认证状态,更新和存储共享密钥。设备B通过验证杂凑值来确认设备A和设备B拥有相同的共享密钥,然后设备B设置认证状态,更新共享密钥。