-
-
[原创]量子安全 quantum ctf (3) Flagportation Hack the box
-
发表于: 4天前 1260
-
首先,拿到了一个server.py文件,我们先来分析代码:
这次引用的包和之前的不太一样
这个类先定义了很多量子操作门,Z,X,H,CNOT具体的量子电路效果前两篇文章有过相关解释
接下来定义了单比特投影测量,投影测量分为了两个基,X基和Z基,简单来讲的话:
X基:+态测得0,-态测得1
Z基:0态测得0,1态测得1
其中+为0经过H门变成的叠加态(|0>+|1>)/根号2
-为0经过H门变成的叠加态(|0>-|1>)/根号2
这个函数就是输入不同的基态可以获得不同的投影算符
从上面的函数中按照要求获取投影算符然后用张量积连接起来(即为不同的线路)
调用上面的projector函数获取连接好的投影算符对量子态进行测量
里面有个encoder,用来映射的。
其中basis(d, k)中d表示维度,k为基态索引。
那么也就是说basis(2,0)就表示0态
所以映射关系为:
00 -- |0>态和Z基
01 -- |1>态和Z基
10 -- |+>态和X基
11 -- |->态和X基
把每个字节转为8位二进制串,然后再把二进制串2个2个分组
比如输入:b'\x02'
则转化为00000010
再分组为['00','00','00','10']
输入bits使用刚才的encoder进行映射编码,给q0线路
q1线路和q2线路初始态都是0态
再使用张量积tensor三条线路表示整个3qbit电路的初始状态
然后再使用如下几个门后状态如下:
只不过下图的q0不一定是0态作为初态而是编码后得到的

这个是往电路里面添加门的函数,我们这次可以使用三种门Z,X,H
把flag.txt文件转化为bit,对于每一个bit搞一个刚才的电路,也就是encode之后给q0,会给我们encode的基是Z或者X,然后施加电路并且对q0和q1进行以Z基测量告诉我们测量结果。接下来我们可以加门然后对q2指定测量基并且测量。
所以如果我们可以通过他给出的信息:
1.encode的基是Z或者X
2.q0和q1进行以Z基测量
3.我们的操作和对q2的指定基测量
通过上面三个信息逆向出来flag最初的bit是00到11中的哪一个即可还原flag
X和H门往期见过了,这次介绍一下Z门

它用来做相位反转,


然后+和-两个态分别对应: