本文主要是介绍NISP | 密码学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客
通过上一章的学习,我们知道了,网络安全的 CIA 模型,而本期学习的“密码学”,则能为 CIA 模型提供很好的技术支持:
面临的攻击威胁 | 所破坏的信息安全属性 | 解决问题所采用的密码学技术 |
---|---|---|
截获(泄露信息) | 机密性 | 对称密码和非对称密码 |
篡改(修改信息) | 完整性 | 哈希函数、数字签名、 对称密码和非对称密码 |
伪造(伪造信息来源) | 真实性 | 数字签名 |
否认(事后否认发送信息和行为) | 不可否认性 | 数字签名 |
0x01:密码学的发展
密码学的发展大致可以分为如下四个阶段:
-
第一个阶段是从古代到 19 世纪末 —— 古典密码学
-
第二个阶段是从 20 世纪初到 1949 年 —— 近代密码学
-
第三个阶段是从 C.E.Shannon(香农)于 1949 年发表的划时代论文 “The Communication Theory of Secret Systems” 开始 —— 现代密码学
-
第四个阶段是从 1976 年 W.Diffie 和 M.Hellman 发表论文“New Directions in Cryptography” 开始 —— 公钥密码学
0x0101:古典密码学
古典密码体质的安全性在于保持算法本身的保密性,受到了算法的限制。其具有以下特点:
-
不适合大规模生产(手工计算)
-
不适合较大的或者人员变动较大的组织
-
用户无法了解算法的安全性
0x0102:近代密码学
近代密码学是从 20 世纪初到 1949 年,其主要标志是机械密码/机电密码,用机电代替手工。
近代密码体质是用机械或电动机械实现的,其中最著名的就是转轮机(Rotor Machine)。
转轮密码机 ENIGMA,由 Arthur Scherbius 于 1919 年发明。在二次世界大战期间,Enigma 曾经作为德国陆、海、空三军最高密码机,其外形如下:
与转轮机相对应的还有英国的 TYPEX 打字密码机,其在英国通信中使用广泛,且在破译密钥后帮助破解德国信号:
感兴趣的小伙伴可以到下面这个网站详细了解一下它的历史:
Typexhttps://www.cryptomuseum.com/crypto/uk/typex/index.htm
0x0103:现代密码学
现代密码学是从 1949 年 ~ 1975 年,这期间密码届发生了这些大事:
-
1949 年,Shannon 发表论文 “The Communication Theory of Secret Systems”。
-
1967 年,David Kahn 的专著 《The Code Breakers》问世。
-
1971 年 ~ 1973 年,IBM Wastson 实验室的 Horst Feistel 等人发表的几篇技术报告。
-
1974 年,IBM 提交了算法 LUCIFER,后来成为了 DES。
该时期密码学的主要特点就是,数据的安全基于密钥而不是算法的保密。
0x0104:公钥密码学
公钥密码学主要是 1976 年以后,这期间主要有这么几件大事:
-
1976 年,Diffie & Hellman 的 “New Directions in Cryptography” 提出了非对称密钥密码。
-
1977 年,Rivest,Shamir & Adleman 提出了 RSA 公钥算法。
-
20 世纪 90 年代,逐步出现椭圆曲线等其他公钥算法。
公钥密码的出现使得发送端和接收端无密钥传输的保密通信成为可能!
0x02:加密与解密
信息在传播的过程中有可能被截获。为了避免被截获,必须对信息进行加密。有了加密,就必须有解密。
0x0201:加密与解密的基础概念
该部分主要是介绍与加解密相关的一些基础概念,方便后续的理解:
-
明文(Plaintext): 原始消息,被隐蔽消息,未经加密的消息。
-
密文(Ciphertext): 又称为密报(Cryptogram),明文经密码变换而成的一种隐蔽形式。
-
加密员或密码员(Cryptographer): 对明文进行加密操作的人员。
-
截获: 指一个非授权方介入系统,窃听传输的信息,导致信息泄露。它破坏了信息的保密性。
-
非授权方可以是一个人,也可以是一个程序。
-
-
截获攻击: 通过嗅探和监听等手段截获信息,从而推测出有用的信息,如用户口令、账号、文件或程序的不正当复制等。
-
加密(Encryption): 将明文变换为密文的过程。加密可以采用密码算法来实现,密码算法从密钥使用角度,可分对称密码算法和非对称密码算法。
-
把可懂的语言变换成(人类/机器)不可懂的语言。
-
-
解密(Decryption): 由密文恢复出明文的过程。
-
加密的逆过程。
-
即把不可懂的语言变换成变换成可懂的语言。
-
0x0202:对称加密算法
对称加密算法(也称为单钥或私钥密码算法),即加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。
常见的对称加密算法有:DES、3DES、IDEA、AES
对称加密算法的特点就是密钥相对较短,一般采用 128,192 或 256 比特的长度。
其加解密流程如下图所示,可以看到,其加密和解密使用的是同一个密钥:
对称加密算法的优缺点如下:
-
优点:
-
效率搞,算法简单,系统开销小
-
适合加密大量数据
-
明文长度与密文长度相等
-
-
缺点:
-
需要以安全方式进行密钥交换
-
密钥管理复杂
-
无法解决消息的篡改、否认等问题
-
0x0203:非对称加密算法
非对称加密算法,又叫公钥密码算法(Public-key cipher):加密密钥和解密密钥不同,从一个很难推出另外一个。其中,对外公开的密钥,称为公开密钥(Public Key),简称公钥;必须秘密存储的密钥,称为私有密钥(Private Key),简称私钥。
公钥密钥算法的典型代表有:RSA、ECC、ElGamal。
公钥密码算法的特点如下:
-
公钥加密,私钥解密。
-
私钥加密,公钥解密。
-
密钥长度 512 - 2048 位。
其加解密流程如下图所示,可以看到,其加密和解密使用的不是同一个密钥:
非对称加密算法的优缺点如下:
-
优点:
-
密钥分发数目与参与者数目相同。
-
在有大量参与者的情况下易于密钥管理。
-
安全
-
支持数字签名和不可否认性。
-
无需事先与对方建立关系,交换密钥。
-
-
缺点
-
速度相对较慢。
-
可能比同等强度的对称加密算法慢 10 倍到 100 倍。
-
加密后,密文变长。
-
0x0204:混合加密
混合加密是在对称加密和非对称加密的基础上,综合了二者的优点发明出来的。
对称加密,速度快,且能加密大量数据,但是其需要以安全方式交换密钥。
非对称加密,速度慢,但是其无需事先与对方建立关系,交换密钥。
那我们可以综合二者特长,在第一次建立链接的时候,让对称加密的密钥,通过非对称加密进行传输,当对方安全拿到对称加密的密钥后,后续传输再使用对称加密的方式快速交换数据。
下面,我们详细讲解一下混合加密的流程:
在第一次传输时,发送者先随机产生一个对称加密的密钥,并将该密钥通过接收者的公钥进行加密。接收者利用自己的私钥解密,获取到发送者的对称加密密钥:
在随后的传输中,双方直接使用对称加密密钥来对信息进行加密:
0x03:哈希函数
对称加密和非对称加密算法主要解决信息的机密性问题,而实际系统和网络中还可能受到消息篡改的攻击。篡改攻击主要包括:修改信息内容,改变程序使使其不能正确运行等。而哈希函数可以用来确保信息的完整性。
哈希(Hash)函数(又称为杂凑函数或单向散列函数)接收一个消息作为输入,产生一个称为哈希值的输出。输出的哈希值也可称为散列值、消息摘要(Message Digest,MD)。
哈希函数的工作流程如下图所示:
发送端将待发送的数据和该数据的哈希值一起传递给接收端,接收端接收后,再对数据计算一遍哈希值,如果计算结果与发送端发送的哈希值一致,则说明接收的数据有效,反之,数据经过的篡改。
接下来我们简单介绍几种常见的哈希算法:
0x0301:MD5 算法
MD5 算法可以对输入的任意长度的消息进行运算,并产生一个 128 位的消息摘要。
MD5 算法具有以下特点:
-
输入:接受任意长度的消息。
-
输出:128 位的消息摘要。
-
处理:以 512 位输入数据块为单位。
0x0302:SHA-1 算法
SHA(Secure Hash Algorithm,安全哈希算法)由美国国家标准技术研究所开发,1993 年作为联邦信息处理标准发布,2008 年又有更新。
SHA-1 算法具有以下特点:
-
输入:最大长度为 264 位的消息。
-
输出:160 位的消息摘要。
-
处理:输入以 512 位数据块为单位处理。
0x0303:HSA-1 算法与 MD5 算法比较
-
散列值长度:
-
MD5:128 bits
-
SHA-1:160 bits
-
-
安全性:
-
SHA-1 算法被视为 MD5 的替代候选算法。
-
-
速度:
-
SHA-1 慢些
-
0x04:数字签名
除了保护信息的机密性和完整性,密码学技术也可以解决信息的可鉴别性(真实性或认证性)或不可否认性问题。
数字签名的工作流程如下图所示:
发送端先计算出待发送数据的哈希值,然后将此哈希值连同数据使用自己的私钥进行加密。加密完成后,将数据发送给接收端。接收端收到数据后,先利用发送端的公钥从数据包中解出哈希值和原始数据,然后接收端利用和发送端相同的哈希算法,计算出收到的数据的哈希值,然后将此哈希值和发送端发送的哈希值相比较。如果哈希值匹配,则说明该数据由该发送端的私钥签名。
实际签名的时候,我们一般是对文件的哈希值签名,而不是对文件本身签名。这是因为,一般要签名的文件体积比较大,使用非对称加密的话,签名时间比较长。而对哈希值签名,哈希值一般比较短,所以签名时间也会比较短。这样能大大提高签名的效率,又因为哈希值的特性,又能够保证数据的完整性。
0x0401:数字签名的特点
数字签名的特点如下,其与传统签名的特点具有相似性:
-
传统签名的基本特点:
-
能与被签的文件在物理上不可分割。
-
签名者不能否认自己的签名。
-
签名不能被伪造。
-
容易被验证。
-
-
数字签名是传统签名的数字化,其基本特点如下:
-
能与所签文件 “绑定”。
-
签名者不能否认自己的签名。
-
签名不能被伪造。
-
容易被验证。
-
0x0402:数字签名的应用
-
可信性: 签名让文件的接收者相信签名者是慎重地在文件上签名的。
-
不可重用性: 签名不可重用,即使同一消息在不同时刻的签名也是有区别的。如果将签名部分提取出来,附加在别的消息后面,验证签名会失败。这是因为签名和所签名消息之间是一一对应的,消息不同签名内容也不同,因此签名无法重复使用。
-
数据完整性: 在文件签名后,文件不能改变。
-
不可伪造性: 签名能够证明是签名者而不是其他人在文件上签名,任何人都不能伪造签名。
-
不可否认性: 在签名者否认自己的签名时,签名接收者可以请求可信第三方进行仲裁。
这篇关于NISP | 密码学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!