这两天闲里偷忙花了些时间读密码学论文,然后发现大家对素数阶乘法循环群情有独钟。在某篇论文中,甚至出现了 x′=x1u(x∈G,∣G∣=p)x' = x^{\frac{1}{u}}(x\in G,|G|=p)x′=xu1(x∈G,∣G∣=p) 的操作,让我大为迷惑:这开 uuu 次根都不需要离散对数的?
于是我决定先探究一下素数阶乘法循环群的性质,来考察是否真能这么做。经过一番折腾,我发觉…似乎还真可以这样?遂记录探究过程如下。
首先我意识到我好像没有见过素数阶乘法循环群的实例,问了问 GPTGPTGPT 他给我整了个 Zp∗Z_p^*Zp∗ 出来。问题是这玩意儿阶数显然为 p−1p-1p−1 不是个素数(顺便一提,ZpZ_pZp 倒是个素数阶循环群,可惜是加法循环群)。跑去查了查,查到了 素数阶群一定是循环群 这么个结论,然而依旧没有给出实例。鉴定为这下只能玩抽象的了。
我们假装有这么个循环群 GGG,其阶数为素数 ppp. 我们能推出以下性质:
- GGG 必是循环群,且除了单位元 eee 以外的元素都是生成元。
由于一个群的子群的阶一定整除这个群的阶,因此 GGG 的子群的阶只能是 111 或 ppp,那么它的子群只会是平凡子群 {e}\{e\}{e} 和 GGG 了。 我们考虑 g∈Gg\in Gg∈G,那么 <g><g><g> 显然是 GGG 的子群。当 g=eg =eg=e 时,显然 <g>={e}<g>=\{e\}<g>={e},而当 g≠eg\neq eg=e 时,注意到 g0=e≠gg^0=e\neq gg0=e=g, ∣<g>∣|<g>|∣<g>∣ 显然大于等于 222,于是只能有 <g>=G<g>=G<g>=G 了,而此时 GGG 已经是循环群了,ggg 也成了生成元。 - (x1u)u=x(x^{ \frac{1}{u} })^u =x(xu1)u=x,其中 1u=u−1mod p,u≠0mod p\frac{1}{u} = u^{-1} \mod p,u\neq 0 \mod pu1=u−1modp,u=0modp.
首先 1u\frac{1}{u}u1 显然是存在的。当 x=ex = ex=e 结论显然成立。而当 x≠ex\neq ex=e,xxx 必定是 GGG 的生成元,xp=ex^p=exp=e(话说似乎不是生成元好像也有这个性质来着)。那么 (x1u)u=xu×1u=xk∗p+1=ek×x=x(x^{ \frac{1}{u} })^u =x^{u\times \frac{1}{u}}=x^{k*p+1}=e^k\times x=x(xu1)u=xu×u1=xk∗p+1=ek×x=x. 综上结论成立。