格初步(五)

img

Coppersmith 定理

我们证明 \(\mathrm{Coppersmith}\) 定理的“完整版本” [Cop96b],其表述如下。

定理 1

设 ( N ) 为给定正整数,( f(x) \in \mathbb{Z}[x] ) 为给定的首一的次数为 ( d ) 的多项式。存在一个算法在多项式时间内找到所有满足 ( f(x_0) \equiv 0 \mod N ) 且 ( |x_0| \leq B \approx N^{1/d} ) 的整数 ( x_0 )。

在定理的表述及后续内容中,为了简化,我们使用 ( \approx ) 来隐去关于 ( d ) 的多项式因子以及 ( N^\epsilon )(其中 ( \epsilon > 0 ) 可以取得任意小的常数)。

这实际上给出了 ( B = N^{1/d - \epsilon} ) 的界,尽管通过更复杂的推导,可以证明定理对于 ( B = N^{1/d} ) 仍然成立。

本节的其余部分将致力于证明该定理。

在上一次讨论中,我们考虑了向 ( f(x) ) 添加 ( N \cdot x^i ) 的倍数,这不会改变 ( f(x) ) 在模 ( N ) 下的根。然而,这样的方法仅能得到 ( B \approx N{2/d2} ) 的界。为了取得更好的结果,我们考虑模 ( N ) 的更高次幂(模 \(2\) 相同的数模 \(4\) 不一定相同,模 \(4\) 给出比模 \(2\) 更精细的信息)。具体而言,我们的策略是利用 \(\mathrm{LLL}\) 算法高效地找到一个非零多项式 ( h(x) = \sum_i h_i x^i \in \mathbb{Z}[x] ),其次数至多为 ( n = d(m+1) ),其中 ( m ) 是待定的正整数,使得:

\(1\). ( f ) 在模 ( N ) 下的任何根在模 ( N^m ) 下也是 ( h ) 的根,即如果 ( f(x_0) \equiv 0 \mod N ),那么 ( h(x_0) \equiv 0 \mod N^m );
\(2\). 多项式 ( h(Bx) ) 是“短的”,即其系数满足 ( |h_i B^i| < N^m / (n+1) )。

由第二个性质可知,如果 ( |x_0| \leq B ),那么

[
\left|h\left(x_0\right)\right| \leq \sum_{i=0}^n |h_i B^i| < N^m
]

因此,再根据第一个性质,( f(x) ) 在模 ( N ) 下的任何小根 ( x_0 ) 也是 ( h(x) ) 在整数环上的根(而不仅仅是模 ( N^m ) 的根)。因此,找到 ( h(x) ) 后,我们可以高效地在整数环上分解它,并检查其小根是否确实是 ( f(x) ) 在模 ( N ) 下的根。

第一个重要的观察是,若 ( f(x_0) \equiv 0 \mod N ),则对于任意正整数 ( k ),均有 ( f(x_0)^k \equiv 0 \mod N^k )。因此,我们可以定义 ( n = d(m+1) ) 个多项式 ( g_{u,v}(x) ),使其在模 ( N^m ) 下的根包含 ( f(x) ) 在模 ( N ) 下的所有根,其定义如下:

[
g_{u, v}(x) = N^{m-v} \cdot x^u \cdot f(x)^v, \quad \text{其中 } u \in{0, \ldots, d-1}, \quad v \in{0, \ldots, m} .
]

我们利用关于这些多项式的两个重要事实:

  • 首先,( g_{u, v}(x) ) 的首项系数为 ( N^{m-v} ),并且其次数恰为 ( u + v d ),因为 ( f(x) ) 是首一的且次数为 ( d )。
  • 其次,如果 ( x_0 ) 是 ( f(x) ) 在模 ( N ) 意义下的根,那么 ( x_0 ) 也是所有 ( g_{u, v}(x) ) 在模 ( N^m ) 意义下的根,因为 ( N^m ) 整除 ( N^{m-v} f(x_0)^v )。

