请教一下关于 激活(授权)的方案

7 小时 20 分钟前
 victimsss
最近有一个关于手动激活的需求,大概就是出售硬件之后,需要联网激活,不同设备的质保可能不一样。
目前我考虑的流程大概是:
1 、只生成两对密钥对,将设备私钥、服务端公钥烧录到所有设备上
2 、联网激活的时候,读取设备的指纹信息,使用设备私钥加密发送到服务端
3 、服务端用设备公钥解密确定产品信息,然后用服务端私钥生成一个 license 入库并下发
4 、设备端输入 license 后,会用服务端公钥解密,与本地指纹信息进行匹配,都符合则向云端发送激活请求
5 、最后完成激活。

想问一下:
1 、这样设计逻辑是否过于冗余或者是否闭环
2 、中间有无可能被篡改或者伪造信息。
3 、最好说一下更简单更成熟的方案。
1095 次点击
所在节点    程序员
9 条回复
89ao
7 小时 14 分钟前
不是设计者,我是用户。
反正经验来看,所有的不限次数的,基本都会被重复利用;
不联网续签的,也基本都会被滥用;
cassidy0134
6 小时 50 分钟前
@victimsss YubiHSM ,用这东西,这是个物理密钥,他插在哪儿,哪台机器能用。

本地程序调用 HSM 接口拿信息、key 、滚动 token ,上传远端验证,信息过期、key 不对、token 过期,直接拒绝。
YiXinCoding
6 小时 28 分钟前
看着就麻烦了。

1. 设备烧录一个全局唯一的 ID 和公钥。
2. 后台维护每个设备 ID 的质保有效期和激活状态(同一个 ID 二次激活需要人工审核)。
3. 设备联网的时候取到包含有效期和私钥签名的 License 存起来,每次设备启动的时候公钥验签一遍就完事了。

License 只有服务端的私钥能加签名,伪造不了。要破解只能重新烧录。
seers
6 小时 11 分钟前
其实你只需要服务端生产一套 key ,每次联网下发公钥就行,每个设备生成一套或者共用都行,设备信息用设备唯一 id 进行一次 aes 再 rsa
Huelse
6 小时 3 分钟前
注意对设备自身固件进行数字签名验证,并且使用 https 等加密通信,其余就正常联网验证流程。
ttkanni
4 小时 51 分钟前
纯用户视角,伪造设备指纹就破圈了吧,纯软(无硬件辅助)的设备指纹基本都难逃被伪造。


@YiXinCoding 此楼正解,大部分商业软件都是这个逻辑,要么人工审核要么设置 Rehost 限制。
YiXinCoding
4 小时 40 分钟前
ID 和程序烧录到芯片里面,然后加上物理防拆,像 POS 机、身份证读卡器、ETC 设备,这种都有防拆。谁来硬破都难。
realpg
4 小时 11 分钟前
既然联网了 直接要求在线登录就完事了
激活码这种旧时代的方案也就是放纵盗版以及评估没有破解价值的场景才有点意义
Lukedis
2 小时 29 分钟前
能联网激活,就不要考虑其他方案,除非不在意被破解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1097909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX