密码学基础学习

首先声明符号:C密文,P明文,K密钥,EK加密,DK解密。

一。传统密码学。基本是移位和变换,比如凯撒密码,维吉尼亚密码,hill密码等。

(1)凯撒密码,密钥空间是26。加密C=(p+k)mod26。解密P=(c-k)mod26。

(2)单表置换。n个元素有n!个置换

(3)维吉尼亚密码。公式太复杂不想写。。。

二。数论基础知识,有限域的运算,加法是按位异或,乘法比较有意思。高级加密标准(AES)就是依赖有限域运算的基础知识。多项式乘x,向左移一位,右边补 0,如果溢出(最高位是1),那么在补0之后再异或十六进制的1B。其他的乘法可以依次有上述步骤推出来。

三。现代密码学,有对称加密和非对称加密。加密标准DES,密文长度64bit,有效密钥长度是56bit,和festial类似,首先把一个密文分为左右等长部分,L0和R0,一轮加密执行下面操作,R1=L0,L1=R0异或F,其中F是加密函数。如此进行10轮。

四。高级加密标准(AES),明文有128bit,192bit,256bit等,以128bit为例,首先构造状态矩阵,是一个4*4的矩阵,其中矩阵里每一个元素代表8bit,这样就可以把明文全部放到矩阵里面进行加密了。接下来,简单介绍 AES一轮加密。分为4个步骤,字节替代(SubBytes,SB),行位移(ShiftRows,SR),列混淆(MixColumns,MC),轮密钥加(AOR).

(1)字节替代,通过S盒完成一个字节到另一个字节的映射。前面说到状态矩阵每个元素有8bit,前四位对应S盒的行坐标,后四位对应S盒的列坐标,在S盒里找到对应元素来构造矩阵。

(2)行位移,把刚才构造好的矩阵第i行向左移i位。

(3)列混淆,分为正向列混淆和逆向列混淆。以正向列混淆为例,左乘一个矩阵,矩阵打不出来,( 2 3 1 1

1 2 3 1

1 1 2 3

3 1 1 2),在这里,计算方式是有限域计算。但是可以总结为: x*01,为x本身。x*02,x的二进制左移1位右边补0,如果溢出(如果二进制最高位1),那么再异或1B。x*03,结果是(x*02)异或x。

(4)轮密钥加变换,状态矩阵按位与轮密钥矩阵。

这样一轮AES加密过程就结束了。

五。公钥密码学与RSA。

图片发自App

今天先写到这里吧。

你可能感兴趣的:(密码学基础学习)