基于动态循环信息熵密码函数筛选技术.docVIP

基于动态循环信息熵密码函数筛选技术.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于动态循环信息熵密码函数筛选技术

基于动态循环信息熵密码函数筛选技术   摘 要:二进制代码中的密码算法识别与筛选对于恶意软件分析、密码算法应用安全性验证有着重要意义。分析了密码函数代码实现中内存数据操作特征和基本块循环结构特征,根据二进制数据的信息熵理论,实验验证了密码算法内存操作数据的高熵值特性,构建了基于动态循环信息熵的密码函数筛选模型,并采用动静结合的方法重构基本块循环中的动态读写内存数据。测试结果表明了筛选模型的可靠性和准确性。   关键词:密码函数;基本块循环;信息熵;动态插桩;内存数据重构   0 引言   密码算法[1]广泛地应用于通信、金融、军事等关键领域,对于保护信息安全具有举足轻重的作用;但恶意软件也往往采用密码算法的保护机制隐藏其静态恶意特征[2],加大了程序逆向分析人员的剖析难度。识别并分析恶意软件中的密码算法,研究密码算法在软件应用中的实际安全性,对于识别恶意代码、保障信息安全具有重要意义。按照分析手段不同,密码算法识别技术主要分为静态识别和动态识别两个方面。   在密码算法静态识别方面,Harvey[3]首先提出了密码算法的整体特征和局部特征,并针对统计特征采用线性加权方法对指令片段进行局部相似度判别,但判别结果的精确性不高;Wright等[4]在数据训练的基础上采用人工神经网络模型识别目标代码中的密码函数,识别结果受训练样本的限制;Leder等[5]通过采用手工调试的方式监控数据、文件读写操作的接口函数,并进行已知密码函数验证,识别效率不高;静态分析方法不能处理间接寻址和代码混淆,识别结果需要采用动态分析进行验证。   在密码算法动态识别方面,Lutz等[6]采用Valgrind动态插桩工具记录函数的输入与输出数据,并进行密码函数筛选;Wang等[7]根据密码算法动态统计特征,针对代码动态执行序列,采用累积百分比的方法计算每个执行点的统计值,能够定位出密码函数大致位置,但无法处理几个密码函数组合使用的情况;Zhao等[8]根据密码函数严格的输入与输出关系进行密码算法识别;Calvet等[9]根据循环中的动态输入输出参数进行已知密码函数验证。由于动态记录数据量庞大,密码算法动态识别与验证方法存在效率低下的不足。   本文综合代码动静态分析的优势,以密码函数动态基本块循环中内存操作数据的熵值特性为依据,提出一种准确高效的密码函数筛选方法。   1 密码函数代码实现特征分析   1.1 内存数据特征   内存是程序在执行过程中存储代码与数据的重要区域,堆栈是其重要组成部分。程序在动态执行过程中对内存的操作主要有:读、写、压栈、出栈,而在X86指令系统中不能对相同的内存区域同时进行读写操作,在指令中体现为至多有一个操作数是内存。   不同类型的密码函数对内存操作具有不同的特征形态。Hash算法将任意长度的输入映射为固定长度的输出,具有抗碰撞、不可逆的性质[1],这类算法在实现时通常会使用固定的数据进行初始化,并存储在内存片段中,循环执行逻辑函数后产生的中间结果与内存数据进行异或操作(分组链接模式),常常用于数据的完整性和一致性验证,以及组合密码算法中的加解密密钥生成。   对称密码算法在加密和解密时使用相同的密钥,通常会使用置换盒、替换盒等组件[1],这些组件在程序实现时会被预先加载或动态产生到内存中,加解密主函数读取输入数据(明文、密文和密钥)到内存中,完成加解密功能后,把输出结果保存在内存中。以AES(Advanced Encryption Standard)算法为例,分析代码实现时内存操作过程如图1所示。   BlowFish是Bruce Schneier于1993年设计的分组算法,该算法使用π的小数位填充PBox、SBox,并采用具有Feistel网络结构的加密主函数对密钥在PBox、SBox中扩散,该算法的测试结果表明加密主函数的内存读取数据具有很高的熵值;RC4是Ron Rivest在1987年设计的流密码,该算法使用00~FF的字节数据对大小为256B的数组进行初始化,并根据输入密钥对该数组进行扩散形成密钥表,该算法测试结果表明加密主函数的内存读写数据熵值都很高;WinRAR是常用的压缩软件,在压缩加密时采用了典型的AES算法,为了提高算法执行效率,该算法在实现中使用4×256的加解密双字SBox(代码运行时动态产生),测试结果表明加密主函数的基本块循环中内存读写数据熵值都很高;E2是日本NTT设计的分组算法,CSA是2002年公开的媒体流加密算法(包括一个分组密码和一个流密码),测试结果均表明加解密主函数基本块循环中内存操作数据都具有典型的高熵值特征;此外,Df和Uf的取值相对较低,但并不影响密码函数的最终筛选结果。   5 结语   本文研究了密码函数代码实现中的内存数据特征和基本块循环结构,并根据密码函数操作数据的

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档