我们的格基由 ( g_{u, v}(B x) ) 的系数向量组成,其中 ( B ) 是我们要寻找的根的最大幅度界。换句话说,格基为
[
\mathbf{B} = \left[\mathbf{b}0, \ldots, \mathbf{b}\right]
]
其中 ( \mathbf{b}{u+v d} ) 是 ( g(B x) ) 作为 ( x ) 的多项式的系数向量。由于 ( g_{u, v}(x) ) 的次数为 ( u + v d ),其首项系数为 ( N^{m-v} ),且当 ( u, v ) 在各自的范围内遍历时,( u+v d ) 覆盖了集合 ( {0, \ldots, n-1} ),因此格基是上三角的(先遍历 \(u\),再遍历 \(v\)),对角线元素为 ( N^{m-v} B^{u+v d} )。通过直接计算可以得到

[
\operatorname{det}(\mathbf{B}) = B^{n(n-1) / 2} \cdot N^{d m(m+1) / 2}
]

运行 \(\mathrm{LLL}\) 算法于 ( \mathbf{B} ) 上,可以得到一个非零向量 ( \mathbf{v} \in \mathcal{L}(\mathbf{B}) ),其长度满足

[
\begin{aligned}
|\mathbf{v}| &\leq 2^{(n-1) / 2} \operatorname{det}(\mathbf{B})^{1 / n} \
&= 2^{(n-1) / 2}\left(B^{n(n-1) / 2} \cdot N^{d m(m+1) / 2}\right)^{1 / n} \
&\leq (2 B)^{n / 2} \cdot N^{m / 2}
\end{aligned}
]

设 ( B \approx \left(N^{1 / d}\right)^{m /(m+1)} ),对于足够大的 ( m ),这相当于 ( N^{1 / d-\epsilon} )。这样我们可以确保 ( (2 B)^{n / 2} < N^{m / 2} /(n+1) ),从而得到 ( |\mathbf{v}| < N^m /(n+1) ),满足我们的要求。将 ( \mathbf{v} ) 的各个分量读作 ( h(Bx) ) 的系数,即可得到一个合适的多项式 ( h(x) )。

注意,我们引入了一个额外的参数 \(m\),并且这个参数的大小也会影响计算的复杂度,所以要求 \(m\) 充分大但仍然是多项式有界的。

RSA 变种的密码分析

\(\mathrm{Coppersmith}\) 算法最有趣的应用之一是攻击 \(\mathrm{RSA}\) 的变种。

RSA 复习

\(\mathrm{RSA}\) 函数和加密系统 [RSA78](以其发明者 Rivest、Shamir 和 Adleman 命名)是实践中最广泛使用的公钥加密和数字签名方案之一。

需要区分 \(\mathrm{RSA}\) 函数和基于 \(\mathrm{RSA}\) 的密码系统。\(\mathrm{RSA}\) 函数的定义如下:设 ( N = pq ),其中 ( p ) 和 ( q ) 是两个不同的非常大的素数(按照当前的安全建议,它们应至少为 \(1000\) 位)。设 ( e ) 为公用的“加密指数”,满足 ( \gcd(e, \varphi(N)) = 1 ),其中 ( \varphi(N) = |\mathbb{Z}N^*| = (p-1)(q-1) ) 是欧拉函数。\(\mathrm{RSA}\) 函数 ( f: \mathbb{Z}_N^* \to \mathbb{Z}_N^* ) 由公用参数 ( (N, e) ) 定义如下:

[
f_{e,N}(x) := x^e \bmod N
]

人们普遍认为,仅给定 ( N, e ) 以及 ( y = f_{e,N}(x) )(其中 ( x ) 为均匀随机选取的 ( \mathbb{Z}_N^* ) 元素),在计算上难以找到 ( x )。然而,若掌握一些额外的“陷门”信息,则可以高效地计算 \(\mathrm{RSA}\) 函数的逆:设 ( d ) 为“解密指数”,满足 ( e \cdot d \equiv 1 \pmod{\varphi(N)} ),该指数在已知 ( N ) 的素因子分解时可高效计算。那么 \(\mathrm{RSA}\) 函数的逆为

[
f_{e,N}^{-1}(y) := y^d \bmod N
]

这的确是其逆函数,因为对于 ( y = f_{e,N}(x) = x^e \bmod N ),我们有

[
y^d = \left(xe\right)d = x^{e \cdot d \bmod \varphi(N)} = x \bmod N,
]

其中最后一个等式成立的原因是群 ( \mathbb{Z}N^* ) 的阶为 ( \varphi(N) ),且根据欧拉定理,( x^{\varphi(N)} \equiv 1 \pmod{N} )。因此,( f ) 在 ( \mathbb{Z}_N^* ) 上是一个双射(也称为置换)。

低指数攻击

由于对大整数取模的指数运算在计算上相对昂贵,许多早期方案主张在 \(\mathrm{RSA}\) 中使用尽可能小的加密指数,例如 ( e = 3 ),以获得显著的效率提升。

注意,不能使用 ( e = 2 )(或任何其他偶数 ( e )),因为它永远不会与偶数 ( \varphi(N) ) 互素。

例如,若采用形如 ( e = 2^k + 1 ) 的加密指数,则可以通过标准的“重复平方”方法仅使用 ( k+1 ) 次模乘运算来计算 ( x^e )。此外,即使对于小 ( e ),基本的 \(\mathrm{RSA}\) 函数在均匀随机的 ( y \in \mathbb{Z}_N^* ) 上仍然看起来难以逆向求解。

与其他任何确定性公钥加密方案一样,\(\mathrm{RSA}\) 函数本身并不是一个安全的密码系统。这是因为,如果攻击者对某个密文 ( c ) 中的消息有猜测(例如可能的消息数量很少),它可以通过对该消息进行加密并检查生成的密文是否与 ( c ) 匹配来轻松验证猜测是否正确(选择性明文攻击)(这种情况下要想防范攻击,可以采用流密码加密的思想或者随机化,不过相应的解密成本也会提高)。因此,必须使用随机化加密算法。最明显的随机化 \(\mathrm{RSA}\) 函数的方法是,在加密之前向消息的末尾附加一些随机的“填充”位。然而,设计一个安全的填充方案是相当困难且微妙的,因为存在使用 \(\mathrm{LLL}\) 等工具的巧妙攻击。

这里我们描述其中的一种攻击:当 ( e ) 很小且填充长度不足时,该攻击能够仅凭两个不同填充下的加密消息高效恢复原始消息 ( M )。

在实际应用中,同一条消息被多次加密的情况相当常见,例如常见的协议头部或重传机制(网络通信中因丢包或错误触发的数据包重新发送过程)。

我们首先介绍 [CFPR96] 提出的一个简单的“相关消息攻击”(related-message attack)(一种唯密文攻击但是要求知道或猜测出待解密明文间的线性关系),它本身就很有趣,同时也是填充攻击的关键组成部分。需要注意的是,该攻击针对的是确定性 \(\mathrm{RSA}\) 函数。

引理 2

令 ( e = 3 ),设 ( M_1, M_2 \in \mathbb{Z}_N^* ) 满足 ( M_1 \equiv \ell(M_2) \bmod N ),其中 ( \ell(M) = a M + b ) 为某个已知的线性函数(因为我们要对 \(g_1,g_2\) 实施欧几里得算法,所以必须知道 \(a,b\)),且 ( a, b \neq 0 )。则可以从 ( C_1 = M_1^e \bmod N ) 和 ( C_2 = M_2^e \bmod N )(以及其他公开信息 ( N, e, a, b ))高效恢复 ( M_1, M_2 )。

事实证明,该定理在 ( e > 3 ) 时“通常”仍然成立,但确实存在极少数例外情况。

证明: 定义多项式

[
g_1(x) = \ell(x)^e - C_1, \quad g_2(x) = x^e - C_2 \in \mathbb{Z}_N[x]
]

注意到 ( M_2 ) 是 ( g_1 ) 和 ( g_2 ) 的公共根,因此 ( (x - M_2) ) 是它们的一个公因子(这里要求 ( a \neq 0 ))。如果它实际上是最大公因子(即次数最高的公因子),则可以使用欧几里得算法求得。 接下来我们证明 ( (x - M_2) ) 确实是最大公因子。

