背包密碼體制


背包問題介紹:

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

  • 背包算法為第一個推廣的公開密鑰加密算法。
  • 雖然后來發現這個算法不安全,但仍值得研究,因為它表示了如何將NP完全問題用於公開密鑰算法(好吧,這個我不知道是什么意思~)。

舉例:

這些物體的重量分別為1,5,6,11,14,20,則可將重5,6,11的物體放入,裝成一個重22的背包。但是無法裝成一個重24的背包。

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

基本原理

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

舉例:

明文: 1  1  1  0  0  1     0  1  0  1  1  0      0  1  1  0  0  0  

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

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

從上面可以總結:

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

算法安全性體現為:

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

算法的關鍵

 

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

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

前者可以解密,看下面~~

1、構造遞增序列背包

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

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

 

 舉例:

 

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

如何構造公鑰呢?

2、從私鑰構造公鑰

 

 經過上面的計算,序列為:{62  93  81  88  102  37}作為公鑰

 3、加密

 4、解密

 

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

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

為了方便我整理,我把求逆元相關的過程截圖出來,大家也可以點鏈接去看~  ending~

 

 

 

 

轉載於https://www.cnblogs.com/zhangyubao/p/6973836.html


免責聲明!

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



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