AK了密码,写一写wp。
babysign
简单ecdsa,给了公钥和随机参数nounce求私钥,理一下加密公式即可:
1 | from gmpy2 import * |
easyNTRU
NTRU学习资料:
https://4xwi11.github.io/posts/a2b6ecd3/ 注意他这里加密的时候少乘了个p
https://blog.csdn.net/m0_46204256/article/details/122376414
这题非常的水啊,NTRU的N取太小了,仅仅是10,那么AES的私钥可以直接通过爆破获取。
1 | from Crypto.Hash import SHA3_256 |
LWE?
构造矩阵为:
这里A、B、C都为矩阵,b为题目输出的向量;显然这样构造的矩阵行向量构成格;由于b=xA+yB+zC+e
,所以e=b-(xA+yB+zC)
,e是行向量组成的格上的格点(向量),由于e系数很小,所以用LLL规约的最短向量应该就是e。
求出e以后再解下矩阵方程即可:
1 | import re |
NTRURSA
多项式环上的RSA,第一步先把模多项式分解,然后类似于普通RSA把hint解出来:
1 | R.<x> = PolynomialRing(GF(64621)) |
另一部分主要是svp问题,首先我们已知:
也就是:
我们可以构造一个由下面这个矩阵M
中的两个行向量(1,h), (0,p)
所张成的lattice:
可以证明向量(f,g1)
可以由两组基向量M
的某种整系数线性组合(f, -u)
来表示,因此向量(f,g1)
就在这个lattice上。相对于两个基底向量(1, h), (0, p)
来说,向量(f, g1)
的长度要小得多得多,所以可以规约,求出f和g1:
1 | def GaussLatticeReduction(v1, v2): |
求得g1以后可以还原g,分解对flag加密的rsa的n,最后解密:
1 | from gmpy2 import * |