计算机中的网络安全
在本篇中介绍了以下几个方面:
机密性
密码学
对称加密算法(DES, 3DES, AES)
公开秘钥算法
RSA大素数的获取
完整性
散列函数(MD5, SHA-1, 并没有提及算法实现)
报文鉴别(MAC)
数字签名
端点鉴别
应用
SSL(TCP网络安全)
运行时安全
防火墙的基本知识
主要体现在以下几个方面:
机密性, 即发送的信息只有双方彼此能够解读,其他人以任何方式皆无法解读。
报文完整性, 即接收方需要能够验证,当前接收到的数据是完整的,没有被经过篡改的。机密性与完整性是相互独立的两个属性。
端点鉴别, 需要知道我收到的消息, 确确实实是来自于对方, 而不是恶意方伪装的。
运行性安全, 需要能够识别并阻拦恶意攻击。如 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 作为惯用语, 随着接收到的密文不断变大,变多,则能够逐步推算, 还原出对应的密码本。 完成解密工作。
多码代替密码
这是对单码代替密码的一种改进, 对于明文中 文本 位置的不同 采用不同的 密码本进行匹配。
而秘钥呢? 则是 多个密码本, 以及 位置 和 密码本之间的匹配关系。
对称加密在现代社会有两种宽泛的类型: 流密码, 块密码。
我们会观察到这样两个问题:
在上面提到的几种简单的文本加密算法中, 仅仅能够对文本进行加密, 而我们在网络中传输 可不一定是文本,更大的可能性是流。 包括协议的首部, 数据报本身。我们所需要加密的对象不仅仅是文本, 而在网络中 自然更为合适的是对 数据流进行加密。 这并不意味着是 流密码。
可匹配的可能性依然太少, 适用性不够强。
而块密码, 正是前面几种简单密码的延伸。
我们将数据流进行拆分 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位的密钥按位替代或交换的方法形成密文组。