1.什么是白盒
黑盒:传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并未实质性地接触到密钥(执行加密或者解密的算法)或者任何内部操作,仅仅能观察到一些外部信息或者操作,这些信息包括系统内的明文(输入)或者密文(输出),并且认为代码执行以及动态加密不可被观察。
即仅仅知道m,c,pubkey
灰盒:灰盒认为攻击者可以实质性地接触到部分密钥或者泄露的信息(也就是所谓的边信道信息)。边信道分析攻击(Side Channel Analysis, SCA)利用了从密码系统运行过程中泄露的信息。泄露信息是通过被动观察时间信息、功率消耗、电磁辐射等而获得的。
即侧信道手段,通常情况都可以视作灰盒
白盒:白盒即攻击者已经完全控制了整个操作过程且对此完全可见,攻击者可以自如地观察动态密码运行过程,并且内部算法的详细内容完全可见,可随意更改。举例而言,只要软件是在本地运行的,攻击者就可以通过调试器运行程序,并观察软件运行的过程。所有涉及解密部分的代码也就一览无余了。定义如下:
- 攻击者对主机和软件具有完全控制权
- 软件动态执行过程是可见的
- 加密算法内部细节完全可见、可修改
在白盒密码学中,混淆是指当密码密钥在攻击者的控制下时,保护其不被提取。优点:加密过程随密钥改变,可以保护密钥,但是也因为此,他的执行效率比较低,主要执行过程是查表。
2.白盒的例子
AES
1.S盒字节代换
2.行移位
3.列混淆
4.轮秘钥加
白盒AES算法
白盒算法是将秘钥混淆到算法中,让攻击者即便能够获取算法的内部细节(能够动态调试),也无法还原出秘钥的一种算法,常见的白盒算法有:白盒AES,白盒SMS4。
对于AES128来说,Chow2002年提出的白盒AES 基本思路是将原来AES的每一轮变换替换为查找表。
查找表的构建
- 枚举所有输入
- 计算出输入对应的输出
- 将(输入,输出)项插入查找表
查找表的使用
- 遍历查找表,找到输入相同的项
- 读取(输入,输出)项,返回输出
1、字节变换层
S盒变换:不变化。
2、扩散层
行移位(ShiftRows):不做变化。
列混淆(MixColumns):AES的MixColumn作用是扩散混淆,具体操作就是把输入态16字节矩阵左乘MC矩阵。MC矩阵是固定的。
对其化简如下:
因此定义如下 8bits进,32bis出 的表
之后将得到的4个
这样对于每一轮16个字节的输入态,就有16个
-
为什么不直接把整个MixCloumn操作做成查找表呢,为什么还要拆开按每行每列做一个查找表呢。
原因:整个MixCloumn作为查找表,这个查找表体积会非常大。具体而言,是一个128进128出的查找表,查找表有
行,每一行需要128位(16字节)空间。总占用空间为 * 16 byte,要知道2^32byte约为1GB,所以查找表体积完全不可接受。换一个方面来想,AES加密本身就是一个128进128出的查找表呢。 采用拆开的方式,查找表是8进32出,每个查找表需要2^8 行,每行32位(4字节),体积为1KB。 共144个查找表,也就144KB。
XOR Table
每一列4个字节得到的4个
异或操作理论上只需要一个查找表就够了,但因为保护操作**需要分开。
每一列4字节需要做3次异或,也就需要3*8个查找表,一轮有16字节就需要3 * 8 * 4 = 96个查找表。9轮共864个查找表。每个查找表是2^8 * 0.5 = 128byte。
3.密钥加法层
AddRoundKey是对每一轮的输入与RoundKey做异或⊕操作。
SubBytes操作本身就是一个8进8出的查找表,将一个字节替换为另一个字节。
这两步可以合并到一个查找表中完成,称为T-boxes。
T-box也是一个8进8出的查找表。AES每一轮的Key有16字节,每个字节与S-box合并做一个查找表,一轮16个。AES总共10轮,所以总共需要160个T-boxes。
4.表格合并
对于T-box 8进8出,
5.保护实现(混淆)
首先在上述查找表实现中,查找表的生成由具体的 RoundKey 决定,查找表的目的就是保护 RoundKey 。但看具体来看每个T-box
对于攻击者而言,由于一个查找表的随机性只由一字节决定,攻击者可以遍历所有可能情况(
因此需要对查找表做保护实现,具体方法如下
Encodings
思想
Encoding是编码,是对所有生成的查找表在输入输出都增加一个双射,以此把整个查找表打乱。
这样保证了计算结果不会因为编码而出错,同时又将查找表给编码保护了。
由于攻击者而言,查找表的生成由随机的双射和key决定。因为对于同一个查找表(假设8进),可以由256种(双射,key)对生成,攻击者因此无法确定是哪一个(双射,key)对。这样达到了信息论安全。
编码链接
考虑到XOR表是从两个表的输出中各取4bit作为输入,因此要求编码可连接(concatenated encoding),具体如下
所有双射都是由长度为4bit的双射拼接而成,除了一个例外,外部编码(External encodings),这个编码可以自由选择,无需拼接。
Mixing Bijections
为了扩散混淆,在所有Key相关的表中,都加上一层随机的双射变换(Mixing bijection)。以此使得只要key稍微变化,所有生成的查找表将完全不同。
具体操作是,在 T-box
逆双射的拆分构造如下:
这样就得到了完整的一轮白盒AES加密过程,如下
External encodings
外部编码的目的就是使得在整个加解密运行的过程中,不会出现明文。思想很简单,就是对在输入前做一次编码,输出后再做一次解码。
3.安全性问题
目前(2015年)所有白盒实现几乎都被攻破了,还有一种针对SPN结构的通用攻击。
或许是因为目前的白盒实现 都在考虑 黑盒安全,使得白盒安全难以达到
白盒场景
该模型假设攻击者可以通过任意跟踪执行、检查内存中的子结果和密钥、插入断点、修改内部代码以静态和动态方式完全控制密码的执行环境,变量等等。
白盒的两个安全性要求
- Key extraction security:不能被提取出密钥
- Code lifting security:攻击者可以直接拿白盒表去做加解密。这要求白盒(代码)不能被剥离。
4.
Comments NOTHING