严格来说,欧几里得算法通常要求 ( \mathbb{Z}_N ) 是一个域,而它实际上并不是域。然而,如果在此情况下欧几里得算法失败,那么它会作为副作用暴露出 ( N ) 的因子分解,从而使我们能够计算解密指数并恢复消息。

在环 \(\mathbb{Z}_N[x]\) 上执行欧几里得算法时,若遇到需对某个不可逆的系数进行除法操作,则此系数与 \(N\) 的最大公约数 \(d>1\) 即为 \(N\) 的非平凡因子。

首先观察,对于任意 ( C \in \mathbb{Z}_N^* ),多项式 ( x^3 - C ) 在模 ( N ) 意义下仅有一个根,因为 \(\mathrm{RSA}\) 函数是双射。因此,我们可以写出

[
g_2(x) = x^3 - C_2 = (x - M_2)(x^2 + \beta_1 x + \beta_0),
]

也有可能是三重根,但此时容易推理出 \(M_2 \equiv 0 \bmod N\),这与 \(M_2\in Z_N^*\) 矛盾。

其中二次项不可约,因此 ( \gcd(g_1, g_2) ) 只能是 ( (x - M_2) ) 或 ( g_2 ) 本身。显然我们有 ( g_2(x) \nmid g_1(x) ),因此最大公因子确实是 ( x - M_2 )。\(\square\)

假设 \(g_2(x) \mid g_1(x)\) ,则 \(g_1(x)\) 需为 \(g_2(x)\) 的常数倍。展开 \(g_1(x)=(a x+b)^3-C_1\)\(g_2(x)=x^3-C_2\) ,比较系数可得:三次项系数:\(a^3=k \cdot 1\) ,即 \(a^3 \equiv k \bmod N\) ;二次项系数: \(3 a^2 b=0 \bmod N\) ;一次项系数: \(3 a b^2=0 \bmod N\) ;常数项:\(b^3-C_1 \equiv-k C_2 \bmod N\) 。由于 \(a, b \neq 0\) ,条件 \(3 a^2 b \equiv 0\)\(3 a b^2 \equiv 0\) 要求 \(N\) 整除 \(3 a^2 b\)\(3 a b^2\) 。又 \(N\) 为标准 \(\mathrm{RSA}\) 模数(两素数乘积且不含小因子),矛盾。

现在我们考虑一种可能的填充方法:对消息 ( M ) 进行加密时,附加 ( m ) 个均匀随机比特 ( r \in{0,1}^m )(其中 ( m ) 是一个公开已知的值),然后应用 \(\mathrm{RSA}\) 函数:

[
C = f_{N, e}(M | r)
]

(解密时忽略填充比特。)数学上,这相当于将 ( M ) 转换为 ( 2^m \cdot M + r ),其中 ( r ) 是均匀随机选取的 ( r \in {0, \dots, 2^m - 1} )。需要注意的是,( M ) 必须足够短,且 ( m ) 必须足够小,以确保结果可以作为 ( \mathbb{Z}_N^* ) 的一个元素,并且能够明确地表示 ( M )。

[Coppersmith 1997] 的下述定理表明,如果填充长度过短(由 ( e ) 的大小决定),那么可以高效地从两个不同的加密结果中恢复消息 ( M )。注意,对于 ( e=3 ) 而言,填充长度 ( n / 9 \approx 2,000 / 9 \approx 222 ) 已足够大,以至于几乎不会出现重复的填充值,但它仍然基本无法提供安全性。

定理 3

设 ( N ) 的比特长度为 ( n ),令 ( e = 3 ),填充长度(以比特计)满足 ( m \leq \lfloor n / e^2 \rfloor )。若给定同一消息 ( M ) 的两个不同加密结果 ( C_1, C_2 ),其中填充值 ( r_1, r_2 ) 是任意不同的 ( r_1, r_2 \in {0, \dots, 2^m -1} ),则可以高效地恢复 ( M )。

证明: 设 ( M_1 = 2^m \cdot M + r_1 ) 和 ( M_2 = 2^m \cdot M + r_2 ),其中 ( r_1, r_2 ) 是两个不同的随机填充值,满足 ( r_1, r_2 \in {0, \dots, 2^m-1} )。我们定义两个二元多项式 ( g_1(x, y), g_2(x, y) \in \mathbb{Z}_N[x] ) 如下:

