密码学原理精解【3】

希尔密码

矩阵

矩阵基本概念

  • 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。

  • 由 m × n 个数 a i j a_{ij} aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。
    A = [ A 11 A 12 . . . A 1 n A 21 A 22 . . . A 2 n . . . . . . . . . . . . A m 1 A m 2 . . . A m n ] A=\begin{bmatrix} A_{11} & A_{12}&...&A_{1n} \\A_{21} & A_{22}&...&A_{2n} \\...& ...& ...& ... \\ A_{m1} & A_{m2}&...&A_{mn} \end{bmatrix} A= A11A21...Am1A12A22...Am2............A1nA2n...Amn

  • m×n 个数称为矩阵A的元素,简称为元。

  • a i j a_{ij} aij位于矩阵A的第i行第j列,称为矩阵A的 ( i , j ) (i,j) (i,j)

  • m×n矩阵A也记作 A m n A_{mn} Amn

  • 元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。

  • 行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。

  • 特征值与特征向量:
    n×n的方块矩阵A的一个特征值和对应特征向量是满足 A v = λ v Av=\lambda v Av=λv的标量以及非零向量。其中 v v v为特征向量, λ \lambda λ为特征值。
    线性变换的特征向量是指在变换下方向不变,或者简单地乘以一个缩放因子的非零向量。
    特征向量对应的特征值是它所乘的那个缩放因子。

行列式基本概念

一个n×n的正方矩阵A的行列式记为 d e t ( A ) det(A) det(A) ∣ A ∣ |A| A行列式的值仅仅是一个数,不是矩阵之类的

  • 2×2矩阵的行列式计算方式如下:
    d e t ( a b c d ) = a d − c b det\begin{pmatrix} a & b \\ c & d \end{pmatrix}=ad-cb det(acbd)=adcb

  • 元素 a i j a_{ij} aij的代数余子式
    (1)在n阶行列式中,把元素 a i j a_{ij} aij所在的第i行和第j列划去后,留下来的n-1阶行列式叫做元素 a i j a_{ij} aij的余子式,记作 M i j M_{ij} Mij
    (2)将余子式 M i j M_{ij} Mij再乘以-1的i+j次幂记为 A i j 。 A_{ij}。 Aij即: A i j = ( − 1 ) i + j M i j A_{ij}=(-1)^{i+j}M_{ij} Aij=(1)i+jMij
    (3) A i j A_{ij} Aij叫做元素 a i j a_{ij} aij的代数余子式。
    (4)一个元素 a i j a_{ij} aij的代数余子式与该元素本身没什么关系,只与该元素的位置有关。

  • 计算行列式值
    n×n矩阵的行列式计算方式如下:
    其任意行(列)的元素与对应的代数余子式乘积之和
    A = [ A 11 A 12 . . . A 1 n A 21 A 22 . . . A 2 n . . . . . . . . . . . . A n 1 A n 2 . . . A n n ] d e t ( A ) = ∣ A ∣ = a i 1 A i 1 + . . . + a i n A i n = ∑ j = 1 n a i j d e t ( A i j ) 即:行列式等于它的任一行 ( 列 ) 的所有元素与其对应的代数余子式的乘积之和 A=\begin{bmatrix} A_{11} & A_{12}&...&A_{1n} \\A_{21} & A_{22}&...&A_{2n} \\...& ...& ...& ... \\ A_{n1} & A_{n2}&...&A_{nn} \end{bmatrix} \\ \\det(A)=|A|=a_{i1}A_{i1}+...+a_{in}A_{in}=\sum_ {j=1}^{n}a_{ij}det(A_{ij}) \\即:行列式等于它的任一行(列)的所有元素与其对应的代数余子式的乘积之和 A= A11A21...An1A12A22...An2............A1nA2n...Ann det(A)=A=ai1Ai1+...+ainAin=j=1naijdet(Aij)即:行列式等于它的任一行()的所有元素与其对应的代数余子式的乘积之和

  • 两个性质
    d e t ( I m ) = 1 d e t ( A B ) = d e t ( A ) d e t ( B ) det(I_m)=1 \\det(AB)=det(A)det(B) det(Im)=1det(AB)=det(A)det(B)

特殊矩阵关于乘法运算构成群

