基本形式

runwu2204 Lv6

https://dexterjie.github.io/2023/07/29/%E6%A0%BC%E5%AF%86%E7%A0%81%E5%85%A5%E9%97%A8/

格密码入门 | DexterJie’Blog (tover.xyz)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from Crypto.Util.number import *
from secret import flag
import gmpy2

# assert len(flag) == 47
#376bit
# flag=b'SICTF{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}'
# f = bytes_to_long(flag)
# p = getPrime(512)
# g = getPrime(128)
# h = gmpy2.invert(f, p) * g % p
# print('h =', h)
# print('p =', p)
'''
配平
g=fh+kp

'''
D=2**248
from Crypto.Util.number import *
from gmpy2 import *
h = 9848463356094730516607732957888686710609147955724620108704251779566910519170690198684628685762596232124613115691882688827918489297122319416081019121038443
p = 11403618200995593428747663693860532026261161211931726381922677499906885834766955987247477478421850280928508004160386000301268285541073474589048412962888947
Ge = Matrix(ZZ,[[1,D*h],[0,D*p]])#
print(Ge.LLL())
f,g = Ge.LLL()[0]
f,g = abs(f),abs(g)//D
print(long_to_bytes(f))

LLL算法需要的是矩阵参数,最简单的矩阵如下 D属于任意整数
$$
\begin{bmatrix}
1 & D h \
0 & D q \
\end{bmatrix}
$$
其满足下列条件
$$
\begin{bmatrix} f & -k \end{bmatrix}
\begin{bmatrix}
1 & D h \
0 & D q \
\end{bmatrix}

\begin{bmatrix} f & D g \end{bmatrix}
$$

配平需要满足
$$
f \approx D \cdot g
$$

例如上面的f为376bit,g为128位,所以D为2^248 位数大致相同即可

  • 标题: 基本形式
  • 作者: runwu2204
  • 创建于 : 2024-02-19 19:00:26
  • 更新于 : 2024-08-30 00:57:01
  • 链接: https://runwu2204.github.io/2024/02/19/Crypto/格密码/基本形式/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论