提示:博文有点长,请保持耐心哦~
前两篇文章:
《密码编码学与网络安全》William Stalling著—学习笔记(一)【知识点速过】【传统密码+经典对称加密算法+经典公钥密码算法+密码学Hash函数】
《密码编码学与网络安全》William Stalling著—学习笔记(二)【知识点速过】【数字签名+密钥管理分发+用户认证】
最近因为学习的需要初步接触网络安全方向,阅读的书是William Stalling著的《密码编码学与网络安全(第六版)》。由于本科期间没有接触过网络方面的课程所以从密码学入门。做个学习笔记方便后期复习,同时也分享给大家。由于本人能力有限肯定会有总结和理解不到位的地方,甚至有的地方会有错误(当然目前我没发现…)我若日后发现也会即使更新修改,所以希望各位辩证的学习,不要尽信书。阅读的书封面如图所示。
SSL(Secure Sockets Layer)
握手,用于客户端与服务器相互认证、协商加密及MAC算法
消息由三个域组成:1.类型(1Byte) 2.长度(3Byte) 3.内容(大于0)
类型表如下所示:
消息类型 | 参数 | 阶段 |
---|---|---|
hello_request | 空 | 1 |
client_hello | 版本号、随机数、会话标志、密码组、压缩方法 | 1 |
server_hello | 同上 | 1 |
certificate | X.509v3证书链 | 2 |
server_key_exchange | 参数、签名 | 2 |
Certificate_request | 类型、认证机构 | 2 |
server_done | 空 | 2 |
client_key_exchange | 参数、签名 | 3 |
certificate_verify | 签名 | 3 |
finished | hash值 | 4 |
阶段 | 主要功能 |
---|---|
阶段1.建立安全功能 | client_hello具有以下参数:1.版本:客户端支持的最高版本.2.随机数:客户端随机生成,在密钥交换时可以防止重放攻击,为一个32bit时间戳和安全随机数生成器生成的28Byte随机数组成.3.会话标志:0表示想在新会话上创建新连接,非0表示想更新现有连接或在现有会话创建一个新连接。4.密码组:客户端支持的密码算法列表。第一参数是密钥交换方法,支持RSA、固定DH、瞬时DH、匿名DH、Fortezza。第二参数CipherSpec,包含以下域:{密码算法:RC4、RC2、DES、3DES、DES40、IDEA、Fortezza}、{MAC算法:MD5、SHA-1}、{密码类型:“流”、“块”}、{散列长度:0、16、20Byte}、{密钥材料:字节序列,包含生成写密钥所使用的数据.}、{IV大小:分组密码链CBC所使用的的初始向量的大小} 5.压缩方法:客户端支持的压缩方法列表。 server_hello包含对client_hello的回应 |
阶段2.服务器认证和密钥交换 | |
阶段3.客户端认证和密钥交换 | 接收到服务器发来的证书后检查证书、参数是否合法,合法则返回密钥交换信息client_key_exchange,信息内容依赖所选的密钥交换类型:RSA:使用证书或服务器密钥交换信息中提供的临时RSA加密密钥加密48Byte次密钥(用于生成主密钥)。 瞬时或匿名DH:{a、q、PUA}公钥参数。 固定DH:空消息。Fortezza:Fortezza参数 |
阶段4.完成 | - |
客户端写MAC密钥、服务器写MAC密钥、客户端写密钥、服务器写密钥、客户端写初始向量、服务器写初始向量均通过主密钥生成,生成方式如下:
TLS(Transport Layer Security)是SSL的继承者,其与SSL大体相同,在部分方面存在不同,不同见下表:(我直接给截图了,VSCODE复制过CSDN表格语法还不太熟练)
HTTP协议使用明文传输数据,这在进行一些操作的时候很容易被攻击者窃取。HTTPS将Client与Server之间的数据传输转变为密文。
将请求文档url、文档内容、浏览器格式的内容、Cookies、HTTP报头的内容进行加密传输
HTTP:TCP->HTTP
HTTPS: TCP->SSL/TSL->HTTP
SSH(Secure Shell)安全外壳协议,保障网络通信安全的协议,取代TELNET和其他不安全的远程登录模式
TELNET协议使用明文传输,SSH使用密文传输
SSH的工作流程:整个通过程中,为实现SSH的安全连接,服务器端和客户端经历如下5个阶段:
- Server开放port 22等待Client发起连接
- C向S发起TCP连接请求,建立连接后S向C发送版本协商报文
- C收到报文后解析数据包,如果S协议版本号低于C同时C能够支持S的低版本就使用S的协议版本,否则采用C的版本
- C回应S,回复决定使用的协议版本号,S比较消息决定最终结果
- 协商成功进入密钥和算法协商,否则断开TCP连接
- Client和Server交换双方支持的对称加密算法列表、公钥算法列表、MAC算法列表、压缩算法列表等协商信息
- C/S协商确定最终使用算法
- C/S利用DH交换主机密钥等参数(交换之前已经生成RSA密钥对),生成session key和session ID
- 后续通信使用session key加密信息。
- Client向Server发送认证请求.(用户名、认证方法、与认证方法相关的内容)
- S对C进行认证,若失败则返回认证失败信息和再次发起认证的方法列表.
- C从列表中选取一种方式进行再次验证.
- 重新认证过程反复进行,直至认证成功或者达到最大验证次数.
SSH的认证方式
- password认证:用户将用户名密码发送给Server,S解密后与自己设备存储的比较,返回比对结果
- publickey认证:Client发送(用户名、公共密钥、公共密钥算法的publickey)。Server对公钥进行合法性检查,不合法认证失败;合法则利用数字签名对客户端进行验证,并返回结果
- password-publickey认证(SSH2.0):前两种同时通过才认证通过
- any认证(SSH2.0):前两种任一通过则认证通过.
- Server等待Client请求.
- 认证通过后Client向Server发送会话请求
- S处理请求通过回应SSH_SMSG_SUCCESS信息进入下一阶段,否则返回处理失败包
- Client将要执行的命令加密发给Server
- Server解密命令执行处理后将结果加密返回给Client
- Client将结果解密显示在终端上
数据包交换:SSH协议在TCP上层运行,SSH的数据包成为TCP数据部分
SSH密钥生成:加密和MAC的密钥是从共享私秘钥K密钥交换函数获得的Hash值、会话标志生成的,使用的Hash函数是事前商定的。
PGP(Pretty Good Privacy,优良保密协议)
电子邮件加密方案:
认证 | 保密 | 压缩 | 电子邮件兼容 |
---|---|---|---|
DSS/SHA或者RSA/SHA | CAST-128、IDEA、3DES;使用密文反馈模式CFB | ZIP | Radix-64转换 |
用SHA-1生成Hash码,采用DSS或RSA算法用发送者私钥加密消息摘要并将其加入消息 | 使用上述算法,使用发送者生成的一次性密钥加密消息 | ZIP算法加密消息以便传输、存储 | 用Radix64转换成一个ASCII码字符串 |
接收者对Hash解密 根据消息计算新Hash 如果两个Hash值一样则认证通过 | 对传输的消息进行加密,用128位随机数作为会话密钥采用上述算法加密消息;用RSA算法(或DH算法及其变体ElGamal)用接收者公钥加密会话密钥预先发送给接收者 |
Radix-64基于Base-64编码技术,Radix-64只是在Base64的基础上增加了编码后的循环冗余校验码。
(Base64编码见后方)
MIME:(Multipurpose Internet Mail Extension,多用于网际邮件扩充协议)旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符,如:图像、声音等非文本消息。
七大种类:video image application text audio multipart message
MIME定义了两种编码方法:Base64和QP(Quote-Printable)
Base64编码
Base64使用64个通用可打印字符存储表示二进制字数据(大、小写英文字母,阿拉伯数字0-9,“+”和“/”)以及一个填充符“=”
一一对应0-63,这样只需要6bit即可表示,所以Base64是以为6bit为单位。例:将计算机中三字节的数据经过Base64编码后会变为4个字符,因此转码后Base64字符串对比原来的长一些。若不足三字节则使用0补位。相较于Base64则根据剩余字节在后面补一个或者两个“=”用以标识
QP编码
QP方法把一个8bit的字符用两个16进制数值表示,然后在前面加“=”。例:=B3=C2=BF=A1=C7=E5=A3=
MIME中定义的5个头部域:
√ MIME-Version:MIME版本
√ Content-Type:内容类型,使得接收方代理能够采用何使的代理或者机制来为用户展示数据或使用一个合适的方式处理数据
√ Content—Transfer-Encoding:内容转换编码,指示转换的类型
Content-ID:内容标志,在多重上下文中唯一标志MIME实体。
Content-Description:内容描述,正文对象的文本描述适用于对象不可读情况,如:音频、图片等。
S/MIME(Secure/Multipurpose Internet Mail Extension)安全/多用途网际邮件扩充协议是一种专用于公钥加密和MIME数据签名的标准协议,是采用PKI技术的用数字证书给邮件主体签名和加密的国际标准协议,简要说:签名和加密—>机密性和数据完整性
发展历程
1995年 第一版S/MIME发布
1998年 第二版S/MIME发布–>被提交到Internet工程任务组IETF。–>成为邮件安全标准
1999年 IETF推荐使用第三版S/MIME
S/MIME的加密和签名过程基于RSA实验室开发的PKCS(Public-Key Cryptography Standard,公共密钥加密标准)
S/MIME使用application/pkcs7mime来加密、签名数据
S/MIME使用的算法:
S/MIME有如下功能:
与PGP的对比
PGP | S/MIME | |
---|---|---|
公钥可信度 | 发件人创建并签署自己的密钥对或其他通信用户签署公钥,增加密钥的可信度 | 由受信任的证书颁发机构颁发X.509格式的数字证书 |
机密保护的范围 | 纯文本消息的安全性问题 | 不仅保护文本消息,更旨在保护各种附件/数据文件 |
集中化管理 | - | 优于PGP,通过X.509证书服务器进行集中密钥管理 |
兼容性和易用性 | - | 具备更广法的行业支持大多数电子邮件客户端软件已将S/MIME内置 |
DKIM(Domain Keys Identified Mail,域名密钥识别邮件)用密码学方法签名电子邮件的规范,已经成为互联网标准RFC4871.
消息接收者通过签名者域获取公钥来验证消息是否由该签名域私钥签名
DKIM策略:DKIM提供一个对终端用户透明的电子邮件认证技术的服务