您的应用程序必须执行以下步骤来验证许可证系统对挑战的响应:
1.接收对LSRequest或LSUpdate功能的呼叫的输出参数,以及许可证系统的响应。
2.使用RSA Data Security,Inc.提供的MD4消息摘要算法计算第二条消息摘要有关此消息摘要格式的其他信息,请参阅LS_CHALLDATA.
3.将此消息摘要与许可证系统的消息摘要进行比较。
接受结果只有两者相等。
您可以使用两种不同的方法来验证挑战响应:
*您可以将代码中的秘密和算法(算法方法)或
*您可以使用预期的回应(表查找方法)预先计算包含多项随机挑战的表格。
有关编码挑战的其他信息,请参阅反篡改指南.
使用这种方法,您可以将挑战算法和实际秘密值合并到程序代码中。该方法要求您采取措施来掩盖代码,并确保秘密本身不容易检测到。这些步骤在反篡改指南中描述。
通过这种方法,您可以在程序代码中加入有效的挑战响应的预计算表。该表应包含每个可能的挑战的行和每个唯一秘密响应的列。您的应用程序可以通过检查表中相应的挑战/响应交集来验证挑战。该方法要求您在编写应用程序时选择挑战值除了秘密。
如果入侵者成功复制了应用程序的挑战和响应表,他们也可以规避和替换合法的许可证提供者。如果表中的所有数据都是已知的,则应用程序的秘密是易受攻击的。在检查应用程序和许可证提供者之间的数据交换时,随着表的大小增加,复制整个表变得更加困难。因此,如果您使用表查找方法,请计算大量随机数值,以确保存在大量可能的挑战和响应。
在每个运行时间的开始,您的应用程序必须从表中选择一个挑战值。然后必须在调用LSRequest函数时传递此值。当呼叫返回时,应用程序必须将实际的挑战响应与该挑战值的预期响应进行比较。
以下是示例【】表。值的格式和大小只是示例。
挑战 值 | 秘密1 响应 | 秘密2 响应 | 秘密3 响应 | 秘密4 响应 |
1. 8675309 | 783ndmw732 | 3487dn262 | 367dkb37 | 476dndk263 |
2.63JSk23 | 63387d6b36 | 7b6b5u8b7 | 8hn65bv4g7 | 076bb856v6 |
3.833jh26 | 73d83m29s | 8N7GJ829n8 | 89bn73nBH | 89348nUU7 |
4.8LES654 | 733nbV8 | 8H8hu8 | B73h0dn39 | 7590nd73n |
5.28gHjB4 | 39834nd83 | 93n3d93n38 | 393n3ed83n | 983n38db38 |
如果应用程序使用上述示例表,并挑战【秘密3】第二个挑战值【63JSk23】,则会在LSRequest 函数的调用中传递此值。合法的许可证制度将以【8hn65bv4g7】的挑战回应和成功的状态作出回应。然后,应用程序将在表中的相应挑战/响应交集中检查条目,并将其与值【8hn65bv4g7】进行比较。在这种情况下,它会找到一个匹配,所以挑战响应是有效的。
除了包括上述示例之外的表格外,您的应用程序还可以包含与LSUpdate功能的调用一起使用的类似的挑战响应表。
有关编码挑战的其他信息,请参阅反篡改指南.