2009-07-17 65 views
4

我需要在嵌入式协议栈中实现运行时授权。如何实施运行时授权?

我已经对如何实现这一点有了一个想法,但我有兴趣听到任何替代方法或任何需要注意的缺陷。您可以假设每个运行堆栈的设备都有一个唯一的硬编码标识符(等同于MAC地址)并可以访问某些非易失性存储器。

我的计划方法是提供一个通过散列函数从制造商应该存储在非易失性存储中的设备标识符中生成的许可证密钥。堆栈将使用相同的散列函数对标识符进行散列处理,并在运行之前验证它是否与存储的键匹配。

回答

3

您必须确保攻击者无法轻易重新计算许可证。这样做的最明显的方法是使用您的私钥将许可证作为设备标识符的签名,然后让应用程序使用将嵌入软件中的公钥对其进行验证。

您还需要确保软件没有被篡改,但这完全是另一回事。

+0

顺便说一句 - 我最近不得不实施一个运行时许可证,虽然在我的情况下,它并没有绑定到特定的硬件。我的解决方案是将所有许可证信息编码为JSON对象,然后使用我的服务器的私钥(OpenSSL调用RSA_private_encrypt)对其进行加密。这基本上是使用签名的明文作为整个消息而不是散列进行签名,从而产生一个不透明的比特字符串,它比发送明文和签名哈希中的数据更小且更易于传输和验证。 – Guss 2017-10-11 12:18:53