1、 A l m A_{lm} Alm B m n = C l n B_{mn}=C_{ln} Bmn=Cln
c i , k = ∑ j = 1 m a i , j b j , k , 1 ≤ i ≤ l , 1 ≤ k ≤ n c_{i,k}=\sum_{j=1}^ma_{i,j}b_{j,k},1 \le i \le l,1 \le k \le n ci,k=j=1mai,jbj,k,1il,1kn
2、 ( A B ) C = A ( B C ) (AB)C=A(BC) (AB)C=A(BC)
3、一般矩阵不满足交换律 A B ≠ B A AB\not = BA AB=BA
4、矩阵有单位矩阵(对角线为1,其余为0) I m = [ 1 0 . . . 0 0 1 . . . 0 . . . . . . . . . . . . 0 0 . . . 1 ] I_m=\begin{bmatrix} 1&0&...&0 \\0 & 1&...&0 \\...& ...& ...& ... \\ 0& 0&...&1 \end{bmatrix} Im= 10...001...0............00...1
其中,22矩阵 I 2 = [ 1 0 0 1 ] I_2=\begin{bmatrix} 1&0 \\ 0&1 \end{bmatrix} I2=[1001]
A I m = A , I m B = B AI_m=A,I_mB=B AIm=A,ImB=B
5、如果A和B可逆
A m m A m m − 1 = A m m − 1 A m m = I m A_{mm}A_{mm}^{-1}=A_{mm}^{-1}A_{mm}=I_m AmmAmm1=Amm1Amm=Im
注意:可逆矩阵关于乘法运算不一定符合交换律,不一定构成交换群。
A怎么才能可逆呢? d e t ( A ) ≠ 0 det(A)\not =0 det(A)=0则A可逆。
G L n ( R ) = { A ∈ M n ( R ) ∣ d e t ( A ) ≠ 0 } GL_n(R)=\{A \in M_n(R)|det(A)\not =0\} GLn(R)={AMn(R)det(A)=0},即所有n阶可逆实矩阵 G L n ( R ) GL_n(R) GLn(R)关于矩阵乘法构成群。
6、伴随矩阵 A ∗ A^* A
A各元素代数余子式
A j i A_{ji} Aji组成伴随矩阵 A ∗ = ( A i j ) A^*=(A_{ij}) A=(Aij)
在这里插入图片描述
特别注意:i和j的顺序不一样,代数余子式 A j i A_{ji} Aji在伴随矩阵中按列排列。

  • 伴随矩阵 A ∗ A^* A的一些基本性质
    (1)A可逆当且仅当 A ∗ A^* A可逆。
    (2)如果A可逆, A ∗ = ∣ A ∣ A − 1 A^*=|A|A^{-1} A=AA1
    = > ∣ A ∣ − 1 A ∗ = A − 1 =>|A|^{-1}A^*=A^{-1} =>A1A=A1

  • R的逆元
    在R(实数)乘法群中
    1 为单位元。 设 a ∈ R , a ∗ 1 a = 1 = > 则 a 逆元 a − 1 为 1 a 1为单位元。 \\设a \in R ,a*\frac 1 a=1\\=>则a逆元a^{-1}为\frac 1 a 1为单位元。aRaa1=1=>a逆元a1a1
    因此, ∣ A ∣ − 1 = 1 ∣ A ∣ = > A − 1 = A ∗ 1 ∣ A ∣ |A|^{-1}=\frac 1 {|A|}\\=>A^{-1}=A^* \frac 1 {|A|} A1=A1=>A1=AA1

  • 二阶方阵可用下面方法求逆:
    A i j 为 d e t ( A ) ( 也可写成 ∣ A ∣ ) 中,元素 a i j 的代数余子式。 当矩阵的阶数等于一阶时,伴随矩阵为一阶单位方阵。 二阶矩阵的伴随矩阵 A ∗ 求法口诀:主对角线元素互换,副对角线元素变号 伴随矩阵 A ∗ = [ a 22 − a 12 − a 21 a 11 ] A − 1 = 1 ∣ A ∣ A ∗ A_{ij}为det(A)(也可写成|A|)中,元素a_{ij}的代数余子式。 \\当矩阵的阶数等于一阶时,伴随矩阵为一阶单位方阵。 \\二阶矩阵的伴随矩阵A^*求法口诀:主对角线元素互换,副对角线元素变号 \\伴随矩阵A^*=\begin{bmatrix} a_{22}&- a_{12} \\-a_{21}& a_{11} \end{bmatrix} \\A^{-1}=\frac 1 {|A|}A^* Aijdet(A)(也可写成A)中,元素aij的代数余子式。当矩阵的阶数等于一阶时,伴随矩阵为一阶单位方阵。二阶矩阵的伴随矩阵A求法口诀:主对角线元素互换,副对角线元素变号伴随矩阵A=[a22a21a12a11]A1=A1A

  • 高阶矩阵可以用矩阵的初等行变换。
    在线性代数中,矩阵的初等行变换是指以下三种变换类型 :
    ( 1 ) 交换矩阵的两行(对调 i , j ,两行记为 r i , r j ); ( 2 ) 以一个非零数 k 乘矩阵的某一行所有元素(第 i 行乘以 k 记为 r i × k ); ( 3 ) 把矩阵的某一行所有元素乘以一个数 k 后加到另一行对应的元素 ( 第 j 行乘以 k 加到第 i 行记为 r i + k ∗ r j ) 。 (1) 交换矩阵的两行(对调i,j,两行记为r_i,r_j); \\(2) 以一个非零数k乘矩阵的某一行所有元素(第i行乘以k记为r_i×k); \\(3) 把矩阵的某一行所有元素乘以一个数k后加到另一行对应的元素(第j行乘以k加到第i行记为r_i+k*r_j)。 (1)交换矩阵的两行(对调i,j,两行记为rirj);(2)以一个非零数k乘矩阵的某一行所有元素(第i行乘以k记为ri×k);(3)把矩阵的某一行所有元素乘以一个数k后加到另一行对应的元素(j行乘以k加到第i行记为ri+krj)