[
\begin{aligned}
& g_1(x, y) = x^e - C_1 = x^e - M_1^e, \
& g_2(x, y) = (x+y)^e - C_2 = (x+y)^e - M_2^e.
\end{aligned}
]

在这里,( x ) 表示未知的消息,而 ( y ) 表示未知的填充。由于 ( g_1 ) 与 ( y ) 无关,我们知道 ( (x = M_1, y = \star) ) 是 ( g_1 ) 的一个根,对任意的 ( y ) 都成立。同样地,( (x = M_1, y = r_2 - r_1) ) 是 ( g_2 ) 的一个根。

接下来,我们引入多项式的结式的概念。给定关于变量 ( x ) 的两个多项式,其结式定义为它们所有根的差的乘积:

更多结式的性质参见附录,注意到 \(g_1,g_2\) 都是关于 \(x\) 首一的,所以这里的结式定义和标准定义是吻合的。

[
\operatorname{res}x(p(x), q(x)) = \prod (x_0 - x_1).
]

此处我们将二元多项式 ( g_i(x, y) ) 视为关于 ( x ) 的多项式,其系数是关于 ( y ) 的多项式(即属于 ( \mathbb{Z}_N[y] ))。因此,( \operatorname{res}_x(g_1, g_2) ) 是关于 ( y ) 的一个多项式。

我们使用结式的一些重要性质:
首先,当 ( p, q ) 具有公共根时,显然 ( \operatorname{res}_x(p(x), q(x)) = 0 )。
其次,( \operatorname{res}_x(p, q) ) 可以通过行列式计算,即:

[
\operatorname{res}x(p, q) = \det(\mathbf{S}),
]

其中 ( \mathbf{S}_{p, q} ) 是一个维度为 ( \operatorname{deg} p + \operatorname{deg} q ) 的方阵,称为 \(\mathrm{Sylvester}\) 矩阵,其元素由 ( p ) 和 ( q ) 的系数向量的不同移位构成。因此,结式可以高效计算。
最后,在我们的场景中,( g_1 ) 的 ( x ) 系数是关于 ( y ) 的常数(即 ( y ) 的 \(0\) 次多项式),而 ( g_2 ) 的 ( x ) 系数是至多 ( e ) 次的 ( y ) 的多项式。根据 \(\mathrm{Sylvester}\) 矩阵的定义,结式 ( h(y) = \operatorname{res}_x(g_1, g_2) ) 是一个关于 ( y ) 的至多 ( e^2 ) 次的多项式。

我们声称 ( \Delta = r_2 - r_1 \neq 0 ) 是 ( h(y) ) 的一个根,并且它的绝对值满足

[
|\Delta| \leq 2^m < N^{1 / e^2}.
]

这成立的原因是,一元多项式 ( g_1(x, \Delta) ) 和 ( g_2(x, \Delta) ) 具有公共根 ( x = M_1 ) \(\Rightarrow \operatorname{res}_x(g_1(x,\Delta),g_2(x,\Delta))=0\)

有了这些信息,我们的攻击步骤如下:
\(1\). 构造多项式 ( g_1, g_2 ),并计算结式 ( h(y) = \operatorname{res}_x(g_1, g_2) )。
\(2\). 由于 ( \deg h(y) \leq e^2 ),且我们知道 ( h(y) ) 在模 ( N ) 意义下具有根 ( \Delta = r_2 - r_1 \neq 0 ),我们可以对 ( h(y) ) 运行 \(\mathrm{Coppersmith}\) 算法。
\(3\). 由于 ( |\Delta| \leq 2^m < N^{1 / e^2} ),我们可以在多项式时间内得到一个短根列表,其中包含 ( \Delta )。
\(4\). 将列表中的每个元素尝试作为 ( \Delta ) 的候选值,我们知道一个已知的(候选)线性函数 ( \ell(M) = M - \Delta ),其中 ( M_1 = \ell(M_2) ),因此可以使用引理 \(2\) 中的相关消息攻击(related-message attack)
\(5\). 其中某一次尝试涉及到正确的 ( \Delta ),从而揭示 ( M_1, M_2 )。我们可以通过重新加密并检查是否匹配 ( C_1, C_2 ) 来验证哪一次尝试是正确的(\(\mathrm{RSA}\) 函数加密是确定性的双射)。

