Information Set Decoding (ISD)类算法是编码密码学中最重要的基本算法之一, 是目前 Syndrome Decoding 问题的最优时间-空间复杂度权衡解法。本文梳理 ISD 算法基本原理,介绍基于 ISD 算法的各种优化。
Information Set Decoding
ISD 算法最早由 Prange 在 1962 年提出,后续基于 Prange 的框架,ISD 算法进行了各种优化,但是核心框架基本没有改变,时间空间上的复杂度优化并不大。并且基于量子的 ISD 算法只能应用于 Prange 的原始 ISD 算法,因此 Prange 的朴素 ISD 算法至今仍有重大意义。
Remarks
一些注记定义:
- 对于矩阵 , 为下标集合 的子集, 表示取矩阵 对应下标的列构成的新矩阵。集合 表示 的补集。
- 若无特殊说明,我们均考虑在二元域 上的线性编码。
- 符号 表示向量的汉明重量。
- 简记 Syndrome Decoding Problem 为 ,表示在 的线性编码上求解汉明重量不大于 的 SDP 问题,即给定校验矩阵 ,以及一个目标向量 ,找到一个向量 使得其汉明重量 ,并且满足 .
- 简记 为组合数,也即二项式系数(Binomial Coefficient)。
信息集 Information Set
记 的二元线性编码 的生成矩阵为 ,其 个线性无关的行向量构成整个线性子空间的基 。记明文 ,其对应的码字满足:
实际上我们只需要 维的密文信息即可解码:选取子集 ,大小为 ,使得 为可逆矩阵,则可解码得到原消息。因此,满足上述性质的大小为 的集合 被称为信息集,因为它包含编码的所有信息。
信息集的概念一般在含错误向量的场景下使用,考虑两种场景下的信息集:
- 生成矩阵场景:含错码字 ,选取大小为 的下标子集 为信息集,如果有效错误集(对应维度的 为 1)均不落入信息集 中,则我们可以根据 直接解码得到消息 。
- 校验矩阵场景:给定一个 , 校验矩阵 ,目标向量 ,此时我们想要找到 使得, ,并且满足 。选取大小为 的下标子集 为信息集,如果有效错误集(对应维度的 为 1)全部落入信息集 中,则可以根据 直接解码得到向量 的有效部分,然后根据信息集位置重构恢复 。
多数情况下,我们都只考虑在校验矩阵场景下的信息集解码算法。在一般论文中,都会直接把 的信息集定义为上述信息集的补集 ,这两者实际是等价的。后续校验矩阵场景下的 ISD 算法中,统一称大小为 的下标子集 为信息集 ,只要其满足矩阵 是可逆的。
值得注意的是,对于校验矩阵 ,存在一个置换矩阵(Permutation Matrix) ,和一个可逆矩阵 使得:
实际上每个信息集 对应的 ,也就是使得校验矩阵系统化的矩阵 。另外为了简洁起见,绝大多数情况下我们把置换矩阵的作用忽略。
Plain ISD
最早由 Prange 提出的 ISD 算法,又被称为朴素 ISD 算法,是最简单的的 ISD 算法。
Plain ISD 算法
输入 :校验矩阵 ,目标向量 ,目标汉明重量
输出 : 满足 ,并且 。
随机选取一个大小为 的信息集合 ,其补集记为
计算系统化矩阵 使得,
其中
计算
如果 ,则直接返回 ,使得 。
否则直接返回第一步,选取一个新的信息集。
上面算法非常容易理解,如果像我们假设的一样,有效错误集(对应维度的 为 1)全部落入信息集的补集 中,则:
简单而言,大小为 的补集 选取出的校验矩阵对应的列的逆,恰好能够将错误向量所在的部分全部还原,并且前面 个维度完全不会影响最后的结果,能够直接从 检查汉明重量信息。由算法流程可见,所有错误全部落入信息集的补集 中是概率性的,ISD 算法的迭代次数(时间复杂度)取决于这个概率。
时间复杂度分析
考虑 ISD 算法的单轮复杂度,主要包括单次矩阵求逆得到 ,以及矩阵乘法 ,因此单轮时间复杂度为( 论文 ISD中称系统化的时间复杂度于矩阵乘法相当,该估算最终只影响一个常数,本文考虑精确的时间复杂度分析)
任意选取一个信息集使得 个错误全部落入信息集的补集 中的概率为:
因此期望的时间复杂度预计为:
考虑单纯的穷举算法的时间复杂度:
对于大部分困难参数而言,朴素的 ISD 算法都有比较好的时间性能上的提升。考虑 decoding challenge 上低汉明重量码字解码问题给出的具体参数 ,时间复杂度如下(简单估计,不考虑优化,会有小的多项式系数误差):
目前 SDP 最优的求解算法之一是 ,其渐进时间复杂度为 (不考虑空间的限制),目前绝大多数基于编码的 PQC 密码体制,其安全强度对标这个渐进时间复杂度。
Improved ISD
ISD 算法提出之后,提出了许多优化算法。核心的优化思路是分析有效错误集(对应维度的 为 1)在信息集中的分布。通过增加单轮求解的时间复杂度,来减少 ISD 主循环中需要迭代的次数。给定一个 ,主要有两个方向的优化:
- 方向一(Lee-Brickell):假设大小为 信息集中有 个错误,信息集的补集中存在 个错误。
- 方向二(Dumer):假设在 个比特位置(包含一个信息集)上有 个错误,在另外 个比特位置上有 个错误。
Lee-Brickell 方向的优化,论文 Code-Survey22给出了一个各类 ISD 算法中错误向量中大小为 的有效错误集在信息集中分布假设
Dumer 方向的优化,论文 Code-Survey22给出了一个各类 ISD 算法中错误向量中大小为 的有效错误集在 个位置(包含一个信息集)中分布假设:
Lee-Brickell Direction
由于本文篇幅有限,仅选取部分算法进行介绍性阐述。
Lee-Brickell ISD 算法
输入 :校验矩阵 ,目标向量 ,目标汉明重量 ,参数
输出 : 满足 ,并且 。
随机选取一个大小为 的信息集合 ,其补集记为
计算系统化矩阵 使得:
计算
对所有 ,如果存在 ,满足 ,则算法终止,返回 , 使得 。
返回第一步,重新选取一个新的信息集。
Lee-Brickell 算法假设有 个有效错误落入子集 中,另外 个有效错误错入信息集的补集 中,因此:
如果我们穷举所有汉明重量为 的向量 ,则 的汉明重量恰好为 。通过额外在单轮中增加一次迭代,增加选择单次信息集时的求解复杂度,减少循环次数。选取恰当的 参数值,Lee-Brickell ISD 比朴素的 ISD ()算法性能更佳。
Lee-Brickell ISD 单轮迭代的时间复杂度大概为(忽略一些常数):
如果使用 early abort 的思想,时间复杂度可以进一步优化。感兴趣的读者可以去阅读 ISD 相关的 survey。
有效错误集恰好有 个 落入 的概率为:
于是 Lee-Brickell ISD 算法的时间复杂度为:
Dumer Direction
Dumer 方向的 ISD 算法,本文以 BJMM 算法为例,它是目前为止在 binary code 上求解 SDP 渐进最优的算法。BJMM 算法的论文 BJMM12 名为:Decoding Random Binary Linear Codes in 2n/20 : How 1 + 1 = 0 Improves Information Set Decoding, 很有意思的一个思路就是利用 binary code 的等式: 去优化 ISD 算法。
在前面提到过的所有 ISD 算法中,它们对错误向量 的划分都是基于等式 ,而从来不会用到二元域上的特殊等式 ,也就是说信息集合划分的两个子错误集 不会在相同位置同时出现 (缺省位置默认补 0)。于是 BJMM 的核心思路是把错误向量 划分为 : ,其中 ,并且汉明重量为 ,也就是说我们假设 在 个位置上发生重叠(对应维度均为 1)。
Dumer (包括BJMM)算法的第一步仍然是高斯消元,不同于 Lee-Brickell 方向, Dumer 方向 ISD 的信息集大小为 ,部分高斯消元(Partial Gaussian Elimination)作用在大小为 的方阵。即给定 (经过某个置换后):
其中 , 。
我们将错误向量按照信息集进行划分 ,其中 ,汉明重量 , ,汉明重量 , 将 syndrome 做同样划分, ,其中 , 。因此我们想要求解的 SDP 为:
即:
Dumer 方向 ISD 算法的思路是求解第二个等式:寻找汉明权重等于 的错误向量 使得 。然后计算 ,检查其汉明重量是否满足 。
注意到,求解第二个等式,本质上就是求解一个更小规模的 SDP 问题,校验矩阵为 ,并且此时我们需要求解出一系列的解。Dumer 方向的 ISD 算法对这个小规模 SDP 的求解采用了 Wagner 的算法框架 : Merge,即广义生日悖论问题(general birthday problem)的时间-空间权衡算法。
Dumer 方向 ISD 的求解框架大致分为两步:
- 部分高斯消元(PGE)得到两个方程,包含一个更小规模的 问题。
- 利用 Wagner 算法求解更小规模的 ,验证汉明重量。
BJMM 算法中 的优化
BJMM 中 merge 的思路其实很简单。每次我们寻找目标向量解时,两个列表的目标候选向量都会选定重叠(overlap) 段的长度为 ,如之前给出的 Dumer 方向图中的蓝色部分所示:
准确地来说,BJMM 算法会选定两个最优的参数 和 ,令:
定义 Merge 算法如下( 表示 向量的前 维):
首先我们生成两个汉明重量为 的随机向量列表:
预定义需要寻找的中间目标向量形式为:
容易看出,任意的 和 进行 merge ,必然能够得到 ,依次类推。于是, BJMM 中三个阶段的 Merge 流程如下:
对于基础向量列表 ,选定目标向量为 ,其中 ,目标维度数为 , 目标汉明重量为 ,进行四次 Merge 操作:
此时 列表的目标向量前 维度均落入 。
对第一步生成的列表进行进一步 Merge :
目标向量为 ,其中 ,目标维度数为 ,目标汉明重量为 。
对第二步生成的列表进行最终 Merge :
目标向量为 ,目标维度数为 ,目标汉明重量为 。
经过上面三步,我们就能得到小规模 SDP 的一系列解,即对于任意 ,满足 。
这个算法流程其实就是广义生日悖论问题的 Wagner 算法框架,BJMM 的额外加入的目标汉明权重限制选取为:
是整个算法的精髓所在,因为通过选取最优化的 ,这样权重限制的向量是很容易找到的。在一般有限域 上,这样选取不会对算法有所优化,因为只在 binary code 上存在 。
ISD Estimator
值得一提的是,目前在编码密码学 这一块,最新的工作成果是去年欧密会上的一篇论文:New Time-Memory Trade-Offs for Subset Sum — Improving ISD in Theory and Practice ,其相关实现和 estimator 都已经开源至:decoding 和 Improving-ISD-in-Theory-and-Practice ,这篇工作的本质还是对 BJMM 算法进行了优化。
本节简单介绍 ISD (SDP) estimator 的开源项目,Syndrome Decoding_Estimator ,论文为 Syndrome Decoding Estimator ,它对目前主流的 ISD 算法求解 的时间复杂度和空间复杂度进行了评估,并且能够自动给出最优参数。 在去年,该项目并入了 CryptographicEstimators: a Software Library for Cryptographic Hardness Estimation 中的 模块,开源项目在 CryptographicEstimators 上,可以直接在 sage 上进行安装,并且提供了一个 online 的 web 交互页面 :SDEstimator。
Decoding Challenge 上 (低汉明重量码字问题)的参数取 ,它声称的安全强度是 128 比特(BJMM 的渐进最优复杂度), 和 的求解是类似的, 能转换成一般形式的 使用 ISD 算法求解,评估结果如下:
满足其声称的安全强度。
参考文献
ISD20. Information Set Decoding in the Lee Metric and the Local to Global Principle for Densities,https://user.math.uzh.ch/weger/thesis.pdf ↩
Code-Survey22. A Survey on Code-Based Cryptography,https://arxiv.org/abs/2201.07119 ↩
BJMM12. Decoding Random Binary Linear Codes in 2n/20 : How 1 + 1 = 0 Improves Information Set Decoding,https://eprint.iacr.org/2012/026.pdf ↩