Py学习  »  区块链

区块链密码学之数据加密算法

Unitimes • 6 年前 • 203 次点击  

unitimes.media

全球视角,独到见解


“本文将详细阐述数据加密算法,希望对大家有所帮助。”



数据加密算法(DES)简介


数据加密算法(DES)是由IBM公司于19世纪70年代早期开发的,后来在1977年由“美国国家标准局(NBS)”,即现在的“国家标准化和技术协会(NIST)”所采纳,并批准把它作为飞机要部门使用的资料加密标准。自公布以来,DES便成为国际上商用保密通信盒计算机通信的最常用的加密算法。


当时规定DES的使用期限为10~15年,后来美国政府宣布延长它的使用期限,其原因有两条:一是DES当时尚未受到严重的威胁;二是一直没有新的资料加密算法问世。DES在被采用后,大约每5年被评审一次。DES的最后一次评审在1999年1月;这时它的一个替代品高级加密标准(Advanced Encryption Standand)已经开始使用了,这标志着DES即将退出历史舞台。这样DES在国际通信保密的舞台上活跃了20余年的时间。


DES的基本结构


DES是一种对称密码,加密和解密用的都是同一个密钥,有效密钥长度为56位。DES是一个分组密码算法,分组长度为64位,即对数据进行加解密的单位是64位,明文和密文的长度相同。由于加密和解密用的是同一算法,所以有利于硬件和软件上的实现。注意上面说的56位是有效密钥长度,事实上我们用的是64位密钥,但是第8,16,24,32,40,56和64位是奇偶校验位。


(一)初始置换(IP)。将明文块的位进行换位,其置换表示固定的。初始置换表为8*8的表格,第一位58表示该位置存放明文中的第58位字符。第1位字符已经变换到40位的位置。


注意初始置换是固定公开的函数,因此没有密码的意义。作用不大,它们的作用在于打乱原来输入x的ASCII码字划分的关系。经过初始置换之后,64位明文分成了两组L和R,各32位。由于这种方法软件实现较为麻烦,所有很多软件实现都删去了初始置换。经过初始置换,64位的输入得到了两个32位的输出。



(二)16轮的轮函数F变换。轮函数F由3个部分组成:扩展置换(E盒),非线性代换(S盒)和线性置换(P盒)。



(1)E盒的作用是将32为扩展为48位,其扩展规则按下表进行。该表大小为6*8,去掉最左和最右两行,中间的四列包含了1-32的顺序。第1列和第6列分别是对第4和第1列的扩展。经过扩展置换,32位的输入得到了48位的输出。



(2)S盒的作用是进行非线性代换。S盒是DES中唯一的非线性部分,DES的安全强度主要取决于S盒的安全程度。S盒运算其实是一个查表运算。在E盒的扩展之后得到了48位的数据,将其和48位的子密钥进行异或运算,这是密钥参与运算的步骤。将其分成8个组,每组6个,送到8个S盒中去。每一个S盒都是一个6位输入4位输出的结构,也就是说,48位输入到8个S盒会得到4*8=32位的输出。6位输入到8位输出的映射关系如下表所示,其中,第一位和最后一位作为行号,第二位到第五位最为列号。例如,101100,则行号为10=2,列号为0110=6。查得(2,6)=2,化成二进制位0010。注意,8个S盒的映射关系各不相同。



(3)P盒的作用只是进行简单的位置置换,只是简单地把一位换成另一位,不进行扩展和压缩。经过P盒操作,32位的输入得到32位的输出。


轮函数F剩下的步骤通过轮函数的组成图可以清晰看出,这里不再详细介绍。主要就是进行异或操作。就这样对经过E盒拓展的64位数据进行16轮的变换。


(三)逆初始置换。如果进行初始置换,则必须进行逆初始置换,逆初始置换的实现和初始置换一样,只是置换表不同而已。



DES的初始64位密钥通过置换选择PC-1得到有效的56位密钥。这56位分为2个28位数据C0和D0。每轮迭代中Ci-1和Di-1分别循环左移1位或2位,移位后的值作为下一轮的输入,同时也作为置换选择PC-2的输入,通过置换选择PC-2产生一个48位的输出,即为一个子密钥。64位密钥生成了16个48位的子密钥。



PC-1表(用于置换选择1)



PC-2表(用于置换选择2)



原文作者:spencer_chong


文章来源:CSDN


原文链接:

https://blog.csdn.net/zhuangxiaobin/article/details/42172619


著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


国际金融科技新媒体和社区平台

UNITIMES

网址 : unitimes.media

新浪微博:@Unitimes



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/vVXHH7rjLD
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/9875
 
203 次点击