ctf
March 10, 2022

Crypto:equivalent - Ant x D^3 CTF 2022

A good challenge about SSP(Subset Sum Problem,a kind of knapsack) in Ant x D^3 CTF 2022.

Chanllenge

Initial:

encrypt:

decrypt:

Analysis

发现该题是一个Knapsack [1] 问题,但不能用普通的的背包出来。

Q1 : Why can’t use regularly method of knapsack to attack it?

A1 :

如果直接在encrypt上面进行背包的话,会发现他没法背包出来。方案设计者表明了该方案针对于常规攻击是相对安全的。

为了避免弱密钥,推荐

为了抵抗低密度的攻击,选择 去满足 d > 1,防止了我们常规攻击背包问题的方式。

这道题目是Yasuyuki Murakami等人的设计knapsack公钥密码系统 [3] ,有一篇paper:《Equivalent key attack against a public-key cryptosystem based on subset sum problem》[2] 讲解针对该题的攻击内容的。

其中说明如果想要恢复 子集和问题(Subset Sum Problem) 的等价密钥 ,需要让keys满足以下条件

  1. P 是一个素数(或者用 gcd(P,e) = 1),且满足

  2. 是一个正奇数序列

可知

存在一个 比较短的向量t 满足

如果该向量是足够短的话,需要满足

因此 向量s和向量k 属于 一个 orthogonal lattice 的 子格。接着可以找到满足上述的最后两个条件的等价私钥。(ps:事实上,P并不是严格意义需要去满足他是一个素数,只需要与e互素即可)

orthogonal lattice(正交格)[4]:

给出一个格 . 格 的所有基能够张成 的相同子空间 作为内积的正交向量子空间。我们定义orthogonal lattice为

引理:对于任意的格

Details of Attack

定义一个格

Theorem :定义格 ,那么存在一 个 的向量 ,满足

使用 Algorithm 1,可以计算 LLL以后的格基为 ,并且根据他们长度的升序重新排序这 n-1 个向量 。根据Theorem可知,只有一个向量是满足 。将第 n-1 个作为该满足条件的向量。

假设每个 的分布都很均匀,可以得到 ,同时 。所以当 时, 。那么 时,满足Thorem的条件。并且 n-1 个向量 是按照长度升序排序的,我们可以知道这里的 就是此处会产生的最长的

再用一次 Algorithm 1,就可以计算得到 $\mathscr{L}1^\perp\mathscr{L}(\bold{u_1},\bold{u_2})\bold{t{n-1}}\bold{t_0}\lang\bold{s},\bold{t_i}\rang=0 ,i\in[1,n-2]\lang\bold{a},\bold{t}\rang = e \lang\bold{s},\bold{t}\rang + P \lang\bold{k},\bold{t}\rang = 0\lang\bold{k},\bold{t_i}\rang=0{\bold{s},\bold{k}} \in \mathscr{L}_1^{\perp}$ 。

接着去枚举搜寻等价私钥

在寻找的过程中需要满足 Analysis 中的最后两条,可以以一个比较高的概率去得到一组等价私钥。

Q2 : How to enumerate the xi,yi ?

A1 :

根据官方的wp,我们可以得知

并且根据 的奇偶性,可以判断出 的奇偶性,接着随机生成一组 ,满足生成的 全是正数即可。

我们可以得知 P > e >> |a| >> zi,接着就可以得知 比较小。

那么就可以用连分数的办法得到y1,y2。

A2 :

也可以直接爆破x1,y1,x2,y2,但运气不好就可能比较难跑出来吧?

完整的算法过程在Attach中描述

Attach

Algorithm 1. Find out the orthogonal lattice [4]:

INPUT- 格 的一个 格基

OUTPUT - 格 的 格基

  1. 挑选一个 .

  2. 生成一个 完整格

  3. LLL格基规约后张成 基

  4. 输出向量 ,其中 .

Algorithm 2. Recover the equivalent private key [2]

INPUT- 公钥 .

OUTPUT - 私钥

  1. 计算 的正交格,定义

  2. 取 $\mathscr{L}1 = \mathscr{L}(t_1,t_2,\dots,t{n-2})\mathscr{L}_1^\perp = \mathscr{L}(\bold{u_1},\bold{u_2})$ .

  3. 枚举空间

  4. 对每个集合 ,用 计算P和e

  5. 用下面两条情况筛选 每个序列

    1. 是正奇数序列
  6. 剩下来的每一组 都是等价私钥

Reference

[1] : Knapsack Problem : https://en.wikipedia.org/wiki/Knapsack_problem#Subset-sum_problem

[2] : Jiayang Liu, Jingguo Bi:《Equivalent key attack against a public-key cryptosystem based on subset sum problem》

[3] : Murakami, Y., Hamasho, S., Kasahara, M.: 《A public-key cryptosystem based on decision version of subset sum problem》. Information Theory and its Applications (ISITA), Honolulu, HI, USA, 2012, pp. 735–739

[4] : Nguyen, P.Q., Stern, J.: 《Merkle-Hellman revisited: a cryptanalysis of the QuVanstone cryptosystem based on group factorizations》 CRYPTO, Santa Barbara, CA, USA, 1997, pp. 198–212

About this Post

This post is written by Hao Jiang, licensed under CC BY-NC 4.0.

#ctf#cryptography#knapsack