yafu质因数分解工具的笔记

yafu

简述

yafu 是数学爱好者们所写的一个关于大整数分解的项目,在现在的公钥加密方案中,大整数分解(质因数分解)十分重要,故 yafu 通常被用于快速分解大整数(例如分解 RSA 中的 n)。

yafu 的成功离不开其他开源代码,它使用目前来说最先进的自动化代码,在智能和自适应方法中结合分解算法,最小化分解时间。

同时需要注意的是,yafu 是纯命令行驱动的,可以使用交互输入模式。

安装

可以在 GitHub 主页上下载已经构建好的版本(或者是自行编译),也可以在 SourceForge 上下载已经打包好的版本(解压即可)。

仅需要对应的二进制即可运行(一般使用 x64 版本),但需要注意的是,yafu 所需的依赖文件是要与二进制文件在同一目录下的。

yafu 自身是通过支持库 msieve 运行分解算法的,但不支持特殊的 NFS 算法。

Number Field Sieve(NFS)安装

不需要理会该节,仅是 README 的必要翻译。

Number Field Sieve,数域筛法,是最快的、效率最高的(渐近意义下)整数分解方法,用于解决 IFP 和 DLP 问题。

想让 yafu 使用 NFS 算法进行质因数分解,可以直接在 https://sourceforge.net/projects/ggnfs/ 该网站中下载对应版本的 GGNFS 二进制文件的压缩包,再自解压到 yafu 所在目录(如 ./ggnfs-bin 下)。

随后在 yafu.ini 中填入 ggnfs_dir=./ggnfs-bin/(注意变量名不能冲突)。

yafu.ini

该文件是 yafu 运行的初始化文件。

需要注意,yafuinput_size 以十进制算。例如 1903387770 是 10 位数。

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
%%% 常规选项 %%%

% 多线程算法的指定线程数
threads=1

% 米勒-拉宾素性检验的证人(witnesses)数量
nprp=7

% 信息输出等级设为1,默认为0
v

% 关闭信息输出
silent

% 跳过启动时的时钟测试
no_clk_test

% 运行给定脚本
script="my_script"

% 指定会话日志(会话日志记录运行的命令,随机数种子,系统信息和一些启动项)
session="session.log"

% 使用给定文件名的数字运行给定命令
batchfile="my_batch_file"

% 指定随机数种子
seed=1903387770

% 启动时打印详细处理器信息
vproc

% 指定记录分解信息的日志文件
logfile="factor.log"

% 将yafu设置为空闲优先级
p

% 重复给定的命令N次
repeat=1



%%% factor选项 %%%

% 在运行NFS之前,ECM是否工作到(pretest_ratio * input_size)位数
pretest_ratio=0.25

% GNFS/SIQS的交叉点(crossover),以十进制数
xover=100

% SNFS/SIQS的交叉点(crossover),以十进制数
snfs_xover=85

% 设置(ECM)预测试方案(pretesting plan), 例如plan=light.
% 以下是有效的选项与他们的比例:
% light (2/9)
% deep (1/3)
% normal (4/13)
% none (0)
% custom (pretest_ratio)
plan=normal

% 仅预测试(rho, p-1, ecm)输入值(即不使用NFS或SIQS),可选择最大深度
pretest

% 指定在输入上执行ECM的工作量
work=25

% 指定factor期间发现的素数输出文件
op="pfile.dat"

% 指定factor期间发现的因子输出文件
of="factored.dat"

% 指定factor期间未分解数的输出文件
ou="unfactored.dat"

% 对输入值不执行ECM算法
noecm

% 在找到一个因子后就停止
one

% 设置十进制数位数低于N就使用APR-CL算法证明是素数
aprcl_p=500

% 设置十进制数位数高于N就使用APR-CL算法证明是素数,启用额外的信息
aprcl_d=200

%%% QS选项 %%%
% 使用 double-large-prime variation
forceDLP

% 使用 triple-large-prime variation,注意其他选项,该选项可能不会被优化
forceTLP

% 设置小素数变化阈值
siqsTFSm =18

% 指定siqs保存文件名
% qssave="siqs.dat"

% 设置因子基数的大小(要使用的素数)
sqsB

% 设置大于此大小的试分解截止-筛位置(以位为单位),报告给试验因式分解例程
sqsTF

% 设置筛块数(每边)
siqsNB

% 将大素数界限设置为最大因子基素数的乘数
sqsM

% 不执行小素数变化阈值的优化
noopt

% 设置一个阈值,低于该阈值 siqs 将不使用保存文件(所有关系都是在内存中处理)
inmem=70

%%% NFS选项 %%%
% 运行实验性 cado-nfs+msieve NFS
cadoMsieve

% 包含 CADO-NFS 文件的目录的相对或绝对路径
% 注意:需要在路径末尾添加/或\
cado_dir =/home/nyancat/工具/cado-nfs/

% 指定 convert_poly 可执行文件的路径
% 你可以通过在 CADO-NFS 目录下运行“ make convert_poly ”来构建它
% 它将在 build/*/misc/convert_poly(.exe) 下
convert_poly_path =/home/nyancat/Tools/cado-nfs/build/NyanCatCBLFS.mpi/misc/convert_poly

% 包含 ggnfs-lasieve4I* 可执行文件的目录的相对或绝对路径。
% 没有这些 yafu 将不会使用 NFS
ggnfs_dir =..\..\ggnfs-bin\x64\
% ggnfs_dir =../../ggnfs-bin/

% 逗号分隔的 poly 文件列表以测试sieve
testsieve

% 如果过滤尝试失败,则收集新关系的百分比去生成矩阵
filt_bump=5

% 恢复矩阵求解
ncr

% 强制使用 gnfs(相对于 snfs)
gnfs

% 矩阵求解时使用指定线程数(可以是不同于常规选项的“threads”选项)
lathreads=1

% 重新启动 NFS 作业(当存在现有 nfs.dat 文件时,无论输入如何)
R

% 在搜索多项式前导系数时为每个线程设置一个批量大小
pbatch=250

% 使用代数方格筛分
a

% 使用有理方格筛
r

%%% ECM选项 %%%
% 设置 ECM 的 B1 水平。
B1ecm =11000

% 设置 ECM 的 B2 水平。
% 仅当您想要默认值以外的其他内容时才需要,默认当前 B1 的百分比。
% B2ecm =1100000

% 指定 ECM 可执行文件的路径
ecm_path =..\gmp-ecm\bin\x64\Release\ecm.exe
% ecm_path =../gmp-ecm/install/mingw/bin/ecm.exe
% ecm_path =../gmp-ecm/bin/ecm

%%% P-1 选项 %%%
% 为 P-1 设置 B1 级别。
% B1pm1 =100000

% 为 P-1 设置 B2 级别。
% 仅当您想要默认值以外的其他内容时才需要,默认当前 B1 的百分比。
% B2pm1 =10000000

%%% P+1 选项 %%%
% 为 P+1 设置 B1 级别。
B1pm1 =20000

% 为 P+1 设置 B2 级别。
% 仅当您想要默认值以外的其他内容时才需要,默认当前 B1 的百分比。
% B2pm1 =2000000

%%% Brent-Pollard Rho 选项 %%%
rhomax=200

%%% 费马选项 %%%
fmtmax=1000000