注意:这是Microsoft Windows的将来版本中将支持的技术的初步文档。
LS_CHALLDATA结构在LS_CHALLENGE结构中传递。LS_CHALLDATA结构将挑战从应用程序传递到许可证系统,并将许可证系统的响应传递回应用程序。
typedef结构{_LS_CHALLDATA
LS_ULONG SecretIndex;
LS_ULONG Random;
LS_MSG_DIGEST MsgDigest;
} LS_CHALLDATA;
会员
SecretIndex
指定要挑战的秘密值的索引。注意:秘密索引是基于1的,所以第一个秘密必须具有1的索引。
随机
指定一个随机的32位值。
MsgDigest
包含由RSA Data Security,Inc.的MD4消息摘要算法计算的消息摘要的结构
备注
在基本的挑战协议中,应用程序必须选择要挑战的秘密的索引,并且必须生成一个随机数。然后必须使用MD4消息摘要算法计算消息摘要。算法的输入是通过将输入参数连接到被调用的函数,随机数,被挑战的秘密的索引和实际的秘密值来形成的。第一个输入参数应该是被调用的许可证服务功能的名称,LSRequest或LSUpdate.所有参数应按照这些功能的原型指定的顺序,您应排除【挑战】和【LicenseHandle】参数的值。复制没有空终止符的字符串参数。然后应用程序将算法输出传递给许可证系统。
许可证系统对消息摘要进行认证,并计算一个新的消息摘要,包括许可证服务功能的输入参数,输出参数,随机数,要挑战的秘密的索引【,】和实际秘密值。最后一个输出参数应该是返回的状态。这个新的消息摘要被传回给应用程序,而应用程序反过来认证它。所有参数应符合LSRequest或LSUpdate功能原型中指定的顺序,您应排除【挑战】和【LicenseHandle】参数的值。请注意,实际的秘密值不会以纯文本形式在应用程序和许可证系统之间传递。
如果函数【h(x)】是给定输入【x】返回MD4消息摘要算法的输出的算法,那么以下简要说明基本协议。
应用程序将LS_CHALLDATA结构传递给许可证系统:
【R, X,】 【h】(【in】 + 【R】+ 【X】+ 【S (X)】)
许可证系统将新的LS_MSG_DIGEST传递给应用程序:
【h】(【in】+【出】+ 【R】+ 【X】+【S (X)】)
其中【R】是随机数,【X】是要挑战的秘密的索引,【in】是对输入参数进行编码的字节流,【S】表示秘密,【S (X)】是实际的秘密值,【出】是对输出参数进行编码的字节流,+表示级联。
如果LS_CHALLENGE结构中指定的协议不是LS_BASIC_PROTOCOL,则此数据格式可能无效。其他协议可以定义自己的LS_CHALLDATA格式。
也可以看看