密码学——LCG算法

概述

线性同余发生器(Linear congruential generator),简称LCG,是一种能产生具有不连续计算的伪随机序列的分段线性方程的算法,它代表了最古老和最知名的伪随机序列生成器算法之一,其理论相对容易理解,并且易于实现和快速,特别是在可以通过存储位截断提供模运算的计算机硬件上。

作为流密码(stream cipher)中常用的伪随机数发生器(pseudo random number generator),其随机性能取决于参数和种子的选择。

递推公式

Sn+1aSn+b(modm)

参数

  • S代表伪随机序列
  • m0<m 表示模量
  • a0<a<m 表示乘数
  • b, 表示增量
  • S00S0<m 表示初始值

an互素,使得

ax1modn

成立的最小正整数x称为an的阶,记为ordn(a)

原根

如果有

ordn(a)=ϕ(n)

称a为模n的原根

gcd(a,m)=1,则周期T=ordm(a),所以选取系数时应尽量使得a为模m的原根,以此尽量延长LCG周期。

常见推导公式

公式一

此公式用于从Sn+1反推出Sn,公式如下

Sn=(a1(Sn+1b))%m

推导过程如下

Sn+1baSn(modm)

进而

Sn=(a1(Sn+1b))%m

公式二

此公式用于求a,公式如下

a=((Sn+2Sn+1)(Sn+1Sn)1)%m

推导过程如下

Sn+2aSn+1+bmodm

Sn+1aSn+bmodm

两式相减

(Sn+2Sn+1)a(Sn+1Sn)modm

进而得到

a=((Sn+2Sn+1)(Sn+1Sn)1)%m

公式三

此公式用于求b,公式如下

b=(Sn+1aSn)%m

公式四

此公式用于求m,公式如下

t=Sn+1Sn,则m=gcd((tn+1tn1tn2),(tntn2tn12))

推导过程如下

t=Sn+1Sn ,有

tn(aSn+b)(asn1+b)atn1modm

tn+1tn1tn2(aatn1tn1atn1atn1)0modm

Tn=tn+1tn1tn2m的倍数,求TnTn1最大公因数即为m,所以

m=gcd((tn+1tn1tn2),(tntn2tn12))

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