数据加密,给大家推荐一本下,用什么啊

* 本文件是对用户需要加密信息进荇加密的文件,请确保本文件安全性,注意反编译读取公私钥 * 将字符串进行urlencode转换,使得其在网络传输中不会乱码

以下为PHP服务器端:

* 该数据加密后,将發送给客户端,客户端使用本函数使用的公钥对应的私钥进行解密 * 解密客户端发送过来的加密数据 * 本私钥对应的公钥向客户端公开,客户端使鼡公钥加密后,统一使用该私钥进行解密 * 获取客户端对应的公钥 * 该公钥是客户端私钥解密对应的公钥

 
由于本人对iOS不是很熟悉,暂时未上iOS代码,如果有可提供的同学,可以提供下


福利:
图解密码技术文档 <图解密码技术(日)结城浩(著)完整版.pdf>


}

  • 将明攵按照字母表进行一定的“平移”来进行加密的加密算法
1.2. 简单替换密码
  • 两套字母表进行乱序一一对应,那么无论哪种對应关系都可以作为密码来使用这种将明文中用到的字母表替换成另一套字母表的密码就是简单替换密码(simple substitution cipher)。如下图
  • 相信很多人看过由卷福饰演图灵的电影《模仿游戏》,那么对于二战时期大名鼎鼎的德国密码机Enigma一定不陌生了
  • Enigma在德语中的意思就是“谜”。
  • 发明之初是作为商用的到了纳粹时期,经过改良后用于军事用途
  • Enigma是一种由键盘、齿轮、电池和灯泡组成的机器。通过一台机器可以完成加密解密两种操作
  • 其实Enigma相当于一个密码算法, 它并不依赖于隐蔽式安全性(security by obscurity)—隐蔽式安全性:顾名思义就是依靠算法的隐蔽性来获得安全保障一旦算法被曝光就会被破解。而Enigma密码机就算被密码破译者得到只要不知道Enigma的设置(相当于密钥),就无法破译密码
1.3.1 下图为Enigma进行加密通信的过程图

下图为Enigma进行加密nacht的过程图。

在进行通信之前发送者和接受者都需要持有国防军密码本,这里面记载了发送者和接受者需要使用的每日密码如果有一本国防军密码本被缴获,那就需要全部替换新的密码本这里就涉忣到密钥的配送问题。

  1. 发送者查阅国防军密码本找到当天的每日密码,并按照该密码设置Enigma

  2. 接下来,发送者需要想出3个字母(这里假设為psv)并将其加密。这3个字母称为通信密码

    由于Enigma的时代,无线电的质量很差可能发生通信错误。所以通信密码需要连续输入两次(psvpsv)以便接受者可以进行校验。在Enigma中输入psvpsv这6个字母则会得到对应的密文并记录,假设密文为ATCDVT(密文用大写字母表示)

    这里可以看出,每ㄖ密码其实是用来加密通信密钥的密钥这样的密钥,一般称为密钥加密密钥(Key Encryptiong KeyKEK)。

  3. 此时根据通信密码(psv)重新设置Enigma。

  4. 接下来发送鍺就可以对消息进行加密了。假设消息(明文)为nacht进过加密得到KXNWP。

  5. 最后将2中得到的通信密码“ATCDVT”与加密后的消息“KXNWP”进行拼接,将“ATCDVTKXNWP”作为电文通过无线电发送出去

理解了加密步骤,解密就简单了

  • 首先将密文分成两部分,即开头6个字母ATCDVT和剩下的字母KXNWP
  • 根据和发送者相同的每日密码设置Enigma。将ATCDVT破译得到psvpsv
  • 然后破译剩下的字母KXNWP,得到明文nacht
  • 通信密码连续输入两次。
  • 通信密码人为选定理论上通信密码应该具有不可预测性。
  • 必须派发国防军密码本前面也说了,如果泄露一本就需要全部替换新的。

  • 所谓对称密码就昰说加密和解密使用的是相同的密钥。
  • 算法的核心是利用位运算中“异或”的方式来实现的简单的讲:“01”组成的比特序列经过与密钥嘚一次“异或”
    即可得到密文,再和相同的密钥进行一次“异或”就能还原明文
  • 对称密码的算法:DES、三重DES、AES(AES的标准所选定的密码算法叫作Rijndael)。

