首页 理论教育 客户端到服务器的质询回应:DOA/Handle技术与应用

客户端到服务器的质询回应:DOA/Handle技术与应用

时间:2023-11-23 理论教育 版权反馈
【摘要】:<ChallengeResponse>包含消息认证码,或来自服务器质询的数字签名。签名由一个指定签名摘要算法的UTF-8 字符串组成,后面跟随服务器质询的签名。服务器必须严格管理这些组,以避免产生无限循环。如果<ChallengeResponse>与<Challenge>相匹配,服务器将继续处理原来的请求并返回结果;否则,服务器将返回一个<ResponseCode>设置为 RC_AUTHENTICATION_FAILED 的错误信息。认证服务器将代表Handle 服务器来对<Challenge>的<ChallengeResponse>进行验证。

客户端到服务器的质询回应:DOA/Handle技术与应用

CHALLENGE_RESPONSE 的消息头必须将其<OpCode>设置为OC_RESPONSE_TO_CHALLENGE,并将其<ResponseCode>设置为0,它也必须和来自服务器的质询保持相同的<SessionId>。

CHALLENGE_RESPONSE 请求的消息体定义如下:

其中,<AuthenticationType>是一个UTF-8 字符串,它可以标识出客户端使用的认证密钥的类型。例如,如果客户端选择用密钥来验证,则该字段被设置为“HS_SECKEY”;如果使用公钥,则该字段被设置为“HS_PUBKEY”。

<KeyHandle>:是一个UTF-8 字符串,用于标注持有Handle 管理者公钥或口令的Handle。

<KeyIndex>是一个4 字节的无符号整数,表示持有管理员公钥或密钥的(<KeyHandle>)Handle 值的索引

<ChallengeResponse>包含消息认证码(MAC),或来自服务器质询的数字签名。如果<AuthenticationType>是“HS_SECKEY”,<ChallengeResponse>则由一个八位字节组成,后面是MAC,由八位字节对用于生成MAC 的算法进行标识。如果<AuthenticationType>是“HS_PUBKEY”,则<ChallengeResponse>包含服务器质询的消息体部分的数字签名。这个签名的生成分两步进行:首先,通过将要被签署的Blob 来计算一个单向散列值;其次,散列值通过使用私钥签署。签名由一个指定签名摘要算法的UTF-8 字符串组成,后面跟随服务器质询的签名。<KeyHandle>和<KeyIndex>指的是可被用来验证签名的管理员的公钥。(www.xing528.com)

Handle 管理员以分配给 Handle 的 HS_ADMIN 值来定义。每个HS_ADMIN 值定义一组授权于管理员的权限。它也为用来验证管理员的认证秘钥提供引用。对于具有多个HS_ADMIN 值的Handle,服务器将检查是否每个都具有足够的权限,以此来确定其<AdminRef>字段与<KeyHandle>和<KeyIndex>是否匹配。如果发现它们不匹配,但管理员组已被定义,则服务器必须检查所有管理组织的<KeyHandle>和<KeyIndex>是否有足够的权限。管理员组可以包含其他管理员组的成员。服务器必须严格管理这些组,以避免产生无限循环。

如果<KeyHandle>和<KeyIndex>并没有被任何HS_ADMIN 值引用,或者管理员组有足够的权限,服务器将返回一个<ResponseCode>设置为RC_NOT_AUTHORIZED 的错误信息;否则,服务器将按照如下操作继续认证客户端:

如果<AuthenticationType>是“HS_PUBKEY”,则该服务器将检索基于<KeyHandle>和<KeyIndex>上管理员的公共密钥。公钥可以被用来验证针对服务器<Challenge>的<ChallengeResponse>。如果<ChallengeResponse>与<Challenge>相匹配,服务器将继续处理原来的请求并返回结果;否则,服务器将返回一个<ResponseCode>设置为 RC_AUTHENTICATION_FAILED 的错误信息。

如果<AuthenticationType>是“HS_SECKEY”,服务器将向认证服务器发送一个验证请求,即Handle 服务器通过引用<KeyHandle>来管理Handle。认证服务器将代表Handle 服务器来对<Challenge>的<ChallengeResponse>进行验证。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