附录 结式

引理 1

\(d(x)\)\(f(x)\)\(g(x)\) 的最大公因式,则 \(d(x) \neq 1\) 的充分必要条件是存在 \(\mathbb{K}\) 上的非零多项式 \(u(x), v(x)\) ,使

\[f(x) u(x)=g(x) v(x)\tag{1} \]

\(\operatorname{deg} u(x)<\operatorname{deg} g(x), \operatorname{deg} v(x)<\operatorname{deg} f(x)\)
证明:若 \(d(x) \neq 1\) ,令 \(f(x)=d(x) v(x), g(x)=d(x) u(x)\) ,则

\[f(x) u(x)=d(x) v(x) u(x)=g(x) v(x), \]

\(\operatorname{deg} u(x)<\operatorname{deg} g(x), \operatorname{deg} v(x)<\operatorname{deg} f(x)\)
反过来,若 \(d(x)=1\) ,则由 \((1)\) 式知 \(f(x) \mid g(x) v(x)\) .但 \(f(x)\)\(g(x)\) 互素,因此 \(f(x) \mid v(x)\) ,与 \(\operatorname{deg} f(x)>\operatorname{deg} v(x)\) 矛盾.\(\square\)

现设

\[\begin{aligned} f(x) & =a_0 x^n+a_1 x^{n-1}+\cdots+a_n \\ g(x) & =b_0 x^m+b_1 x^{m-1}+\cdots+b_m \\ u(x) & =x_0 x^{m-1}+x_1 x^{m-2}+\cdots+x_{m-1} \\ v(x) & =y_0 x^{n-1}+y_1 x^{n-2}+\cdots+y_{n-1} \end{aligned} \]

其中 \(x_0, \cdots, x_{m-1} ; y_0, \cdots, y_{n-1}\) 为待定未知数.将上面 \(4\) 个式子代入 \((1)\) 式,比较系数得

\[\left\{\begin{array}{l} a_0 x_0=b_0 y_0 \\ a_1 x_0+a_0 x_1=b_1 y_0+b_0 y_1 \\ a_2 x_0+a_1 x_1+a_0 x_2=b_2 y_0+b_1 y_1+b_0 y_2 \\ \ldots \ldots \ldots \ldots \\ \ldots \ldots \ldots \\ a_n x_{m-3}+a_{n-1} x_{m-2}+a_{n-2} x_{m-1}=b_m y_{n-3}+b_{m-1} y_{n-2}+b_{m-2} y_{n-1} \\ a_n x_{m-2}+a_{n-1} x_{m-1}=b_m y_{n-2}+b_{m-1} y_{n-1} \\ a_n x_{m-1}=b_m y_{n-1} \end{array}\right. \]

我们把上述 \(m+n\) 个等式看成是 \(m+n\) 个未知数 \(x_0, x_1, \cdots, x_{m-1} ; y_0, y_1, \cdots, y_{n-1}\) 的线性方程组.不难算出这个线性方程组系数矩阵的转置为

\[\left(\begin{array}{ccccccccc} a_0 & a_1 & a_2 & \cdots & \cdots & a_n & 0 & \cdots & 0 \\ 0 & a_0 & a_1 & \cdots & \cdots & a_{n-1} & a_n & \cdots & 0 \\ 0 & 0 & a_0 & \cdots & \cdots & a_{n-2} & a_{n-1} & \cdots & 0 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & a_0 & \cdots & \cdots & \cdots & a_n \\ -b_0 & -b_1 & -b_2 & \cdots & \cdots & \cdots & -b_m & \cdots & 0 \\ 0 & -b_0 & -b_1 & \cdots & \cdots & \cdots & -b_{m-1} & -b_m & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & \cdots & 0 & -b_0 & -b_1 & \cdots & \cdots & \cdots & -b_m \end{array}\right) . \]

若上述 \(m+n\) 方阵的行列式不等于零,则 \(x_i, y_j\) 都只能全为零,这时 \(f(x), g(x)\) 互素,即没有公根.反之,若上述方阵的行列式等于零,则 \(f(x), g(x)\) 有公因子,即有公根.于是我们给出如下定义:

定义 2

\[\begin{aligned} & f(x)=a_0 x^n+a_1 x^{n-1}+\cdots+a_n \\ & g(x)=b_0 x^m+b_1 x^{m-1}+\cdots+b_m \end{aligned} \]

定义下列 \(m+n\) 阶行列式:

\[R(f, g)=\left|\begin{array}{ccccccccc} a_0 & a_1 & a_2 & \cdots & \cdots & a_n & 0 & \cdots & 0 \\ 0 & a_0 & a_1 & \cdots & \cdots & a_{n-1} & a_n & \cdots & 0 \\ 0 & 0 & a_0 & \cdots & \cdots & a_{n-2} & a_{n-1} & \cdots & 0 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & a_0 & \cdots & \cdots & \cdots & a_n \\ b_0 & b_1 & b_2 & \cdots & \cdots & \cdots & b_m & \cdots & 0 \\ 0 & b_0 & b_1 & \cdots & \cdots & \cdots & b_{m-1} & b_m & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & \cdots & 0 & b_0 & b_1 & \cdots & \cdots & \cdots & b_m \end{array}\right| \]

\(f(x)\)\(g(x)\) 的结式或称 \(\mathrm{Sylvester}\) 行列式.
显然我们可以有下列判断两个多项式存在公根的定理.

定理 3

多项式 \(f(x)\)\(g(x)\) 有公根(在复数域中)的充分必要条件是它们的结式 \(R(f, g)=0\)

推论 4

多项式 \(f(x)\)\(g(x)\) 互素(在某个特征 \(0\) 数域上)的充分必要条件是 \(R(f, g) \neq 0\)

特征 \(0\) 的数域上多项式互素 \(\Leftrightarrow\) 在复数域上仍互素

多项式的结式也可以用它们的根来表示.

定理 5

\[\begin{aligned} & f(x)=a_0 x^n+a_1 x^{n-1}+\cdots+a_n \\ & g(x)=b_0 x^m+b_1 x^{m-1}+\cdots+b_m \end{aligned} \]

\(f(x)\) 的根为 \(x_1, x_2, \cdots, x_n, g(x)\) 的根为 \(y_1, y_2, \cdots, y_m\) ,则 \(f(x)\)\(g(x)\) 的结式为

\[R(f, g)=a_0^m b_0^n \prod_{j=1}^m \prod_{i=1}^n\left(x_i-y_j\right) \]

证明:将 \(\mathrm{Sylvester}\) 行列式视作关于 \(x_1,\cdots,x_n,y_1,\cdots,y_m\) 的多项式。

我们有 \(a_1=a_0(-x_1-\cdots-x_n),a_2=a_0(x_1x_2+\cdots +x_{n-1}x_n),a_i(1\leq i \leq n)=(-1)^ia_0s_i(x_1,\cdots,x_n)\),其中 \(s_i\) 是第 \(i\) 个初等对称多项式,\(b_j\) 同理。

观察到该行列式的每一项都是 \(a^mb^n\) (下标可能不一致),所以关于 \(x_i,y_j\) 的最高次项也是 \(mn\) 次。

由定理 \(3\) 可知 \(R(f, g)=c \prod_{i=1}^n \prod_{j=1}^m\left(x_i-y_j\right)\),比较最高次项系数可知 \(c\) 为常数,显然 \(c=a_0^mb_0^n\).\(\square\)

附录 2 \(\mathbb{Z}[x]\) 上的互素性

命题 1

\(\mathbb{Z}[x]\) 上,多项式互素 \(\Rightarrow\) 没有公共根,没有公共根 \(\nRightarrow\) 互素。
证明:
前者由 \(\mathrm{Bezout}\) 等式可知,后者由反例 \(f_1(x)=2,f_2(x)=4\) 可知。\(\square\)

posted @ 2025-04-02 12:06  沙棘数学社  阅读(96)  评论(0)    收藏  举报