观察到,当 $\Bbb{G}$ 是一个 $n$ 阶循环群且 $g \in \Bbb{G}$ 是 $\Bbb{G}$ 的生成元时,存在所谓的 指数映射(exponential map)。该映射关系将余数类 $(\Z_n, +)$ 的加法运算映射到 $\Bbb{G}$ 的运算上。指数映射可以使用以下式子形式化(其中 $g^x$ 表示“将 $g$ 乘以自己 $x$ 次”,$g^0=e_{\Bbb{G}}$):

$$g^{(\cdot)}: \Z_n \to \Bbb{G}; x \mapsto g^x$$

要了解指数映射的工作原理,我们首先观察到,由于 $g^0=e_\Bbb{G}$ 的定义,$\Z_n$ 的幺元被映射为 $\Bbb{G}$ 的幺元。此外,由于 $g^{x+y}=g^x \cdot g^y$ ,所以该映射符合群法则。

符号 6

如果群 $(\Bbb{G}, +)$ 写成 加法记号 ,那么指数映射通常被称为 标量乘法(scalar multiplication) ,记法如下:

$$(\cdot)\cdot g: \Z_n \to \Bbb{G}; x \mapsto x\cdot g$$

在此记号中,符号 $x \cdot g$ 被定义为“将生成元 $g$ 与其自身相加 $x$ 次”,而符号 $0 \cdot g$ 被定义为 $\Bbb{G}$ 中的幺元。

密码学应用通常使用阶数 $n$ 相当大的有限循环群,这意味着对于非常大的余数类,使用生成元自乘的方法计算指数映射是不可行的。但 平方和算法(square and multiply) 可以通过 $k$ 步计算指数映射,其中 $k$ 为指数的位长度。该算法使计算大余数类的指数映射称为可能。

Squard and Multipy

由于指数映射遵循群法则,所以先在或后在 $\Z_n$ 中进行加法计算并不重要:两种情况下的结果都是相同的。前一种方法(即先进行加法运算)通常被称为在指数中进行计算。在密码学中,特别是在 SNARK 开发中,我们经常在生成元的指数中进行计算。

示例 38

已知乘法群 $(\Z^*_5, \cdot)$ 是一个 4 阶循环群,且元素 $3 \in \Z_5^*$ 使其生成元。这意味着以下映射既遵循 $\Z_4$ 中的加法群法则,也遵循 $\Z^*_5$ 的乘法群法则:

$$3^{(\cdot)}: \Z_4 \to \Z_5^* ; x \mapsto 3^x$$

为了给出一个在指数中计算的示例,让我们在生成元 $3$ 的指数中执行 $1+2+3$ 计算:

$$ \begin{align} 3^{1+3+2} &=3^{2}\\ & = 4 \end{align} $$

在上式 $(1)$ 中,我们首先在余数类群 $(\Z_4, +)$ 中计算 $1+2+3$ ,然后在 $(2)$ 中计算指数映射 $3^{(\cdot)}$ 的值。

然后,由于指数映射遵循群法则,我们也可以对加法映射到 $(\Z_5^*, +)$ 中,然后使用 $(\Z_5^*, +)$ 的群律。结果相同:

$$ \begin{align*} 3^1 \cdot 3^3 \cdot 3^{2} & = 3\cdot 2 \cdot 4\\ & = 1\cdot 4\\ & = 4 \end{align*} $$

因为指数映射是遵循群法则的一对一映射,可以证明该映射具有以 $g$ 为底的逆,称为以 g 为底的离散对数映射(base g discrete logarithm map):

$$log_g(\cdot): \Bbb{G} \to \Z_n; x \mapsto log_g(x)$$

离散对数在密码学中极其重要,因为对于有限循环群,指数映射及其逆(即离散对数映射)被认为是单向函数。这意味着计算指数映射是高效快速的,但计算对数映射是缓慢的。

示例 39

考虑 示例 38 中给出的指数映射 $3^{(\cdot)}$ ,其逆元可以使用以 3 为底的离散对数表示,如下:

$$log_3(\cdot): \Z_5^* \to \Z_4; x \mapsto log_3(x)$$

与计算 $3^{(\cdot)}$ 不同,我们没有任何方法计算出此映射的值,只能通过尝试该群内的任一元素直到找到正确的元素。比如,为计算 $log_3(4)$ ,我们不得不尝试任一 $x \in \Z_4$ 使其满足 $3^x=4$ ,我们所能做的只有重复测试直到满足条件。为做到这一点,我们只能写下所有的 $3^{(\cdot)}$:

$$ \begin{array}{cccc} 3^0 = 1, & 3^1 = 3, & 3^2 = 4, & 3^3 = 2 \end{array} $$

因为离散对数 $log_3(\cdot)$ 定义为指数映射的反函数,我们可以计算得到:

$$ \begin{array}{ccccc} log_3(1) = 0, & log_3(2) = 3, & log_3(3) = 1, & log_3(4) = 2 \end{array} $$

请注意,上述方法之所以可行,因为我们可以写出所有的指数映射。但是,在现实世界中,由于群是极其庞大的,所以上述方法并不可行。

练习 38. Let $(\Bbb{G},+)$ be a finite cyclic group of order $n$. Consider algorithm \ref{alg_square-and-mul} and define its analog for groups in additive notation.

此练习不知道如何翻译,暂且保留英语