白盒加密

发布于 2022-06-17  205 次阅读






白盒加密1

[TOC]

1.什么是白盒

黑盒:传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并未实质性地接触到密钥(执行加密或者解密的算法)或者任何内部操作,仅仅能观察到一些外部信息或者操作,这些信息包括系统内的明文(输入)或者密文(输出),并且认为代码执行以及动态加密不可被观察。

即仅仅知道m,c,pubkey

灰盒:灰盒认为攻击者可以实质性地接触到部分密钥或者泄露的信息(也就是所谓的边信道信息)。边信道分析攻击(Side Channel Analysis, SCA)利用了从密码系统运行过程中泄露的信息。泄露信息是通过被动观察时间信息、功率消耗、电磁辐射等而获得的。

即侧信道手段,通常情况都可以视作灰盒

白盒:白盒即攻击者已经完全控制了整个操作过程且对此完全可见,攻击者可以自如地观察动态密码运行过程,并且内部算法的详细内容完全可见,可随意更改。举例而言,只要软件是在本地运行的,攻击者就可以通过调试器运行程序,并观察软件运行的过程。所有涉及解密部分的代码也就一览无余了。定义如下:

  1. 攻击者对主机和软件具有完全控制权
  2. 软件动态执行过程是可见的
  3. 加密算法内部细节完全可见、可修改

在白盒密码学中,混淆是指当密码密钥在攻击者的控制下时,保护其不被提取。优点:加密过程随密钥改变,可以保护密钥,但是也因为此,他的执行效率比较低,主要执行过程是查表。

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个 表的结果做异或相加,可以得到最后的结果,完成一列4个字节的MixColumn操作。

这样对于每一轮16个字节的输入态,就有16个 查找表,总共9轮,也就是144个查找表。每个查找表是8进32出。

  • 为什么不直接把整个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个 表的需要进行异或后得到最终结果。异或操作也需要转换为查找表。这里的异或操作也需要拆开,原本不拆开是8个字节做异或,输出4字节。查找表是32进16出,体积也会过大。拆开为8个异或表,8进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出, 表 8进32出,这两个表可以合并变为一个表,也是8进32出,空间减少,速度更快。这个表称为T-box Table,一轮查找表的整体流程如下

image-20220318202821429

5.保护实现(混淆)

首先在上述查找表实现中,查找表的生成由具体的 RoundKey 决定,查找表的目的就是保护 RoundKey 。但看具体来看每个T-box Table,其保护的是 RoundKey 的其中一个字节( RoundKey 共16字节)。

对于攻击者而言,由于一个查找表的随机性只由一字节决定,攻击者可以遍历所有可能情况(,256种)来生成查找表,最后比对查找表就可以判断出 RoundKey 了。

因此需要对查找表做保护实现,具体方法如下

Encodings

思想

Encoding是编码,是对所有生成的查找表在输入输出都增加一个双射,以此把整个查找表打乱。

这样保证了计算结果不会因为编码而出错,同时又将查找表给编码保护了。

由于攻击者而言,查找表的生成由随机的双射和key决定。因为对于同一个查找表(假设8进),可以由256种(双射,key)对生成,攻击者因此无法确定是哪一个(双射,key)对。这样达到了信息论安全。

编码链接

考虑到XOR表是从两个表的输出中各取4bit作为输入,因此要求编码可连接(concatenated encoding),具体如下

所有双射都是由长度为4bit的双射拼接而成,除了一个例外,外部编码(External encodings),这个编码可以自由选择,无需拼接。

Mixing Bijections

为了扩散混淆,在所有Key相关的表中,都加上一层随机的双射变换(Mixing bijection)。以此使得只要key稍微变化,所有生成的查找表将完全不同。

具体操作是,在 T-box Table 前后都加上一个双射变换。T-box Table 是8进32出,所以在输入端加上一个8bit的逆双射-L,在输出端加上一个32bit的双射MB。类似于Encoding思想,逆双射-L用于抵消上一层L双射的影响,而逆双射-MB用于抵消本层MB的影响。

逆双射的拆分构造如下:

这样就得到了完整的一轮白盒AES加密过程,如下

简注- A Tutorial on White-box AES - improveNPC的日志

External encodings

外部编码的目的就是使得在整个加解密运行的过程中,不会出现明文。思想很简单,就是对在输入前做一次编码,输出后再做一次解码。

3.安全性问题

目前(2015年)所有白盒实现几乎都被攻破了,还有一种针对SPN结构的通用攻击。

或许是因为目前的白盒实现 都在考虑 黑盒安全,使得白盒安全难以达到

白盒场景

该模型假设攻击者可以通过任意跟踪执行、检查内存中的子结果和密钥、插入断点、修改内部代码以静态和动态方式完全控制密码的执行环境,变量等等。

白盒的两个安全性要求

  • Key extraction security:不能被提取出密钥
  • Code lifting security:攻击者可以直接拿白盒表去做加解密。这要求白盒(代码)不能被剥离。

4.