zoukankan      html  css  js  c++  java
  • 信息安全-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~

     

     

     

     

    ……

  • 相关阅读:
    git线上操作
    IDEA快捷方式
    Java 四种线程池
    java 获取当前天之后或之前7天日期
    如何理解AWS 网络,如何创建一个多层安全网络架构
    申请 Let's Encrypt 通配符 HTTPS 证书
    GCE 部署 ELK 7.1可视化分析 nginx
    使用 bash 脚本把 AWS EC2 数据备份到 S3
    使用 bash 脚本把 GCE 的数据备份到 GCS
    nginx 配置 https 并强制跳转(lnmp一键安装包)
  • 原文地址:https://www.cnblogs.com/zhangyubao/p/6973836.html
Copyright © 2011-2022 走看看