轻量级分组加密算法
PRESENT算法为基于SPN结构设计的轻量级分组密码算法。算法分组大小为64位,密钥长度分别为80位(PRESENT-80)和128位(PRESENT-128)。PRESENT算法共迭代31轮,每轮轮函数F由轮密钥加、、P盒置换3部分组成。


(1)轮密钥加层
将64位的轮密钥与64位的中间状态逐比特异或。
中间状态为B0…B63,轮密钥为…RK63,则=Bi+RKii≤15)
(2)S盒代换层
把(1)中输出的64位中间状态划分为16个4-bit的,然后依次进入16个相同的4X4S盒,输出为S[W0]……S[W15]。

(3)P盒置换层
(2)中输出的64位中间状态的每一位通过置换表进行重新排列。

线性置换表P可由以下公式表示:


PRESENT密码算法经过31轮迭代运算后,再使用64位的轮密钥K32再进行一次异或运算得到最后密文。
轮密钥生成算法
PRESENT密码算法的密钥扩展主要采用循环移位寄存器和使用与加密过程相同4-bit的S盒代换计算相结合的方式,先将80bit初始密钥保存在移位寄存器中,第i轮的轮密钥既是取当前寄存器中轮密钥K的左边64bit:
K=
考虑到PRESENT算法的实现性能和密码安全性的平衡,密钥为80bit的PRESENT的密钥扩展算法步骤如下:
1。首先将寄存器中的轮密钥
K循环左移61bit:
k79k78…k1k0=k18k17…k20k19
2。然后用PRESENT加密算法的4-bitS盒,与经过循环左移后的轮密钥K的左边4bit值进行代换运算:
k79k78k77k76=S[k79k78k77k76]
。最后将轮密钥中与5bit轮计数器轮数round_counter进行按位异或运算:
=[]⊕round_counter
4。然后取当前寄存器中轮密钥K的左边64bit:K=k63k62…k1k0=k79k78…k20k19作为第i轮的轮密钥
更多【轻量级分组加密算法PRESENT】相关视频教程:www.yxfzedu.com