加解密原理

密钥

  • 设m为正整数,P和C分别是原文和密文。
    P = C = ( Z 26 ) m P=C=(Z_{26})^m P=C=Z26m
    这里的m为m维向量空间,m维欧氏空间的意思
    26即26个英文字母,也可以为 ( Z 256 ) m (Z_{256})^m (Z256)m(一个字节256个数字)
  • m为2,即:每次对2个数字(即:2个英文字母或2个字节)进行加解密。
    明文: x = ( x 1 , x 2 ) x=(x_1,x_2) x=(x1,x2),密文 y = ( y 1 , y 2 ) y=(y_1,y_2) y=(y1,y2)
    密钥 : K = [ K 11 K 12 K 21 K 22 ] 密钥:K=\begin{bmatrix} K_{11}& K_{12} \\ K_{21}& K_{22} \end{bmatrix} 密钥:K=[K11K21K12K22]
    特别注意: Z 26 Z_{26} Z26 Z 256 Z_{256} Z256下进行运算

加密函数

y 1 = ( x 1 , x 2 ) [ k 11 k 12 k 21 k 22 ] m o d 26 ( 或 256 ) y_1=(x_1,x_2) \begin{bmatrix} k_{11}& k_{12} \\ k_{21}& k_{22} \end{bmatrix}\quad mod\quad 26(或256) y1=(x1,x2)[k11k21k12k22]mod26(256)
特别注意上面函数是在 Z 26 或 Z 256 下进行 Z_{26}或Z_{256}下进行 Z26Z256下进行
即:
y 1 = ( k 11 x 1 + k 21 x 2 ) m o d 26 ( 或 256 ) y 2 = ( k 21 x 1 + k 22 x 2 ) m o d 26 ( 或 256 ) y_1=(k_{11}x_1+k_{21}x_2)\quad mod \quad 26(或256) \\y_2=(k_{21}x_1+k_{22}x_2) \quad mod \quad 26(或256) y1=(k11x1+k21x2)mod26(256)y2=(k21x1+k22x2)mod26(256)

解密函数

y = x K = > y K − 1 = ( x K ) K − 1 = x ( K K − 1 ) = x I m = x y=xK\\=>yK^{-1}=(xK)K^{-1}=x(KK^{-1})=xI_m=x y=xK=>yK1=(xK)K1=x(KK1)=xIm=x
= > x = y K − 1 =>x=yK^{-1} =>x=yK1
特别注意上面函数是在 Z 26 或 Z 256 下进行 Z_{26}或Z_{256}下进行 Z26Z256下进行

Z 26 上的运算( Z 256 与此类似) Z_{26}上的运算(Z_{256}与此类似) Z26上的运算(Z256与此类似)

  • ∣ K ∣ − 1 = ? |K|^{-1}=? K1=?
    这是错的: K − 1 = 1 ∣ K ∣ K ∗ ,这不是在 R 乘法群,是在 Z 26 乘法群。 K − 1 = ∣ K ∣ − 1 K ∗ ∣ K ∣ − 1 = ? 这是错的:K^{-1}=\frac 1 {|K|}K^*,这不是在R乘法群,是在Z_{26}乘法群。 \\K^{-1}=|K|^{-1}K^* \\|K|^{-1}=? 这是错的:K1=K1K,这不是在R乘法群,是在Z26乘法群。K1=K1KK1=?

  • ∣ K ∣ = ? |K| =? K=?
    ∣ K ∣ = ∑ j = 1 n a i j ( − 1 ) i + j d e t ( A i j ) ,这也是错误的!! 这才是对的: ∣ K ∣ = ∑ j = 1 n a i j ( − 1 ) i + j d e t ( A i j ) m o d 26 思考一下为什么? \\|K| =\sum_ {j=1}^{n}a_{ij}(-1)^{i+j}det(A_{ij}) ,这也是错误的!! \\这才是对的:|K| =\sum_ {j=1}^{n}a_{ij}(-1)^{i+j}det(A_{ij}) \quad mod \quad 26 \\ 思考一下为什么? K=j=1naij(1)i+jdet(Aij),这也是错误的!!这才是对的:K=j=1naij(1)i+jdet(Aij)mod26思考一下为什么?

  • K ∗ = ? K^*=? K=?
    K i j = ( − 1 ) i + j M i j K_{ij}=(-1)^{i+j}M_{ij} Kij=(1)i+jMij这也错了!?
    是的,错了!这只是在R乘法群的运算!

  • ∣ K ∣ ≠ 0 = > K 可逆 |K|\not = 0=>K可逆 K=0=>K可逆
    这也是错误的,在 Z 26 Z_{26} Z26中要变换如下:
    g c d ( ∣ K ∣ , 26 ) = 1 = > K 在 Z 26 可逆 gcd(|K|,26)=1=>K在Z_{26}可逆 gcd(K,26)=1=>KZ26可逆

例1

1 、取 K = [ K 11 K 12 K 21 K 22 ] = [ 19 17 2 9 ] ∣ K ∣ = ( 19 ∗ 9 − 17 ∗ 2 ) m o d 26 = 137 m o d 26 = 7 = > g c d ( 7 , 26 ) = 1 = > K 在 Z 26 中可逆。 2 、 7 ∗ 15 ≡ 1 ( m o d 26 ) = > 7 − 1 = 15 = > ∣ K ∣ − 1 = 15 3 、 K − 1 = ∣ K ∣ − 1 A ∗ = ∣ K ∣ − 1 [ K 11 − K 12 − K 21 K 22 ] = 15 [ 9 − 17 − 2 19 ] = 15 [ 9 9 24 19 ] K − 1 = [ 135 135 360 285 ] = [ 5 5 22 25 ] 4 、设原文 x = ( 18 , 7 ) ( 1 ) 密文 y = e k ( x ) = x K = ( 18 , 7 ) [ 19 17 2 9 ] = [ 356 , 359 ] = [ 18 , 5 ] ( 2 ) 原文 x = d k ( y ) = y K − 1 = [ 18 , 5 ] [ 5 5 22 25 ] = [ 200 , 215 ] = [ 18 , 7 ] = x 1、取K=\begin{bmatrix} K_{11}& K_{12} \\K_{21}& K_{22} \end{bmatrix}=\begin{bmatrix} 19 & 17 \\ 2&9 \end{bmatrix} \\|K|=(19*9-17*2) \quad mod \quad 26 \\=137 \quad mod \quad 26 =7 \\=>gcd(7,26)=1 \\=>K在Z_{26}中可逆。 \\2、7*15\equiv 1(mod \quad 26)=>7^{-1}=15=>|K|^{-1}=15 \\3、K^{-1}=|K|^{-1}A^*=|K|^{-1}\begin{bmatrix} K_{11}&- K_{12} \\-K_{21}& K_{22} \end{bmatrix} =15\begin{bmatrix} 9& -17 \\-2& 19 \end{bmatrix} \\ =15\begin{bmatrix} 9& 9 \\24& 19 \end{bmatrix} \\ K^{-1}=\begin{bmatrix} 135& 135 \\360& 285 \end{bmatrix} =\begin{bmatrix} 5& 5 \\22& 25 \end{bmatrix} \\ 4、设原文x=(18,7) \\ (1)密文y=e_k(x)=xK=(18,7)\begin{bmatrix} 19 & 17 \\ 2&9 \end{bmatrix} \\=[356,359]=[18,5] \\(2)原文x=d_k(y)=yK^{-1}=[18,5]\begin{bmatrix} 5& 5 \\22& 25 \end{bmatrix} \\=[200,215] =[18, 7]=x 1、取K=[K11K21K12K22]=[192179]K=(199172)mod26=137mod26=7=>gcd(7,26)=1=>KZ26中可逆。27151(mod26)=>71=15=>K1=153K1=K1A=K1[K11K21K12K22]=15[921719]=15[924919]K1=[135360135285]=[522525]4、设原文x=(18,7)(1)密文y=ek(x)=xK=(18,7)[192179]=[356,359]=[18,5](2)原文x=dk(y)=yK1=[18,5][522525]=[200,215]=[18,7]=x

关于负数取余问题:
1、当被除数能被除数整除时,无论被除数和除数的正负,余数都是0。
2、对于负数除以正数或,编译器会先将分子(即被除数的绝对值)转换为正整数进行取余运算。

参考文献

1、矩阵,百度百科
2、代数余子式,百度百科
3、特征向量,百度百科
4、《密码学原理与实践(第三版)》
5、矩阵变换,百度百科
6、伴随矩阵,百度百科

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值