许可证加解密

license服务器
根据菜单选项制作明文,包括了:
    序列号:基于硬件特殊mac计算
    signature:文件利用公钥计算
    功能选项:url过滤,病毒扫描,云查杀等一些特有服务功能
    pem:.pem这种文件就是一个X.509的数字证书,里面有用户的公钥等信息
    
加解密过程:
文件数据(4的倍数检查)->EVP_DecodeBlock(4:3)->license_enc(通过key)->buff

1、base64编解码

license文件是base64编码,需要转换为base编码
base64是将字符的assic码,转换为都在0-64的可见范围内,不会有特殊符号“:”等影响数据头,从而影响解析
字符8位只取低6位,高补0,也就是3个8位变4个6位。
这里有可能会末尾signature多“=”,由于之前的license文件的位数不是6的倍数
解码时候需要删除=右边数据

Base64编码函数

Void EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
功能:进行Base64数据编码, 适用于小量数据。
参数:t:[OUT]编码后的数据。F:[IN]待编码的数据。N:[IN]待编码数据的长度
返回值:编码后的数据长度。

Base64解码函数

Void EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
功能:进行Base64数据解码, 适用于小量数据。
参数:t:[OUT]解码后的数据。F:[IN]待解码的数据。N:[IN]待解码数据的长度
返回值:解码后的数据长度。

2、rc4加解密
在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。
它加解密使用相同的密钥,因此也属于对称加密算法
由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解
根据固定字符串生成rc4_key,进行解密,生成明文,得到了license的内容和signature
密钥长度范围为 1-256 字节,没有任何的分析对于密钥长度达到128位的RC4有效
license_passwd[16]="legendsecbeijin";

3、sha一致性判断
安全哈希算法(Secure HashAlgorithm),接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文
HA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32bit
获取serial_num和signature之间的内容,生成sha值,
signature=后面的内容是base64编码,需要先去掉=和=右边多的内容,
rsa解密后,得到明文,然后计算得到sha值,
解密得到的sha和自己生成的sha对比判断是否一致

MD5最后生成的摘要信息是16个字节,SHA1是20个字节

4、RSA_verify,RSA是一种非对称算法
对称算法:有发送密钥的过程,双方密钥一致
非对称算法:一方或者机构生成一对密钥,有公钥和私钥,私钥自己保存,发送公钥,可以互解密
数字签名:非对称加密算法,机构颁发公钥私钥,公钥公开,私钥为公司做license服务器私有

根据publickey解密signature内容,rsa解密后得到明文


5、md5值判断是否重复导入
(Message Digest algorithm 5,信息摘要算法),一般利用md5来验证文件下载是否完整
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

根据signature之前内容,生成md5值
第一次根据license_back文件存放的上次导入的md5值对比判断重复
第二次根据文件中的md5值对比判断重复导入

6、序列号的计算加解密
根据mac地址计算md5
根据md5计算sha
根据sha标准输出40位16进制
12d660f3e63744676772337af652afcf04a588dc

7、bash的计算和加解密
根据mac地址计算出serial num
srand(tm)设置产生一系列伪随机数发生器的起始点
tm+rand()+serial===>xxx
计算xxx的md5输出,保存到文件/secgate/etc/conf/license/

解密就是md5输出和输入字符串之间两者关系解密,和serial无关了
时间1800秒,30分钟update一次

导入过程:
    安全    
        校验硬件序列号
        检查文件生产时间
        检查文件内容sha
        检查重复导入md5
    时间
        分类覆盖
        计算叠加
    意外
        初始
        时间更新
    告警
        一天一次
        5秒一次

序列号        serial
生产时间    grant_time
功能项目    mode
签名        signature

上一篇:c – 如何使用函数签名的typedef作为std :: function的类型参数?


下一篇:微信config:invalid signature这个错误的解决办法