您当前所在位置:主页 > 新闻中心 > 行业动态 >
新闻中心 / News
联系智融 / CONTACT US

技术经理:13871093995

邮箱:gongch@zronggsoft.com

QQ: 点击这里给我发消息 点击这里给我发消息
行业动态

多密钥加密方法的实现

发布时间:2015-06-15 14:25
  为评价多密钥加密方法,本文在Linux/IA32平台上利用二进制代码翻译工具PIN开发了原型系统,实现了多密钥加密防御方法。
  
  1.原型系统PIN不需要源码、调试信息等附件的信息,并且在处理器运行指令前,能实时检测即将运行的指令,在被插桩指令运行前可执行新生成的代码,并在代码运行完后执行被插桩的指令。利用PIN所开发的原型系统的框架.
  
  分析程序错插桩程序高技术通讯2014年4月第24卷第4期原型系统主要由PIN和利用PIN所提供的应用程序编辑接口,API)函数开发的Pintool组成。其中Pintool中的分析程序(analysis routines)用于判断即将运行的指令是caU指令或ret指令,插桩程序则用模拟的call操作和模拟的ret操作替代原cau指令和ret指令。模拟的call操作可以将即将压人栈中的返回值与与通过哈希运算得到的指定密钥(来自密钥集R)异或后再压人栈中,实施加密操作。模拟的ret操作则是将栈中的返回值取出后,并与匹配的密钥异或后再放人指令寄存器企业信息门户(ente印rise,EIP)中实施解密操作。同时为保证多密钥方法的随机性,在每一次程序运行前随机生成密钥集尺和随机值r,并随机设置密钥指定位n。
  
  2.设置诱饵密钥由于在开发原型系统过程中借助PIN,因此PIN也需要作为可信计算基(tmrted computing base,TCB)的一部分,假设其不受攻击的影响。然而作为软件,不能保证PIN本身不存在漏洞。若攻击者利用PIN或者其他类似的动态二进制翻译工具的漏洞直接获得密钥集中的全部密钥和随机值r,则密钥指定位n的大小和位置也能被猜到。相对于通过泄露的加密地址值间接得到密钥的方法,攻击者可以更方便地通过对二进制翻译工具的攻击直接获取密钥。
  
  为应对针对二进制翻译工具的攻击,缩小可信计算基的范围,一种有效的防御方法是在密钥集中增加诱饵密钥。诱饵密钥在程序启动时与其他真正用于加解密过程的密钥同时生成,但诱饵密钥并不会真正用于加解密中。诱饵密钥的存在是为了提高攻击者在获得真正密钥后猜测指定位n的难度,如图5所示,在连续2‘个密钥前后均设有诱饵密钥。
  
  由于存在诱饵密钥,攻击者需要多次获取加密后返回地址值,然后通过异或运算判定真密钥,这种穷举方法对于攻击者来说难度较大。本文第3节将详细分析诱饵密钥的有效性。
  
  值得一提的是,既然攻击者可以通过对原型系统的攻击直接获取密钥,攻击者也能篡改在原型系统上保存的密钥值。因此为了避免关键数值被直接篡改,需在系统产生密钥集R和随机值r后,将其设置为可读,任何改变R和r值的写操作都被视为攻击,从而避免攻击者直接攻击原型系统后篡改关键数值。
  
  密钥指定位-密钥集R:诱饵密钥诱饵密钥3.异常情况的处理程序在正常执行时,进入被调用函数前都会执行call指令,而从被调用函数返回时执行ret指令。
  
  但仍然会出现特殊情况,导致程序执行时call类指令和ret指令不会成对出现。其中一类情况是Unix信号处理,当控制流转移到信号处理函数时,返回地址值在不执行call指令的情况下仍被压入栈中,此时栈中的返回地址值未被加密。在执行ret操作后会出现错误,控制流将被转移到未知地址处,引起程序异常。为了避免此类异常情况,可以在实现时加入对信号的检测,当接收到信号并执行信号处理程序时,将栈中返回地址值加密。
  
  另一类情况是延迟绑定,如在ubuntu系统中,实现延迟绑定的函数之一-dLnld—di—serinf0在获取被调用函数地址后,控制流通过跳转指令而非cau指令转移到一dl—make—stackexecutable函数中,而该函数将通过ret指令返回。由于一dl—Itld—di—seri山函数执行后所获得被调用函数的地址存储在寄存器%eax中,因此为避免此类引发加解密异常的情况,可在一dl-nld—di—sednfo函数执行后,即执行跳转到一dl—make—stackexecutable函数的语句前,对寄存器%ea】【的值加密。

上一篇:多密钥加密方法

下一篇:无纸化办公阅读答案

 
 
点击这里给我发消息

经理电话:13871093995

-->

报价申请
加密软件价格申请
技术咨询
加密软件技术咨询
关注我们

智融科技