拥有知识产权的软件一般采取软件保护手段,需要使用某种方式激活软件才可以使用。软件激活本质是对密文数据进行比较,而密文数据是由软件开发商根据目标机器的特征数据进行加密产生的。激活过程是在认证服务器或者目标机器上完成,在这个过程中,数据加密方案至关重要,设计良好的加密方案,难以被破解、复制或盗用,软件保护工作做的很完善。本文分析现有软件保护方式,借鉴基础软件加密算法基础上,设计出一种高强度、难破解的混合加密方案,并在软件工程实践中验证该混合加密方案的可行性。
1 软件保护
为了保护软件开发商的权益,防止软件被复制、盗用或未经认证而非法使用软件,一般采用软件授权方式对软件进行认证激活,只有经过认证激活的软件才能正常使用,用户才能使用软件提供的各项功能、服务。随着软件普及程度、互联网技术的发展,软件的功能模块越来越多,软件开发商希望按照功能模块来销售软件;随着销售模式的发展,用户希望按照使用时间、次数来购买和使用软件;随着用户数量的增长和软件版本的增加,软件开发商需要更好的管理软件销售和使用,因而软件授权保护的研究与应用越来越重要。从技术角度,软件授权可以分为在线授权和离线授权。
1.1 在线授权
在线授权,是一种新兴的、基于认证服务器的授权方式,以互联网技术为基础,替代传统的授权文件、序列号或激活码方式。应用程序通过开发商发放的认证码与认证服务器建立连接,调用服务器接口完成授权过程。在线授权采用高强度的通信加密技术,并且服务器远离软件用户,它的软件保护强度非常高。除此之外,应用程序在后台可以周期访问认证服务器,为开发商收集软件用户使用状态、统计软件使用情况、快速升级与维护提供了技术手段。
1.2 离线授权
离线授权即传统意义上通过注册码、序列号、密钥或者授权文件,在本地完成应用程序激活的方式。通常设计实现上有两种形式:硬认证激活、软认证激活。
硬认证激活需要借助额外硬件设备,在硬件设备中存储应用程序激活必须的认证数据,只有认证数据能被应用程序读取识别,应用程序才可以正常使用。“加密狗”是一种硬认证激活方式的一种实现,插在计算机USB口或串口上的便携存储设备,早期多为串口形式,现在绝大部分都是USB口形式。
软认证激活是另外一种软件认证激活形式,通常由软件开发商向用户提供特征数据采集工具。用户在目标计算机上运行该工具,将工具采集的特征数据提交给开发商,开发商依据特征数据生成激活密钥、序列号、激活码或者授权文件。用户再使用开发商提供的序列号、激活码或者授权文件完成应用程序认证激活。特征数据即工具软件采集用户计算机产生的硬件特征、软件特征数据。硬件特征数据指主板序列号、磁盘序列号、物理地址等数据;软件特征数据指计算机名称、用户名称等数据。激活密钥、序列号、激活码或者授权文件都是对特征数据进行加密、编码后产生的。离线认证激活方式是现在软件主流认证激活方式。
2 加密方案设计及应用
2.1 加密算法概述
软件保护中使用密码学知识来完成特征数据的保护、敏感信息的验证,涉及内容涵盖信息资源机密性、信息鑒别、信息报文完整性和不可否认性等相关问题。数据加密技术是最常用的软件保护技术手段,其基本思想是通过变换信息的表示形式来伪装需要保护的敏感信息,使非授权者不能了解被保护信息的内容。实施过程中利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。数据加密技术包括两个元素:加密方案和密钥。加密方案是将普通的信息资源或者可以理解的信息资源与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码加密和解密的一种数据。在密钥保护中,可通过适当的密钥加密技术和管理机制来保证信息资源的安全。
数据加密算法基于相应的数学理论,发展至今,已经产生了大量优秀的加密算法,通常分为两类:对称密码算法和非对称密码算法。Blowfish算法是著名的对称加密算法,是一种将64位数据分组及使用可变长度密钥的对称密钥分组加密算法,可用来加密64位长度的字符串。32位处理器诞生后,Blowfish算法因其在加密速度上的优越性而引起人们的广泛关注。Blowfish算法具有加密速度快、紧凑、密钥长度可变、免费使用等特点,已被广泛使用于软件保护、软件认证激活。算法核心在于子密钥的生成,它将变长密钥扩展成总长4168 比特位的子密钥数组。算法中使用了大量的子密钥,而子密钥又依赖于用户密钥,实际加密解密过程中使用的是更新后的子密钥数组,子密钥即P数组和S盒。算法输人64位明文信息,经过加密运算,输出64位密文信息。
MD5的全称是Message-digest Algorithm5(中文译作信息摘要算法5),为计算机安全领域广泛使用的一种散列算法,用以验证消息的完整性、确保信息传输的正确性,是著名的非对称加密算法。它经MD2、MD3和MD4发展而来,在20世纪90年代初诞生。MD5算法可简要叙述为:MD5以512位分组来处理输入的信息资源,且每一分组又被划分为16个32位子分组,经过了一系列循环处理,算法的输出四个32位分组,将这四个32位分组顺序组合后生成一个128位散列值。MD5算法具有输出长度固定、目标值容易计算、抗修改性强和超低碰撞概率的特点。对任意长度的数据,算法输出固定128位散列值;对原数据的任何修改,即便是修改一个比特位,所得到的散列值都不同的;已知原数据和所生成散列值,想找到一个具有相同散列值的数据(即伪造数据)是非常非常困难的。
2.2 加密方案设计
在实际使用过程中,使用单一加密算法作为加密方案对信息资源进行加密保护往往无法满足应用需求。其中Blowfish算法采用变长用户密钥,算法加密解密核心在于用户密钥的选择和保护,开发者往往经常使用一些弱用户密钥对信息资源进行加密,导致Blowfish算法存在着很大的安全隐患 。然而简单的MD5加密也是没有办法达到绝对的安全的,随着技术的不断进步,普通的MD5加密有多种暴力破解方式,因此如果想要保证信息数据、资源的安全,必须要设计新型加密方案。本文将混合使用上述两种加密算法,设计设计一种新型的、高效的、破解难度高的混合加密方案,以增强安全性。加密方案核心步骤如下:
(1)对原始信息资源使用MD5算法进行加密,产生128位散列值;
(2)将步骤a产生的固定长度散列值作为Blowfish算法的用户密钥,初始化Blowfish加密算法;
(3)使用初始化完成后的Blowfish算法对原始信息资源的进行加密,加密后即会产生高安全性的密文数据。
2.3 方案工程应用
在实验室工程应用中对本文设计的混合加密方案进行验证,对工程应用中的关键部分给出伪代码实现。本实验室工程应用设计以软件授权文件形式试验、验证混合加密方案的先进性、可行性和可实施性,其中授权文件中含有用于比较验证的密文数据。
生成授权文件中密文数据的伪代码如下:
认证激活过程即读取授权文件中的密文数据,然后扫描目标机器硬件特征、软件特征数据,根据特征数据生成密文数据,将新生成的密文数据与授权文件中读取的密文数据进行比较,密文数据相同即认证激活成功,否则认证激活失败,实现部分伪代码如下:
3 结束语
使用激活密钥、序列号、激活码或授权文件等方式认证激活软件是软件开发商保护软件知识产权的常用技术手段,但是上述技术手段存在被破解的风险。随着基础数学、计算机科学、密码学等基础科学的发展,对加密算法研究的升入,互联网技术的进步,使用单一加密算法的加密方案被破解的风险越来越大。为了降低被破解的风险,应当设计新型加密方案,混合使用不同类型、用途的加密算法,才能降以指数级提高破解难度,降低加密方案被破解的风险。本文所设计的新型加密方案组合使用Blowfish算法和MD5摘要算法,安全系数高、破解难度高,在实验室工程应用中通过验证,具有先进性、可行性和可实施性,可以作为一种先进加密方案推广使用。
参考文献
[1]王津涛,覃尚毅,王冬梅.基于MD5的迭代冗余加密算法.计算机工程与设计,2007(28).
[2]钟黔川,朱清新.Blowfish密码系统分析[J].计算机应用,2007(27).
[3]高博,李彦.一种基于硬件特征和动态许可证的服务器端软件授权认证模型[J].计算机工程与科学,2013(35).
[4]陈志伦.一种基于RSA/IDEA加密License文件的软件保护方案[J].计算机应用与软件,2005(22).
[5]毛明,秦志光,陈少暉.破译MD5算法关键技术探索[J].计算机应用,2009(29).
作者简介
商开拴(1985-),男,河北石家庄市人。大学本科学历。现为中国电子科技集团公司电子科学研究院职工。主要研究方向为系统软件设计与集成。
作者单位
中国电子科技集团公司电子科学研究院 北京市 100041