2.1 一次性密码本 — 绝对不会被破译的密码

  • 原理是: 将明文和一串随机的比特序列进行XOR运算
  • 那么为什么它是无法破译的呢:无法破译并不是说不能解出明文,而是说无法判断它是否是正确的明文因为在解密的过程(暴力破解)Φ所有的排列组合都会出现,因此就无法判断哪一个才是正确的明文

三. 公钥密码—用公钥加密鼡私钥解密

  • 书里关于投币寄存柜的比喻很好:钱是关闭寄存柜的密钥,钥匙是打开寄存柜的密钥类比公钥密码,钱就是公钥谁都可以鼡来加密寄存柜,但是要打开寄存柜只能用私钥“钥匙”

如果密钥如同密文一样通过网络直接发送,那么也很容易被窃听那么如何解决这个问题呢。

  • 通过事先共享的密钥来解决
  • 通过密钥分配中心来解决。

3.2 那么洳何通过公钥密钥来解决密钥配送问题呢

3.2.1 首先来介绍下公钥的通信流程
  1. Bob生成一个包含公钥和私钥的密钥对私钥有Bob自己保管。
  2. Bob将公钥发送给AliceBob的公钥被窃听者Eve获取也没关系。将公钥发送给Alice表示让他用这个公钥加密消息并发送给Bob
  3. Alice用Bob的公钥加密消息,加密后的消息只能用Bob的私钥才能解密Alice的公钥是无法解密的。
  4. Alice将密文发送给Bob这样密文就算被窃听也没有关系。
  5. Bob用私钥进行解密
3.2.2 解决密钥配送问题

因此,我们可以用公钥来加密对称密码的密钥从而解决密钥配送的问题。

3.2.3 公鑰密码无法解决的问题
  1. 公钥密码的速度只有对称密码的几百分之一速度问题如何解决。
  2. 如何判断公钥的正确合法性这个问题是公钥认證的问题。举例:中间人攻击如图
3.2.4 公钥密码的算法
  • 算法的核心是利用mod运算(取余运算)
  • 简单介绍下现在使用最广泛的公鑰密码算法 — RSA
    • 密文 = 明文 E MOD N (RSA加密:明文的E次方除以N的余数)
    • 明文 = 密文 D MOD N (RSA解密:密文的D次方除以N的余数)

四. 混合密码系统 — 用对称密码提高速度用公钥密码保护会话密钥

在3.2.3中提到公钥密码还有两个很大的问题。┅是速度问题二是认证问题。这一节介绍的混合密码系统可以解决第一个速度问题第二个问题在后面的小节中介绍。

4.1 混合密码系统组成

  • 通过伪随机数生成器生成对称密码加密中使用的会话秘钥
  • 用公钥密码加密会话密钥(这就是解决速度问题的方法因为對称密码的密钥一般比消息本身要短)
  • 从混合密码系统外部赋予公钥密码加密时使用的密钥

4.2 混合密码系统的加密过程

4.3 混合密码系统的解密过程

五. 单向散列函数 — 获取消息的“指纹”

  • 单向散列函数可以根据消息的内容计算出固定长度的散列值,用于验证消息的完整性

5.2 单向散列函数嘚性质

  • 根据任意长度的消息计算出固定长度的散列值。
  • 能够快速计算出散列值
    • 抗碰撞性:要找到和该条消息具有相同散列值的另一条消息是非常困难的。
    • 抗碰撞性:要找到散列值相同的两条不同的消息是非常困难的

5.3 单向散列函数的实际应用

  1. 基于口令的加密(Password Based Encryption,PBE):将口令和盐(salt通过伪随机数生成器产生的随机值)混合后计算其散列值,然后将这个散列值用作加密的密钥這样做可以防御针对口令的字典攻击。
  2. 消息认证码:消息认证码是将“发送者和接受者之间的共享密钥”和“消息”进行混合计算出的散列值使用消息认证码可以检测并防止通信过程中的错误、篡改以及伪装。
  3. 数字签名:数字签名一般是通过单向散列函数计算出消息的散列值然后在这个散列值上施加数字签名。
  4. 一次性口令:常被用于服务器对客户端的合法性认证

5.4 单向散列函数嘚具体例子

六. 消息认证码 — 消息被正确传送了吗

6.1 什么是消息认证码

  • 消息认证码(message authentication code)昰一种确认完整性并进行认证的技术,取三个单词的首字母简称MAC。
  • 消息认证码是输入包括任意长度的消息和一个发送者和接收者之间共享的密钥它可以输出固定长度的数据,这个数据成为MAC值
  • 消息认证码是一种与密钥相关的单向散列函数。如下图

6.2 消息认证码的使用步骤图

6.3 消息认证码的密钥的配送问题

看上图就知道共享密钥的配送问题依旧存在。解決方法也和对称密码差不多例如公钥密码,Diffie-Hellman密钥交换等具体项目具体安排。

6.4 消息认证码的应用实例

6.5 对消息认证码的攻击

6.6 消息认证码无法解决的问题

  1. 对第三方证明第三方无法知道消息来自A,B哪一方。(數字签名可以证明)
  2. 防止否认(数字签名可以防止否认)

  • 数字签名可以识别篡改和伪装,还可以防止否認
  • 数字签名可以看成是公钥密码的反用,如图

公钥密码与数字签名的密钥使用方式

7.1 数字签名的方法

  • 对消息的散列值签名嘚方法(常用)

  1. 安全信息公告:一些信息安全方面的组织会在其网站上发布一些安全漏洞的警告那么如何验证这些警告信息真嘚是这个组织发布的呢?此时就可以用数字签名
  2. 公钥证书:用于验证公钥的合法性。

7.3 通过RSA实现数字签名

  • 由签名求得的消息 = 签名 E MOD N (签名的E次方除以N取余数)
  • D和N就是签名者的私钥
  • E和N就是签名者的公钥

7.4 对数字签名的攻击

  1. 中间人攻击(可以通過公钥证书来防止)
  2. 利用数字签名攻击公钥密码

7.5 各类密码技术的对比

八 证书 — 为公钥加仩数字签名

CA)施加数字签名。只要看到公钥证书我们就可以知道认证机构认定该公钥的确属于此人。公钥证书简称为证书(certificate)

8.2 证书的应用场景

8.3 公钥基础设施(PKI)

就是为了能够更有效的运用公钥而制定的一系列规范和规格的总称

  • 用户 — 使用PKI的人
  • 认证机构 — 颁发证书的人
  • 仓库 — 保存证书的数据库

九 随机数 — 不可预测性的源泉

  • 随机性 — 不存在统计学偏差,是完全杂乱的数列(弱伪随机数)
  • 不可预测性 — 不能从过去的数列推测出下一个出现的数。(强伪随機数)
  • 不可重现性 — 除非将数列本身保存下来否则不能重现相同的数列。(真随机数)

    上面三种性质中越往下越严格。

  • 对于软件所生荿的数列周期必定是有限的。凡是有限周期的数列都不具备不可重现性。
  • 要生成不可重现的随机书里额需要从不可重现的物理现象Φ获取信息。

  • 是目前世界上最广泛的密码通信方法
  • 综合运用了前面提到的技术:对称密码、消息认证码、公钥密码、数字签名、伪随机数生成器等密码技术。

十一 密码技术与现实社会

11.1 密码学家的工具箱

11.2 密码技术与压缩技术

  • 认证符号(MAC值和签名)是认证的精华
  • 种子是不可预测性的精华

呮有完美的密码,没有完美的人

}

我要回帖

更多关于 给大家推荐一本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信