admin管理员组

文章数量:1567296

目录

前言:

一、什么是软件的 license

1.1 概述

1、定义与性质

2、主要内容

3、类型与分类

4、作用与意义

5、注意事项

1.2 商业软件 License进一步了解

1.3 为什么使用License授权?

1.4 License分类

二、如何实现License授权?

2.1 高性能Licensed的特征

2.2 对称加密与非对称加密:确保数据被正确的接受者接收

2.3 签名&验签:确保数据来自于正确的发送者

2.4 License文件的结构

2.5 生成License

2.6 加载License

1、准备工作

2、加载License文件

3、验证与测试

4、注意事项

2.7 验证License信息原理

1、数字签名技术

2、加密算法的应用

3、具体验证步骤

4、总结

2.9 找回License


前言:

你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。

一、什么是软件的 license

1.1 概述

软件的license,即软件许可证,是软件开发者向用户授予的一种法律许可,它规定了用户在使用软件时的权利和责任。从法律层面看,软件许可证是一种合同,它详细定义了用户可以使用软件的方式、范围以及可能存在的限制和条件

以下是关于软件license的详细解析:

1、定义与性质

  • 定义:软件许可证是软件开发者为了保护其知识产权而制定的法律文件,它明确规定了用户在使用软件时应遵守的规则和条件。
  • 性质:软件许可证具有法律效力,是软件开发者与用户之间的一种法律协议。用户在使用软件前,通常需要接受并同意软件许可证的条款。

2、主要内容

软件许可证通常包含以下主要内容:

  1. 软件使用权限:明确用户可以使用软件的具体方式,如安装、复制、修改、分发等。
  2. 限制与条件:规定用户在使用软件时应遵守的限制和条件,如使用范围、使用时间、使用对象等。
  3. 知识产权声明:声明软件的知识产权归属,并强调用户在使用软件时不得侵犯开发者的知识产权。
  4. 责任与义务:明确软件开发者与用户各自的责任和义务,如开发者提供技术支持的义务、用户合法使用软件的义务等。

3、类型与分类

软件许可证有多种类型和分类方式,常见的有以下几种:

  1. 开源许可证:如MIT许可证、GNU通用公共许可证(GPL)、Apache许可证等。开源许可证允许用户自由地使用、修改和分发软件,但通常要求用户在分发时包含原始许可证、版权声明和免责声明等。
  2. 商业许可证:商业软件通常使用商业许可证,用户需要支付费用才能获得软件的使用权。商业许可证的条款和条件更为严格,通常会对软件的使用范围、使用时间、使用对象等进行限制。
  3. 单次使用许可证:允许用户在一台计算机上进行一次性安装。
  4. 在线访问许可证:用户通过在线方式访问软件,需要保持订阅活跃状态以持续使用软件。
  5. 单次购买版许可证:用户只需为软件支付一次费用,在软件的激活周期内可不间断使用,但可能无法获得后续的更新或升级。
  6. 云服务许可证(Cloud Service License)

    随着云计算的普及,一些软件公司采用云服务许可证模型,用户通过订阅云服务来获得对软件的访问权。例子包括:Salesforce CRM: Salesforce提供云端的客户关系管理服务,用户通过订阅获得对其服务的使用权限。Microsoft 365: 用户可以通过订阅Microsoft 365云服务来获得对Office应用程序和其他Microsoft服务的使用权。

4、作用与意义

        软件许可证在保护软件开发者知识产权、促进软件创新和确保用户合法使用软件方面发挥着重要作用。它有助于维护软件市场的秩序和公平竞争,促进软件产业的健康发展。同时,软件许可证也为用户提供了在合法范围内使用软件的权益保障。

5、注意事项

        用户在使用软件时,应仔细阅读并理解软件许可证的条款和条件,确保自己的行为符合法律规定和软件开发者的要求。如有任何疑问或争议,应及时与软件开发者联系并寻求解决方案。

        综上所述,软件的license是软件开发者与用户之间的一种重要法律协议,它规定了用户在使用软件时应遵守的规则和条件。用户在使用软件前,应认真阅读并理解软件许可证的内容,以确保自己的行为合法合规。

1.2 商业软件 License进一步了解

在我们向客户销售商业软件的时候,常常需要对所发布的软件实行一系列管控措施,诸如验证使用者身份、软件是否到期,以及保存版权信息和开发商详情等。

考虑到诸多应用场景可能处于离线环境,无法依赖网络进行实时认证,所以还需要考虑单机认证时的防破解问题。总之,License许可证利用HTTPS网站的证书和签名技术,一方面证明当前使用者是申请License的本人,另一方面要防止恶意破解,并伪造篡改License达到白嫖的目的。

1.3 为什么使用License授权?

