简述白盒加密:
说到加密,自然少不了密钥。密钥的存储,可以加密后写在代码里,一起编译到最后的二进制文件中,也还可写个函数,用代码来生成密钥等。这些方法,对于黑盒攻击来说,其实都是相对来说比较安全的。但是还有另外一种攻击叫做白盒攻击,比黑盒攻击更进一步,拿到了加密设备的运行环境,包括内存信息,磁盘的读写权限等。此类攻击就可以dump出内存的数据,从而使运行在内存中的密钥不再安全。
白盒加密就是为白盒攻击而生,它的目的是不在运行环境中出现完整的密钥。为此,首先要对密钥本身做尽量复杂的混淆,同时提供函数来处理。举个例子,比如明文密钥是abcd,混淆后的密钥变成了非常复杂的矩阵,根据算法,每次生成的4个中间密钥,aefg,hbigk,lmcn,opqrstd,根据某个算法,用这些密钥生成4个密文,然后在把4段密文用算法生成一段密文,如此可以不断重复,直到最后生成密文。整个过程中最原始的密钥一直没有出现在内存中,白盒攻击想拿到密钥难度就大大增加了。
白盒加密原理:
什么是“白盒”什么是“黑盒”
黑盒:传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并未实质性地接触到密钥(执行加密或者解密的算法)或者任何内部操作,仅仅能观察到一些外部信息或者操作,这些信息包括系统内的明文(输入)或者密文(输出),并且认为代码执行以及动态加密不可被观察。
灰盒:灰盒认为攻击者可以实质性地接触到部分密钥或者泄露的信息(也就是所谓的边信道信息)。边信道分析攻击(Side Channel Analysis, SCA)利用了从密码系统运行过程中泄露的信息。泄露信息是通过被动观察时间信息、功率消耗、电磁辐射等而获得的。
白盒:白盒即攻击者已经完全控制了整个操作过程且对此完全可见,攻击者可以自如地观察动态密码运行过程,并且内部算法的详细内容完全可见,可随意更改。举例而言,只要软件是在本地运行的,攻击者就可以通过调试器运行程序,并观察软件运行的过程。所有涉及解密部分的代码也就一览无余了。定义如下:
- 攻击者对主机和软件具有完全控制权
- 软件动态执行过程是可见的
- 加密算法内部细节完全可见、可修改
白盒加密基本思想
白盒加密属于对称加密,是指能够在白盒环境下抵御攻击的一种特殊的加密方法。首先举个例子帮助理解,这里引用最早提出白盒加密实现方法的大牛Chow在论文《White-Box Cryptography and an AES》中所说的,“举一个极端的例子,就是将AES加密用一个简单的查表来表示,那么AES128可以用一个bytes的表格替换,这样一来,AES就变成了一个完全的黑盒。”听起来很简单吧,但是这是极端情况,一个如此大的表,没有硬盘能够装得下,所以在具体算法实现的时候必须有针对性的进行优化。
下面具体阐释白盒加密基本思想:
1、核心思想:
核心思想是混淆,混淆的意思就是让人看不懂,如果说加密是隐藏信息,混淆就是是扰乱信息。它们之间的最大区别是,加密就是信息放进了保险箱,但是一旦我有了钥匙,我就能打开这个保险箱。而混淆则是让信息以一种完全无法理解的形式存在,尽量让人无法理解中间的过程(也就是只能看到输入和输出,但无法理解结果是如何得到的),但不影响信息本身发挥作用(一个加了密的程序,在源码未解密前是无法执行的,但是经过混淆的程序,可以正确执行)。
2、特点
传统的加密算法中算法和密钥是完全独立的,也就是说算法相同密钥不同则可以得到不同的加密结果,但白盒加密将算法和密钥紧密捆绑在了一起,由算法和密钥生成一个加密表和一个解密表,然后可以独立用查找加密表来加密,用解密表解密,不再依赖于原来的加解密算法和密钥。
3、优势:
正是由于算法和密钥的合并,所有可以有效隐藏密钥,与此同时也混淆了加密逻辑。具体而言白盒加密的一种实现思路就是将算法完全用查表来替代,因为算法已知,加密的密钥已知。所以将算法和密钥固化成查表表示,这就是白盒密钥的实现过程。
4、缺点
有利必有弊,白盒加密由于需要将加密和解密的算法固化到表格中,势必要增加空间开销,因为要保存这一系列的表。具体在实现的过程中,大部分情况需要用时间换空间,需要对具体的实现算法进行优化,也就是样将大表分解成若干个小表,增加了查表的次数即时间开销但是减少了表占用的空间。