网络安全与加密算法

在本篇中介绍了以下几个方面:

  1. 机密性

    • 密码学

    • 对称加密算法(DES, 3DES, AES)

    • 公开秘钥算法

      • RSA大素数的获取
  2. 完整性

    • 散列函数(MD5, SHA-1, 并没有提及算法实现)

    • 报文鉴别(MAC)

    • 数字签名

  3. 端点鉴别

  4. 应用

    • SSL(TCP网络安全)
  5. 运行时安全

    • 防火墙的基本知识

主要体现在以下几个方面:

  1. 机密性, 即发送的信息只有双方彼此能够解读,其他人以任何方式皆无法解读。

  2. 报文完整性, 即接收方需要能够验证,当前接收到的数据是完整的,没有被经过篡改的。机密性与完整性是相互独立的两个属性。

  3. 端点鉴别, 需要知道我收到的消息, 确确实实是来自于对方, 而不是恶意方伪装的。

  4. 运行性安全, 需要能够识别并阻拦恶意攻击。如 Dos攻击等, 其目的并非为了窃取信息,而是使得系统瘫痪, 无法运行。

机密性

首先来看机密性问题, 小明和小红之间发送的有效信息 不希望被第三方解读。 而实现这点的方式自然是, 加密, 加密,就需要相关的密码。

密码学

加密所要实现的根本目的是,将数据加密,除非拥有相关的秘钥,算法,才能够 也 必须能够 将数据恢复到 原始数据。

这里的原始数据被称作明文, 小明使用了加密算法加密其明文, 生成的文本为密文, 加密算法是公知的,而秘钥是私有的.

对称秘钥体系

  • 凯撒密码 是一种简单的加密算法。

    对于字母而言, 约定 用 当前字母的后 第K个字母加以替换, 即可生成对应的密文。

    如: a b c k=2-> c d e

    只需要双方约定好共同的K, 即可进行加密解密。

  • 更进一步 则是将 k=2 换成只有双方知道的算法, 如 k = index + 1, 即 k=3

    但缺点同样明显, 文本自身并不是没有特点的, 如小明和小红在沟通的时候常常会在开头加入对方的姓名, xiao hong,

    那么经过加密之后,变成了 zkcq jqpi, 则根据习惯来推算, 很容易就得出来 K = 2.

  • 即使是它的改进算法:

    单码代替密码, 也难以规避掉这个问题。

    单码代替密码不再使用固定的K, 而是有 密码本 将 明文一一映射替换为 密文, 如 a->h b->k c->a, 双方都持有相应的密码本,即可完成加解密工作。

    但是依然是之前的 xiao hong 作为惯用语, 随着接收到的密文不断变大,变多,则能够逐步推算, 还原出对应的密码本。 完成解密工作。

  • 多码代替密码

    这是对单码代替密码的一种改进, 对于明文中 文本 位置的不同 采用不同的 密码本进行匹配。

    而秘钥呢? 则是 多个密码本, 以及 位置 和 密码本之间的匹配关系。

对称加密在现代社会有两种宽泛的类型: 流密码, 块密码。

我们会观察到这样两个问题:

  1. 在上面提到的几种简单的文本加密算法中, 仅仅能够对文本进行加密, 而我们在网络中传输 可不一定是文本,更大的可能性是流。 包括协议的首部, 数据报本身。我们所需要加密的对象不仅仅是文本, 而在网络中 自然更为合适的是对 数据流进行加密。 这并不意味着是 流密码。

  2. 可匹配的可能性依然太少, 适用性不够强。

而块密码, 正是前面几种简单密码的延伸。

我们将数据流进行拆分 3 6 64 128 等等 bit 为一个块, 然后对每一个块都进行加密。

注意到 对 3 bit块进行加密。 可能会映射到的结果有: 000 001 010 011 100 101 110 111 即 2^3 8中可能性。

而我们的输入同样有8种可能性, 因此会映射为 8! = 40320 种可能的结果。 即对每一种输入都找到其映射结果, 且与其他输入的结果不重复。

40320 种可能的结果, 对现代计算机来说破解起来实在是一件很轻易的事情。而为了防止被破解, 因此往往会采用更大的块 做为映射, 比如说 64位, 这样我们的可能结果就有 (2^64)! 想要破解无疑是一件很困难的事情。

不仅仅是破解起来很是困难,实现起来也是同样的困难,需要双方维护一个 2^64 的输入输出映射表, 如果需要改变映射表, 也需要双方都进行调整才可以。

而真实采用的方式,则是 使用函数来模拟 随机排列表, 一个简单的例子是:将 64bit拆分成 8 * 8 bit, 每次用一个 8bit的映射表,去置换第一个块, 将置换后的结果 与 剩余部分混合, 再循环置换 剩下的 bit块,经过n次循环以后, 就提供了一个64bit的块, 这种算法的秘钥是 8张排列表。

DES算法

参考链接:数据加密算法--详解DES加密算法原理与实现

DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

需要注意的地方是, 如果初始秘钥转换成 byte之后, 如果其前7位是相同的, 那么这两个秘钥所计算出来的数据就是相同的。 因为 8 16 等等 是不参与DES运算的。

参考链接:JAVA DES 秘钥问题

将初始秘钥 通过16轮的计算,转换, 生成16个子秘钥(子秘钥长度为48位)。

而后将明文数据:

首先按照固定的置换规则, 将原数据中的64bit 进行置换。 得到新的数据。

其中置换后的数据被分为两部分, L0、R0, L0是输出的左32位,R0是右32位

按照一定的规则 迭代置换 运用之前计算得到的 秘钥 加密, 16轮之后, 即得到所需的L16, R16。将两部分合并成一个分组,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。

其初始置换数据:

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-undefined">58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7,
</code></span></span>

逆置换:

在初始置换规则表中, 观察会发现, 原本第一位的被挪到了第40位, 而在逆置换中, 需要将第四十位置换到第一位即可。

<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-undefined">40,8,48,16,56,24,64,32,

39,7,47,15,55,23,63,31,

38,6,46,14,54,22,62,30,

37,5,45,13,53,21,61,29,

36,4,44,12,52,20,60,28,

35,3,43,11,51,19,59,27,

34,2,42,10,50,18,58 26,

33,1,41, 9,49,17,57,25,
</code></span></span>

正如上面所提到的:核心就是 置换,混合。 解密则是其逆过程。

3DES

3DES(即Triple DES)是DES向AES过渡的加密算法,它使用2条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。

设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文

3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

3DES解密过程为:M=Dk1(EK2(Dk3(C)))

即用 k1对数据加密 k2对加密过的数据解密 k3 对解密之后的数据再度加密.

K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值