License的作用是什么呢?

收费软件的License其目的肯定是防止用户白嫖,所以License还应该具有以下一些功能:

  • 授权使用

明确用户需要满足的使用条件,如单用户、多用户、企业内部使用、全球使用等,并且通常会限定可安装和激活的设备数量

  • 限制功能

根据不同等级的License,软件可以提供不同等级的功能,例如基础版、专业版、企业版等,License可以解锁相应版本的功能。

  • 期限控制

规定软件的使用期限,可能是永久授权,也可能是订阅式授权,到期后用户需要续费才能继续使用。

  • 版权保护

重申软件的知识产权归属,禁止未经授权的复制、分发、反编译、篡改或逆向工程等侵犯版权的行为。

  • 法律保障

License作为法律合同,确立了软件提供商和用户之间的法律关系,明确了双方的权利和责任,如果发生违反协议的情况,软件提供商有权采取法律手段追究责任。

  • 技术支持和升级服务

部分License中会规定用户是否有权享有免费的技术支持、软件更新和维护服务,以及这些服务的有效期限。

  • 合规性要求

对于特殊行业或特定地区,License可能还涉及到满足特定法规、标准或认证的要求。

归纳起来,我们可以总结出License的作用是:

  • 控制软件使用者的使用权限

  • 申明软件所有者的版权

  • 规定软件的使用规范

最后两点主要是法律相关的,第一点才是本文的重点,即如何生成License,以及如何通过License对软件用户进行限制。

1.4 License分类

依据用途的不同,License可分为两大类别:商用License非商用License

非商用License主要服务于诸如展览展示活动、各类研发活动等多种非直接盈利性的应用场景;

商用License,则通常适用于那些开展商业运营活动的企业场所。

基于使用的期限,License可以划分为固定期限License和永久License两类

固定期限License在激活后的指定时间内有效,过了预设的使用期限,用户必须更新许可期限并通过重新激活才能继续使用

而永久License则是在激活后赋予用户无时间限制的使用权,一旦激活,无需担忧许可失效的问题,可以无限期地持续使用软件

二、如何实现License授权?

2.1 高性能Licensed的特征

要想生成一个安全性高的License,必须让其满足以下几个特征:

  1. 保密性

  2. 防篡改

  3. 时效性

  4. 可找回

保密性是指License里携带的data信息具有一定的隐蔽性,这样可以防止想要破解License的人寻找到生成License的规律,进而伪造自己的License。

防篡改是指防止License里携带的重要信息被篡改,例如License有效时间如果被篡改,那么License就起不到限制用户使用期限的作用了。

时效性是指License会记录软件可以使用的有效期,并在验证License的时候判断其是否过期。

可找回是指用户申请的License一旦丢失或者要续期,基于第一次申请License时创建的源文件,再一次生成新的License,新的License会携带用户当初申请时的信息

由于License必须满足以上特性,所以在介绍License实现原理之前,我们先来学习一下非对称加密和签名&验签。

2.2 对称加密与非对称加密:确保数据被正确的接受者接收

有非对称加密必然就会有对称加密,对称加密就是我们一般意义上的加密算法,这种算法在加密和解密时都使用同一个密钥,所以对称加密算法的密钥又叫做共享密钥。对称加密算法一般使用AES(Advanced Encryption Standard)加密算法。

非对称加密有两个密钥,一个公钥一个私钥。公钥是公开的,供多个人使用私钥是非公开的,仅一个人或者少数群体使用当非对称加密算法用作加解密时,公钥用来对明文加密,私钥用来给密文解密,这个顺序不能颠倒。你可以这样理解,密文是私密的东西,只有少数人才能解密,所以少数人手里的私钥用来解密,多数人手里的公钥不能解密只能加密。

为什么要区分公钥和私钥呢?直接使用一个共享密钥不行吗?可以,但是前提是你能够安全的将共享密钥传递给对方。共享密钥如何在线上安全的同步给对方是一个问题,毕竟在网络上传输信息很容易暴露。如果使用非对称密钥就可以将公钥同步给消息发送者,而消息接收者则保留私钥用来解密消息,这样即使公钥被中间人盗取,他也只能用来做加密操作而不能解密密文。

2.3 签名&验签:确保数据来自于正确的发送者

虽然非对称加密可以解决“密钥分配问题”,但是因为公钥是公开的,因此它不能防止伪造消息的问题。既然公钥可以公之于众,大家都知道你的消息要怎么加密,假如A想给B发送消息,那么中间人X可不可以将A发送的消息拦截,并将自己的消息加密以后发送给B呢?当然可以!

