我们有一个带有QRCode的物理产品,如下所示:
http://example.com/product/[encryptedProductKey]当qrcode被扫描时,我们需要签入一个应用程序,如果产品密钥是有效的,并且是由我们制作的。
qrcode将被激光到产品上,以后不能更改。
不幸的是,我们只是一家小公司,这里没有人真正了解加密技术。有没有一种虚拟的方法来解决这个问题?
发布于 2022-07-30 00:25:30
您可能实际上不需要加密,而是需要MAC:消息身份验证代码或数字签名。
如果您同时生成和验证代码,那么MAC就足够了(我假设是这样的吗?)
在这种情况下,产品代码可以是一组随机字符(密码强随机数)和HMAC (基于哈希的消息验证代码)。这可能会很长,但会是一个简单的解决方案。
这些步骤类似于(下面是伪代码):
代码= cryptoRandom( 16 ) // 16强随机字节标记=HMAC(代码,secretKey)
要验证密钥:
。
tag = HMAC(code,secretKey)
tagFromCustomer) (标记,secureCompare)
请注意,您的必须,而不是使用==来比较标记,因为这将容易受到定时攻击。您的语言应该有一个安全的比较库。请参阅What's the difference between a secure compare and a simple ==(=)
作为另一种选择,如果希望将客户密钥保持在32字节以内,则可以采用以下方法。然而,这将需要您为每个客户保存一个秘密密钥。
生成秘密密钥
代码= HMAC("0000000000000000",customerSecretKey) )
若要验证,请使用客户密钥进行验证。
secureCompare(customerCode, HMAC("0000000000000000", customerSecretKey))为了使其安全,客户密钥必须是机密和唯一。
https://stackoverflow.com/questions/73148478
复制相似问题