仿射變換與加密


前言:

摘抄自wiki的關於仿射變換的定義:

http://zh.wikipedia.org/wiki/%E4%BB%BF%E5%B0%84%E5%8F%98%E6%8D%A2

  仿射變換,又稱仿射映射,是指在幾何中,一個向量空間進行一次線性變換並接上一個平移,變換為另一個向量空間。

    一個對向量{\vec  {x}} 平移{\vec  {b}},與旋轉放大縮小A 的仿射映射為

     {\vec  {y}}=A{\vec  {x}}+{\vec  {b}}.       【1】


 

1、移位加密:

  比方說:把字母表全部向右循環移1位,也就是A變成B,B變成C,... , Z變成A。

  用數學一點的術語我覺得所謂“移位”就是映射吧。

  那么我們可以寫出通解公式,——現在是已知明文和加密步驟,進行加密,也就是求密文。

    New = (Old + k) (mod table)    【2】

   注釋:

      New:要求的密文

      Old  :明文

      k :移位的位數

      table:這張表有多大,比方說字母表就是26個字母,table就是26.

 

2、仿射變換:

  移位加密和仿射變換有啥關系呢?

  額 ,因為移位加密就是一種放射變換。。。

  首先我們在1里面的變量命名現在改一下,以便更好地認識,變成:

  y = (x + b)(mod m)   【3】 

  是不是和【1】很像啦,可惜我們的x沒有系數。。

  但是沒關系,我們完全可以自己加上一個系數,把【3】變成:

  y = (ax + b)(mod m)   a,b為整數; 【4】 

  這樣已經很像了,只不過【1】里面的自變量是向量。

  但是,我們這里討論的是一維的變換,所以不用用到2維及其以上的向量。(一維數字標記的向量就是普通的數嘛……)

  

3、知道了1、2這些,我們現在的目標就是——

  "當知道一個一維的仿射變換的加密,

    a. 怎么把明文加密 

    b. 怎么把密文解密 "

  

  對於"a. 怎么把明文加密",我們已經解決了,就是【4】那個公式。

  對於"b. 怎么把密文解密"嘛,其實也不復雜。待我不快不慢地說來。

  首先由【4】我們可以得到什么?

    沒錯!就是 y ≡ (ax + b)(mod m) —— 這是明顯的事實不用證明了。

  然后正視一下題目是什么:我們現在已知a,b,y,m,要求x。

    1). 左右移位一下 ,變為 y-b ≡ (ax)(mod m) 【5】

      {為啥【5】是對的?

        首先同余式可以相加,

         即 若 a ≡ b (mod m), c ≡ d (mod m), 【*】

         那么(a + c) ≡ (b + d)(mod m) .

          ——同余式可以相加的證明用同余的定義就好……

       然后  y ≡ (ax + b)(mod m)

           -b ≡ -b (mod m)

       所以……

      }

    2). 已知y-b ≡ (ax)(mod m),x未知,求x.

      現在已知ax ≡(y-b) (mod m);

      {首先我們要知道 同余式可以相乘,若【*】,則 ac ≡ bd (mod m) .證明同樣可以基於同余定義。}

      這時候我們就腦補了,如果有一個c能使得 cax ≡ x ≡ c(y-b) (mod m)就好了!

      也就是說這個c如果能使得ca = 1或者 更寬一點的:ca ≡ 1(mod m).那么就解決了!

    3). 於是問題變成了:找一個c使得,ca ≡ 1(mod m)

      於是很容易聯系到費馬小定理、歐拉定理一類的。

      但是費馬小定理要求m一定要是素數,這樣和我們題目不符。

      所以看看歐拉定理,對 gcd(a,m) = 1(m>1),有aΦ(m) ≡ 1 (mod m)

      {Φ(m) 為歐拉函數,就是小於等於m的與m互素的正整數個數。如Φ(2) = 1 ,Φ(6) = 2——6與{1,5}互素。}

      所以如果ca = aΦ(m) ,那么就有ca ≡ 1(mod m)。

      於是c = aΦ(m)-1 . 但是gcd(a,m) = 1,這一點不能漏。

4、綜上,我們發現了,當c = aΦ(m)-1 時 ;

     cax ≡c(y-b) (mod m)

     化為 x ≡c(y-b) (mod m) {現在要附加gcd(a,m)=1這個條件了!}

 

5、那么對於仿射變換,

    我們知道變化規則[即位移b]后,如何把密文[y]翻譯成明文[x]呢?

    結論是:

     step 1.  求 c = aΦ(m)-1 

     step 2.  x ≡c(y-b) (mod m)

      

 

番外小劇場:

窩:你在2里面為啥要改名字?該問題純屬好奇!

big窩:此中原因有2——

    1. 如文中所說,為了更直觀地比較。

    2. 也是最根本的原因——變量命名如此之平凡,根本不是我的feel!OK?

窩:......

窩:第二個問題——你怎么知道同余式符合相加相乘原理?你怎么想到的?

big窩: 首先"同余式符合相加相乘原理"這個結論在數論里就像是實數有相加相乘的運算一樣自然,如果想不到那么你需要找一本數論的書看看,不需要看完這就足以變成你的常識。至於怎么想到的,如果給你一堆數,你能想到的最基本的運算就是做加減乘除了吧?

窩:恩……好像是的……

big窩:那不就得了,說了同余式符合相加相乘原理是同余式的基本運算。

窩:……哦……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM