信息安全-4:公鑰密碼體制之揹包算法[原創]

 

轉發註明出處:http://www.cnblogs.com/0zcl/p/6111686.htmlhtml

前言

原本我是想學RSA算法的,但發現太難了,不是我能理解的,因而我先看教材前面的揹包算法。不出意料的話會在下一篇博客介紹下RSA算法!算法

 

揹包問題介紹:

 

給定一些物體,每一個物體有不一樣的重量,是否有可能將這些物體放入一個揹包,使揹包的重量等於一個給定的值。編程

  • 揹包算法爲第一個推廣的公開密鑰加密算法。
  • 雖而後來發現這個算法不安全,但仍值得研究,由於它表示瞭如何將NP徹底問題用於公開密鑰算法(好吧,這個我不知道是什麼意思~)。

 

舉例:

這些物體的重量分別爲1,5,6,11,14,20,則可將重5,6,11的物體放入,裝成一個重22的揹包。可是沒法裝成一個重24的揹包。安全

  • 揹包問題:等於一個給定的值。
  • 解爲選擇物品裝入的狀況,裝入用1,未裝入用0.例子中對給定值22的解爲{0,1,1,1,0,0}
  • 這個問題須要的時間隨物體的數量的增長成指數時間。

 

 

基本原理

這個算法我沒有編程,時值考試月,時間緊張,等我有時間再回來搞~加密

首先,揹包算法用於信息安全(密碼法),咱們總得搞清楚什麼是明文,密文,密鑰吧?!url

舉例:spa

明文: 1  1  1  0  0  1     0  1  0  1  1  0      0  1  1  0  0  0  3d

密鑰: 1  5  6  11  14  20   1  5  6  11  14  20    1  5  6  11  14  20htm

密文: 1+5+6+20=32      5+11+14=30       5+6=11blog

 

從上面能夠總結:

  • 明文爲物品的裝入狀況,是1/0的序列,並且明文長度等於物體的個數,表示從中選取物體裝入揹包
  • 密文爲選取物體的質量和
  • 密鑰爲揹包問題中物品重量序列

 

算法安全性體現爲:

若攻擊者得到密文、密鑰,也沒法在線性時間內求明文(物品的裝入狀況)

 

 

算法的關鍵

 

算法的關鍵是有兩個不一樣的揹包重量序列,這兩個重量序列對於給定的相同的值,解相同(物品的裝入狀況相同)

前者物品的重量列表是遞增的,後者則是無序的

前者能夠解密,看下面~~

 

 

一、構造遞增序列揹包

易解的揹包問題:若物品的重量列表爲一個超遞增序列,則該揹包問題很容易解的。

好比遞增序列:1  3  6  13  27  52

 

 舉例:

 

  •  非遞增揹包是一個難問題
  • 揹包算法先找到一個遞增揹包的重量序列做爲私鑰,再由此構造一個序列(有相同解的通常揹包問題的序列)做爲公鑰(重要!)

如何構造公鑰呢?

 

 

二、從私鑰構造公鑰

 

 通過上面的計算,序列爲:{62  93  81  88  102  37}做爲公鑰

 

 

 三、加密

 

 四、解密

 

 解密這裏我遇到一個問題:如何求n-1,即如何求n關於模m的逆元??(注意:這裏必須搞懂,否則下一篇博客RSA算法就確定不懂的!)

我百度找了好多,也看了別了的博客,好比http://blog.sina.com.cn/s/blog_65a5cf5e0100nyqo.html,但我看不懂啊!!終於我找到了一個我能看懂的求逆元方法<展轉相除法求模的逆元>!(已經編程實現),下篇博客會發出來~~

 

 

爲了方便我整理,我把求逆元相關的過程截圖出來,你們也能夠點連接去看~  ending~

 

 

 

 

 

 

 

 

 

 

 

 

 

……

相關文章
相關標籤/搜索