请教一下关于 激活(授权)的方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
victimsss
V2EX    程序员

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

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

    想问一下:
    1 、这样设计逻辑是否过于冗余或者是否闭环
    2 、中间有无可能被篡改或者伪造信息。
    3 、最好说一下更简单更成熟的方案。
    15 条回复    2024-12-18 13:19:20 +08:00
    89ao
        1
    89ao  
       297 天前
    不是设计者,我是用户。
    反正经验来看,所有的不限次数的,基本都会被重复利用;
    不联网续签的,也基本都会被滥用;
    cassidy0134
        2
    cassidy0134  
       297 天前   1
    @victimsss YubiHSM ,用这东西,这是个物理密钥,他插在哪儿,哪台机器能用。

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

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

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


    @YiXinCoding 此楼正解,大部分商业软件都是这个逻辑,要么人工审核要么设置 Rehost 限制。
    YiXinCoding
        7
    YiXinCoding  
       297 天前
    ID 和程序烧录到芯片里面,然后加上物理防拆,像 POS 机、身份证读卡器、ETC 设备,这种都有防拆。谁来硬破都难。
    realpg
        8
    realpg  
    PRO
       297 天前
    既然联网了 直接要求在线登录就完事了
    激活码这种旧时代的方案也就是放纵盗版以及评估没有破解价值的场景才有点意义
    Lukedis
        9
    Lukedis  
       297 天前
    能联网激活,就不要考虑其他方案,除非不在意被破解
    heiya
        10
    heiya  
       296 天前
    @YiXinCoding 请教一下。我的需求是有不能联网的情况且代码要离线部署在客户服务器上,具体的要求是一个组织下有若干台设备,一个激活码控制着组织下的所有设备。现在的问题是纯软件的情况下不能百分百保证 A 组织的激活码不能被 B 组织使用,应该怎么设计呢?
    YiXinCoding
        11
    YiXinCoding  
       296 天前
    @heiya 用机器码啊(也就是他们说的指纹)
    1. 每个服务器的机器码是唯一的(根据 CPU 、内存、硬盘、操作系统等信息生成)
    2. 程序启动先把机器码打印出来,让客户把机器码发来。
    3. 然后管理员再根据机器码生成一个 License 给客户。
    4. 然后客户再填入 License 激活,这个 License 就只能用于这一个机器码。
    heiya
        12
    heiya  
       296 天前
    @YiXinCoding 感谢 豁然开朗
    goodhunter
        13
    goodhunter  
       295 天前
    @YiXinCoding 如何确认 license 只用于这一个机器码呢?感觉是不是应该分别 给 A 组织和 B 组织每台设备一个唯一的 ID ,这个 ID 跟设备的机器码绑定,然后到管理员那里生成,客户拿到返回的 license 激活,是不是更完善?
    YiXinCoding
        14
    YiXinCoding  
       295 天前
    @goodhunter
    1. 首先 License 是经过私钥签名的,用公钥验签,其它人没有私钥无法生成签名,这个就保证了 License 无法伪造。
    2. 然后 License 内容里面包含机器码、有效期。对这个内容进行加签。
    3. 程序启动每次计算的机器码都是一样的,和 License 里的机器码对比,一致才算校验通过。
    lyxxxh2
        15
    lyxxxh2  
       295 天前

    激活文件是.pem 。
    我还没交钱,可能交钱的时候问我机器码吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1082 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:14 PVG 07:14 LAX 16:14 JFK 19:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86