• 信息安全-4:公钥密码体制之背包算法[原创]


    转发注明出处:http://www.cnblogs.com/0zcl/p/6111686.html

    前言

    本来我是想学RSA算法的,但发现太难了,不是我能理解的,于是我先看教材前面的背包算法。不出意料的话会在下一篇博客介绍下RSA算法!

     

    背包问题介绍:

    给定一些物体,每个物体有不同的重量,是否有可能将这些物体放入一个背包,使背包的重量等于一个给定的值。

    • 背包算法为第一个推广的公开密钥加密算法。
    • 虽然后来发现这个算法不安全,但仍值得研究,因为它表示了如何将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~

     

     

     

     

    ……

  • 相关阅读:
    openpyxl读取Excel数据
    查找xml中的接口名及涉及表名并输出
    sqlalchemy 简介
    linux文件查看
    网页的MVC模式简介
    python 最小二乘拟合,反卷积,卡方检验
    生成随机图片验证码
    图形界面
    requests(第三方模块) 请求、登录、下载网页
    ( 转 ) 什么是 JWT -- JSON WEB TOKEN
  • 原文地址:https://www.cnblogs.com/0zcl/p/6111686.html
Copyright © 2020-2023  润新知