这就好比你买了一张周杰伦的演唱会的门票,我看到了之后自己伪造了一个一模一样的,如此一来我也可以去看周杰伦的演唱会。这时官方组织者发现了这个漏洞以后,规定周杰伦的演唱会门票需要带上官方印章才能进场,此时我就算把门票画的再惟妙惟肖,少了官方印章,我的这张假门票依然是张废纸。

如何解决这个问题呢?答案就是给你的消息“盖章”,即签名,签名就是认证你的身份。这里还是使用非对称密钥算法,只不过使用的顺序和加密消息时恰好相反。签名时是私钥用来加密,公钥用来解密。私钥只有发送者私有的,只有自己知道,网络中其他人是不知晓的,公钥是你公开的,使用者使用你公开的公钥,如果能够无差误的解开,这说明,文件没有被冒充。

你可以这样理解,给消息签名就好比给文件盖章,你会随随便便把你自己的印章交给别人来使用吗?当然不行!所以公钥不适合用来签名,私钥用作签名更加合理。需要注意的是签名所使用的密钥对由消息发送者生成并提供给消息接收者,这和给消息加密时正好相反,这样说来消息加密和消息签名这两个使用场景就需要生成两套密钥对。

出于性能方面的考虑,大多数情况下给消息加密还是使用的对称加密算法,为了解决“密钥分配问题”,只会在第一次发送共享密钥的时候才会使用非对称加密,一旦消息接收者得到了共享密钥,通信双方就能够通过共享密钥进行通信了。

此外,使用非对称密钥对消息签名也可以防止消息被人篡改,由于性能原因一般不会对消息原文进行签名,而是先通过哈希算法形成消息摘要,再对消息摘要签名消息接收者验签时会将消息的明文进行哈希,再将消息签名解密,两者比对如果一致则证明消息没有被篡改过。

2.4 License文件的结构

前面铺垫了一些生成License所必备的基础知识,我们学习了生成的License如果需要防止被人破解,那就需要具有保密性、防篡改和防伪造等特点。

接下来要考虑的是License需要携带什么信息就能让其既安全又能限制用户的使用权限。

License文件理论上来说至少需要以下一些信息:

  1. 软件所有者信息

  2. 申请授权时间

  3. 授权截止时间

  4. 软件使用者信息

下图是License文件流的结构图,主要字段有:

  1. 魔数值

  2. 分隔符

  3. 申请时间

  4. 到期时间

  5. 公钥的长度 & 公钥:如果想发给我正确的信息,就用这个License中的公钥加密,加密后,只有我能够解密,其他人都看不了。

  6. 携带信息的长度 & 携带信息

魔数值:和Java Class文件头的魔数CAFEBABE类似,License文件头的魔数也是起到了快速识别的作用,也有格式验证的作用。

分隔符:用来区分各个字段,将字段之间用分隔符隔开便于结构化管理。

申请时间:用户申请License的日期。

到期时间:License的有效截止日期。

公钥的长度 & 公钥:公钥长度用来记录公钥是多少字节,依据公钥长度就可以读取相应长度的公钥数据了。

携带信息的长度 & 携带信息:携带信息长度用来记录携带信息是多少字节,依据携带信息长度就可以读取相应长度的携带信息了。携带信息里通常会包含软件所有者、软件使用者、License唯一ID以及设备MAC地址等信息。

想好了License文件的结构,我们就可以开始生成License啦。

2.5 生成License

申请License的总体流程如下图所示。客户在软件服务商处申请License软件服务商生成License之后会返回给客户License文件,自己保留一份License源文件,源文件用作以后找回License。

客户拿到License文件,在安装、启动软件之后激活License。

生成License主要做了这样几个事情:

  1. 对需要携带的信息加密成密文

  2. 对密文签名

  3. 保存申请日期、有效截止日期和公钥

  4. 生成源文件

私钥1加密的作用是对License的安全加固。因为License实际上可以通过Base64解码得到里面的数据,包括公钥信息,这样客户就能够通过公钥将携带的信息解析出来,倘若携带有敏感信息就会造成安全问题。所以这里对携带的信息做了先加密后签名的处理。

另外需要强调的是,申请日期和有效截止日期也需要签名,但不需要加密。因为如果不签名的话,客户可以将日期解析出来之后篡改成自己想要的任何日期

2.6 加载License

软件加载license文件的过程是一个涉及多个步骤的操作,具体步骤可能因软件的不同而有所差异。以下是一个通用的、概括性的过程详解:

1、准备工作

  1. 获取License文件:首先,确保已经获得了适用于目标软件的License文件。这个文件通常包含了软件的许可证信息,如许可证ID、用户ID、产品ID、有效期、许可类型等。
  2. 备份:在进行任何重要操作之前,建议备份当前系统的关键数据,以防万一加载过程中出现问题导致数据丢失。
  3. 检查权限:确保具有足够的权限来执行加载License文件的操作。这通常意味着需要使用管理员账户登录到相应的系统或软件界面。

