首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们需要加密产品序列号,必须在应用程序中解密

我们需要加密产品序列号,必须在应用程序中解密
EN

Stack Overflow用户
提问于 2022-07-28 06:55:32
回答 1查看 46关注 0票数 0

我们有一个带有QRCode的物理产品,如下所示:

代码语言:javascript
复制
http://example.com/product/[encryptedProductKey]

当qrcode被扫描时,我们需要签入一个应用程序,如果产品密钥是有效的,并且是由我们制作的。

qrcode将被激光到产品上,以后不能更改。

不幸的是,我们只是一家小公司,这里没有人真正了解加密技术。有没有一种虚拟的方法来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-07-30 00:25:30

您可能实际上不需要加密,而是需要MAC:消息身份验证代码或数字签名。

如果您同时生成和验证代码,那么MAC就足够了(我假设是这样的吗?)

在这种情况下,产品代码可以是一组随机字符(密码强随机数)和HMAC (基于哈希的消息验证代码)。这可能会很长,但会是一个简单的解决方案。

这些步骤类似于(下面是伪代码):

  1. 生成一个强密钥,用于生成和验证代码(不共享此)
  2. 生成产品代码:

代码= cryptoRandom( 16 ) // 16强随机字节标记=HMAC(代码,secretKey)

  1. 用base64
  2. 编码密匙例如,将生成的base64字符串交给客户

要验证密钥:

  1. 将已解码的产品客户密钥字符串拆分为代码并标记为

  1. 从代码生成标记

tag = HMAC(code,secretKey)

  1. 检查您生成的标记是否与客户键中的标记匹配

tagFromCustomer) (标记,secureCompare)

请注意,您的必须,而不是使用==来比较标记,因为这将容易受到定时攻击。您的语言应该有一个安全的比较库。请参阅What's the difference between a secure compare and a simple ==(=)

作为另一种选择,如果希望将客户密钥保持在32字节以内,则可以采用以下方法。然而,这将需要您为每个客户保存一个秘密密钥。

  1. 为客户

生成秘密密钥

  1. 使用该密钥通过使用零字符串(例如16)的HMAC生成客户密钥。

代码= HMAC("0000000000000000",customerSecretKey) )

  1. 给客户代码

若要验证,请使用客户密钥进行验证。

代码语言:javascript
复制
secureCompare(customerCode, HMAC("0000000000000000", customerSecretKey))

为了使其安全,客户密钥必须是机密唯一

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73148478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档