2、加载License文件

  1. 登录软件界面:使用管理员账户登录到软件的管理界面或控制台。
  2. 找到License管理选项:在软件界面中,找到与License管理相关的选项。这个选项可能位于“设置”、“管理”、“系统”等菜单下,具体名称因软件而异。
  3. 上传License文件:在License管理界面,选择“上传”、“导入”或类似的选项,然后浏览到存放License文件的目录,选择并上传该文件。
  4. 验证License信息:上传后,系统通常会自动验证License文件的合法性。这包括检查许可证ID、用户ID、产品ID等关键信息是否与软件要求相匹配
  5. 激活License:如果License文件验证通过,系统可能会要求激活License。按照界面提示完成激活操作。这通常包括输入一些额外的信息(如激活码、序列号等)或确认激活请求。

3、验证与测试

  1. 查看License状态:激活后,返回License管理界面查看License的当前状态。确保它已被正确加载并激活。
  2. 测试软件功能:为了验证License文件已成功加载并激活,可以尝试使用软件的一些高级或受限功能。如果一切正常,这些功能应该能够正常使用。

4、注意事项

  1. 遵守许可证条款:在加载和使用License文件时,务必遵守软件的许可证条款。这些条款规定了软件的使用范围、限制和条件。
  2. 定期更新:如果软件提供了License文件的更新服务,建议定期检查并更新License文件以确保软件的合法性和安全性。
  3. 联系技术支持:如果在加载或激活License文件过程中遇到任何问题,可以联系软件的技术支持团队寻求帮助。

请注意,以上步骤是一个通用的过程描述,具体步骤可能因软件的不同而有所差异。因此,在进行操作之前,建议仔细阅读软件的官方文档或联系技术支持以获取准确的指导。

客户申请到License之后,就可以去软件上面激活啦。激活License首先判断License是否合法,检查文件头魔数和分隔符是否正确,检查License是否过期等。

然后就是提取License的授权信息进行验签比对。如果有必要,还可以检查授权信息里携带的MAC地址是否与安装设备的MAC地址匹配。如果一切正常就可以通过验证。

2.7 验证License信息原理

验证License信息的原理主要基于数字签名技术和加密算法的应用,以确保License文件的真实性和完整性。以下是验证License信息原理的详细解释:

1、数字签名技术

数字签名技术是一种通过公钥和私钥加密解密过程来验证数据真实性和完整性的技术。在License验证过程中,数字签名起到了至关重要的作用。

  1. 私钥签名:在生成License文件时服务器会使用非对称加密算法的私钥对License的内容(如许可证ID、用户ID、产品ID、有效期等)进行数字签名(加密)。这个签名过程确保了只有拥有私钥的服务器才能生成有效的签名,从而保证了License文件的来源可靠性。

  2. 公钥验证:在客户端软件加载并尝试使用License文件时,会使用相应的公钥对签名进行验证。如果公钥能够成功验证签名,那么就可以认为License文件是真实有效的,并且其内容在传输过程中没有被篡改。

2、加密算法的应用

除了数字签名技术外,加密算法也被广泛应用于License信息的验证过程中。

  1. 加密License内容:在生成License文件时,可以使用加密算法对License的内容进行加密处理。这样,即使License文件被非法获取,没有相应解密密钥的攻击者也无法直接读取License的内容。

  2. 验证解密结果:在客户端软件加载License文件时,会使用相应的解密算法对加密的内容进行解密处理。然后,客户端会对比解密后的内容与预期的内容是否一致,以验证License文件的真实性和完整性。解密的密码在签名中?

3、具体验证步骤

  1. 读取License文件:客户端软件首先会读取用户提供的License文件。

  2. 提取签名和加密内容:从License文件中提取出数字签名和加密的内容部分。

  3. 使用公钥验证签名:利用公钥对提取出的签名进行验证,以确保License文件的来源可靠性和内容完整性。

  4. 解密并验证内容:如果签名验证通过,则使用相应的解密算法对加密的内容进行解密处理,并验证解密后的内容是否符合预期。

  5. 授权访问:如果所有验证都通过,则客户端软件会认为License文件是有效的,并允许用户根据License的授权信息访问软件的相关功能。

4、总结

验证License信息的原理主要依赖于数字签名技术和加密算法的应用。通过私钥签名和公钥验证的过程,可以确保License文件的真实性和完整性;通过加密和解密的处理,可以保护License内容的机密性。这些技术共同构成了License验证机制的核心,确保了软件授权的合法性和安全性。

2.9 找回License

本文标签: 之路软件知识产权保护原理License