一、概念
1.1 网络安全体系
网络安全体系是一套用于保障网络通信安全的架构和规范,建立在开放系统互联(OSI)参考模型基础上。
1.2 开放系统互联参考模型
OSI/RM(Open System Interconnection/Reference Model)是由国际标准化组织(ISO)在1977年 提出的网络体系结构标准,为不同厂商、不同架构的计算机系统之间实现 开放互连提供一个功能性的框架。OSI/RM提出的时代背景是:当时各厂商推出了自己的通信标准,IBM推出 SNA 标准, DEC公司推出 DNA 标准,导致不同系统的设备无法相互通信。所谓开放系统是指,只要网络产品(软件、硬件)符合OSI标准,任何型号的计算机都可以互联成网。
1.3 OSI 七层协议
简单看下这个七层协议都干了什么:
OSI 将复杂的网络通信分为七层,每一层只负责特定的功能
-
应用层,直接为用户提供网络服务,比如 网页访问
-
表达层,处理数据,比如 数据加解密
-
会话层,建立、管理和终止应用程序之间的会话,比如登录
-
传输层,把数据分小段,每个段加上 TCP 头标识,用于后续组装
-
网络层,添加目标 IP等,决定这个包要送到哪里
-
链路层,添加 MAC地址 等,决定这个包目前下一站先送到中转,比如目标送到北京,先到上海中转
-
物理层,把数据变成电信号或光信号,在物理介质(如网线、光纤)上传输
当用户发起一次请求,就会产生数据,数据会在设备中由上层往下层传送,每经过一层,都在前端增加一些该层专用的信息,逐层完成七层的封装,最后源数据就套上了七层信封,通过网线等介质,传送到接收端

一个用户产生的数据经过七层封装之后,简略表示一下

数据在整条传输链路过程中,也会经过其他设备在七层协议上的解封和封装,比如经过路由器时:
-
解封到网络层,读取到目标IP
-
据路由表查找最佳路径,确定"下一跳"的IP地址
-
将下一跳IP转为MAC地址
-
重新封装一个新的链路层帧
-
通过物理层发送出去

其实我觉得这些通信协议,就和前后端定义的接口协议是差不多的。比如返回用户数据的接口数据结构是下面这样,然后协商好,前端就按这个格式进行解析:

1.4 OSI安全架构
1.4.1 标准提出
因为 OSI/RM 没啥安全性,ISO在它的基础上提出了OSI安全架构。这个架构和国家标准 *GB/T 9387.2-1995 《信息处理系统 开放系统互连 基本参考模型 第二部分:安全体系结构》*提出的 基本一致。
该标准在OSI七层模型的基础上,定义了五类安全服务:
-
鉴别服务(Authentication):确保通信双方身份的真实性,防止假冒
-
访问控制服务(Access Control):防止未授权用户访问资源
-
数据机密性服务(Data Confidentiality):防止数据被窃听
-
数据完整性服务(Data Integrity):防止数据在传输过程中被篡改
-
抗抵赖服务(Non-repudiation):提供证据以防止发送方或接收方否认操作行为
以及支持这些服务的八类安全机制
-
加密
-
数字签名
-
访问控制机制
-
数据完整性
-
鉴别交换
-
业务流填充
-
路由控制
-
公证
并规定了这些服务和机制可以在哪一层实现。
1.4.2 那"安全服务"和 "安全机制" 有啥区别?
安全服务只是目标,而安全机制是实现这些目标的技术手段。安全服务只是说明要做什么,安全机制则是说明怎么做。
一个机制不只支持一种服务,一种服务也不是只能由一种机制实现。
比如"加密机制"可以支持数据机密性,也可以辅助实现鉴别和完整性服务;而"访问控制服务"则可能需要"访问控制机制"与"鉴别机制"的协同工作。
1.4.3 OSI安全架构是一个分层多点防御技术
多点就是指在多个区域进行防御:
-
网络和基础设施。整个企业通信能力,比如 防御DDoS、中间人攻击、流量分析等;
-
边界。两个区域的交界处,比如内网和外网,通过防火墙阻止非法IP访问、部署IDS/IPS实时监控异常流量模式等;
-
计算环境。指主机和终端,比如使用访问控制、主机防火墙、全盘加密;
分层自然就是在 OSI 七层协议下,每层协议都配置安全防御手段。
多点和分层有什么区别呢
我认为多点偏向物理空间,分层偏向协议逻辑;分层属于是决策者,比如使用什么加密机制,访问控制机制。但是你总得在实际的地方去执行这些机制吧,所以多点就像是执行者,在哪些地方去执行决策,比如前面说的那些:
-
网络和基础设施;
-
边界;
-
计算环境。
分层防御就像军队阵型
-
远攻层:弓箭手躲后面,负责远程射击;
-
中距层:长枪兵在前面,阻挡骑兵和步兵冲锋,保护大后方;
-
近战层:大刀兵在侧方,进可攻退可守;
-
突击层:骑兵作为突击,扰乱地方阵型。
但是有了阵型,你总得决定部署在哪里吧
-
边关;
-
城防;
-
宫内。
二、五大安全框架
2.1 认证框架
目的是防止其他实体冒用或独立操作被鉴别实体的身份,确保通信双方身份的真实性
意思就是,防止别人独自冒用他人身份执行操作,比如登录系统、访问资源。
2.1.1 认证通常有两种场景
-
实体由申请者来代表,申请者与验证者之间存在着特定的通信关系
-
实体为验证者提供数据项来源
可以理解成:
-
实体认证:就是你向服务器证明你是你所声称的用户,比如通过密码登录,防止被冒充;
-
实体数据源认证:证明别人收到的消息确实是你发的,并且内容完整未被修改。
2.1.2 鉴别的方式
鉴别通常有5种方式,应该也比较熟悉了
-
已知的,你脑海里的,比如 密码
-
拥有的,你带身上的,比如 IC卡
-
不可改变的特性,你身体上的,比如 指纹,人脸
-
可靠第三方,比如 公钥基础设施 PKI中的证书颁发机构CA
-
环境,比如 IP地址,地理位置,比如异地登录需要二次验证
2.1.3 鉴别的流程
鉴别的流程分为9个阶段,九个阶段完整覆盖了一个实体从加入系统到退出系统的整个鉴别生命周期:
-
安装阶段
-
修改鉴别信息阶段
-
分发阶段
-
获取阶段
-
传送阶段
-
验证阶段
-
停活阶段
-
重新激活阶段
-
取消安装阶段
每个阶段都有不同的目标,细分就是为了避免安全漏洞:
**1.安装阶段:**鉴别流程的起点,定义 申请鉴别信息和验证鉴别信息,就是注册!!,比如当用户注册需要设置密码(申请鉴别信息),然后系统对该密码进行哈希处理(这个哈希值就是验证鉴别信息);
**2.修改鉴别信息阶段:**实体或管理员发起对鉴别信息的变更请求,就是修改密码;
**3.分发阶段:**验证鉴别信息安全地传递给相关实体。我理解这里是保存到数据库之类的持久化存储;
**4.获取阶段:**申请者或验证者通过与可信第三方进行交互,或者通过实体间的直接信息交换,获取生成特定交换鉴别信息所需的数据;简单说 在具体的鉴别过程中,通过一个可信第三方获取本次鉴别的临时或一次性数据,比如说短信验证码或者Google Authenticator因为相同的静态口令容易受到重放攻击。
5.传送阶段,交换鉴别信息在申请者与验证者之间进行传输,比如用户登录后,把用户名密码通过 HTTPS 加密后发送到 Web 服务器
6.验证阶段,用 验证鉴别信息 核对 交换鉴别信息,比如 服务器收到密码后,和数据库中存储的哈希值比对
7.停活阶段,暂时禁用某个实体的鉴别能力,比如 你手机连续输错密码3次,系统就账户锁定10分钟
8.重新激活阶段,解除停火阶段,时间到了,账户自动解锁
9.取消安装阶段,注销账号。
至此,就完成了一个完整的身份验证生命周期。
2.2 访问控制框架
用于决定在开放系统环境中哪些资源可以被使用,以及在何处阻止未授权访问的过程。
核心功能是访问请求的三个步骤:
-
发起
-
判决
-
执行
2.2.1 相关概念
-
发起者,访问资源的实体,例如用户或程序
-
目标,被访问的对象,如文件、系统或网络服务
-
ACI 访问控制信息,比如 用户的身份、被访问资源的敏感度,操作类型(如读、写)
-
ADI 访问控制判决信息 ,ACI 的集合,来源于与三个实体相关的ACI
-
-
发起者ADI,例如用户的身份、角色、安全级别等信息
-
目标ADI:例如被访问资源的敏感等级、访问权限要求。
-
访问请求ADI:例如请求的操作类型(读、写、执行)和操作对象。
-
-
AEF访问控制实施功能 ,负责拦截访问请求,并通知 ADF 进行决策;一旦获得判决结果,AEF 执行允许或拒绝操作;
-
ADF访问控制判决功能 ,根据访问请求、访问控制判决信息(ADI)、访问控制策略规则 三个来决定是否授权。
2.2.2 访问控制的工作流程大致如下
-
用户发起访问请求
-
AEF 通知 ADF 做判决
-
ADF 根据 已有信息 做出判决,告诉 AEF
-
AEF 根据 判决 决定访问结果

AEF是 执行者, ADF就是判官。
**不过我有点好奇,为啥不直接交给 ADF ,要经过 AEF 这一层?**解耦,即把核心功能抽离成一个独立公共模块,哪里用到就哪里调用就好了。毕竟系统里面会有多出需要权限验证的地方,也可以更方便地去维护这个模块。
2.3 机密性框架
确保信息仅对被授权者可用,防止未授权的个体获取敏感数据。通过各种安全机制来保护数据在存储和传输过程中的保密性。但机密性不只是可以通过加密哦,访问限制是不是同样可以做到机密性?答案是对的!
所以机密性保护就有两种机制:
-
通过禁止访问提供机密性
-
通过加密提供机密性
2.3.1 通过禁止访问提供机密性
就是通过这三种技术手段
-
访问控制,上面已经说过了;
-
物理媒体保护,确保数据只能由特定的、受控的设备进行读取或检测,总不能内部人员拿一个U盘就直接导出吧;
-
路由选择控制,确保数据只在可信和安全的路径传输,比如可能有监听风险,被截获数据的路径区域,比如 存在安全威胁的国家,或者一些安全做得不太好的运营商。
2.3.2 通过加密提供机密性,除了常见的密钥加密外
-
数据填充:在真实数据中插入冗余信息,使所有消息长度一致,防止通过流量分析猜我的内容。
-
虚假事件生成:钓鱼执法,定期发送无意义的加密数据流,混淆真实通信的时间和频率特征,抵御业务流分析攻击。
-
时间可变域保护:对时间戳等动态字段进行加密或混淆,防止基于时间的行为追踪
-
PDU头保护:PDU头通常包含源地址、目的地址、协议类型、数据长度、时间戳等控制信息,虽然没有具体的内容,但是推断出大家的身份、通信模式、频率等信息,所以也要对这个头部进行加密。
2.3.3 机密性具体实现技术
(1)信息加密技术
保障信息的机密性,目前主要有两种技术:
-
对称加密技术
-
非对称加密技术
1)对称加密:加密和解密用同一把密钥。
加密的类型主流就有4种:
-
DES (Data Encryption Standard)
-
三重 DES
-
IDEA (International Data Encryption Algorithm)
-
AES (Advanced Encryption Standard)
这四种算法的工作原理都差不多,只是细节不一样
-
明文拆分成块的大小不同(因使用不同长度的密钥)
-
块 加密 的方式不同,从而速度和性能消耗不同
-
输出的加密块的大小不同

DES(数据加密标准):
-
分解块大小:64位的块(使用64位密钥)
-
加密算法:复杂的变换把块"打乱" (替换+移位)
-
输出块:64位
**3DES(三重DES)**和 DES 一样,只是多了几轮加密
-
分解块大小:64位的块(用两个或三个64位密钥)
-
加密算法:同 DES,但会用两个密钥加密三遍
比如 明文块 → K₁加密 → K₂解密 → K₁加密 → 密文块
-
输出块:64位
IDEA(国际数据加密标准)
-
分解块大小:64位的块(128密钥)
-
加密算法:比 DES 更复杂
-
输出块:64位
AES(高级加密标准)
-
分解块大小:128位的块(密钥支持128位/192位/256位)
-
加密算法:比 DES/IDEA 更复杂
-
输出块:128位
其中 密钥长度越长,算法结构越复杂,加密结果的安全性越高。
**但是密钥长度也不是也越长越好!**需要在 安全、效率、成本 之间权衡。密钥太长,加解密开销就大了,速度就下降了,任何事物都存在边界效应,过长的密钥并不和收益成正比。
对于一般应用,128位密钥就够了,军事方面可能就可以选择更高。
2)非对称加密算法
使用两个不同密钥进行加密和解密的密码体制,用一把密钥加密,只有另一把密钥才能解开,一把是公开的,一把是私有保密的。也就是说,你可以用公钥加密,也可以用私钥加密。
-
别人用公钥加密, 你用私钥解密,保证通信安全(只有拥有私钥的人可以解密知道聊天内容)
-
你用私钥加密, 别人用公钥解密, 保证这个信息是你发的
同样的,加密类型也分很多种
-
RSA,基于大素数分解的困难性
-
Elgamal,依赖于离散对数问题的难解性
-
Diffie-Hellman,基于Diffie-Hellman的思想发展
-
ECC,基于椭圆曲线数学结构
-
...
今天重点了解 RSA ,已知两把密钥,一把加密,但是为什么只有另一把才能解密?
因为是一开始就直接配对生成的。就好像 218903只能是 457,479 两个质数的乘积,457,479 就算是完成了初始的公密钥配对。但是具体要怎么生成公钥私钥,就非常复杂了。
一开始先生成 两个大素数 P 和 Q,完成初始的公密钥配对
素数是指在大于 1 的自然数中,除了 1 和它自身外,不能被其他自然数整除的数
接下来就是基于这两个素数进行非常复杂的数学运算。
先简化一下生成私钥和公钥的流程,大概是这样

再来看详细的步骤:
第一步 👉生成两个大素数,要大于 10100
-
P = xx , 比如是3
-
Q = xx , 比如是5
第二步 👉计算两个乘积
-
N = P x Q,N = 3x5 = 15
-
Z = (P-1) x (Q-1),Z = 2x4 = 8
第三步 👉计算一个D值,取Z的同质数,要求如下
-
1 < D < Z
-
D 和 Z 的最大公因数是 1
-
如果有多个同质数,那么取越小越好,数字小后续加密运算效率高
-
所以这里 D = 3
第四步 👉计算一个E值,要求如下
-
E x D 的 结果 除以 Z,余数是1
-
也就是 (E * 3) % 8 = 1
-
可得 E = 3
就可以得到公私钥
-
公钥:(E , N)
-
私钥:(D,N)
更新下上面的图

得到公密钥之后,那这两个钥匙是怎么完成加解密的呢?
有公式:
**公钥加密:**比如明文分解完毕的之后,其中一块是 M,比如M=2,E=3


所以 2 通过公钥加密之后是 8!
下来用私钥解密:

得到要发送的明文块是 2。
(2)密钥管理技术
管理密钥是加密通信安全的重中之重,它涉及密钥的生成、分配、存储、使用和更新等环节。如果管理不好,发生泄露或伪造,加密算法再好也没用。
1)对称密钥管理
主要有2种方式:
a、人工分发:比如 两个用户 A和 B, 其中一方选取密钥之后,告诉对方这是我们的密钥,以后就用这个来加密通信。通过 U盘,纸质等物理手段来交换。我称之为地下党模式。
这种手段虽然不太容易被黑客截取,但是如果是组织的话,内部人员泄漏风险就大了。而且如果每两个用户就需要一个密钥,可能需要保存几十上百个密钥。
b、密钥分配中心(KDC - Key Distribution Center):
-
KDC 给每个用户分配一个密钥(KDC 和 用户共享)
-
比如 KDC 和 用户A 共享 密钥 KA,KDC 和用户B共享密钥 KB

-
当 用户A 想要和 用户B 通信,KDC 会再生成临时会话密钥 K临时
-
KDC 把 K临时 通过KA 加密发送给 用户A, 通过 KB 加密发送给 用户B
-
此时 用户A 就可以使用 K临时 和 用户 B 加密通信

2)非对称密钥管理
非对称密钥也是差不多的,但是就要更聪明一点了
**a.公开发布:**用户把自己的公钥向世界广播,任何人都能拿到公钥,并用公钥加密和我通信
但是!有被假冒的风险!假冒别人把公钥广播出来,就可以解读别人的所有消息!
**b.公用目录表:**某个可信的机构组织,维护一份目录表,类似这样:

大家在这里存放自己的公钥,如果需要别人的公钥,也从这里获取。但是,如果机构被攻击,同样可能被假冒!
c**.公钥管理机构:**
和公用目录表差不多,虽然更安全一些,但是同样存在被攻击的情况。安全在于获取公钥的途径被加强了!
-
用户A 想获取用户B的公钥
-
机构会将用户B的公钥通过自己的私钥加密,再发送给用户A
-
用户A 通过机构公钥来解密,得到用户B 公钥

而且每个用户想要通信,都需要经过公钥机构,机构就会成为网络通信的瓶颈。
d、公钥证书
一次性解决了两大难题:中心机构的通信瓶颈、身份假冒问题。
证书管理机构(CA Certificate Authority)给每一个用户分发信任证书,证书包含这些内容
-
证书发行机构名称
-
证书有效期
-
证书所属人的名称
-
证书所属人的公钥
-
证书序列号,每个证书唯一
-
...等
最后用 机构私钥 给证书签名,证明证书的权威性。用户只需要把证书放给 别人,别人通过 机构公钥 对证书验证之后,同样把自己的证书放给对方。从而从公钥的交换,变成证书的交换。

(3)数字签名技术
和手写签名、盖手印一样,都是对内容做个人认证,保证这个内容的真实性。而数字签名则比手写签名更加权威,因为他无法复制、无法改变,无法迁移,无法伪造。
因为数字签名拥有这几个特性,已被广泛应用于政府、金融、军事和网络安全领域
-
可信性。对方可以验证身份的真实性
-
不可伪造性。除了持有密钥的人,任何人都无法生成有效签名
-
不可重用性。签名是特定文件的一部分,不能被复制到另一个文件上
-
不可改变性。对文件签名之后,文件的内容无法改变
-
抗抵赖性。你无法否认签名,因为只有你有私钥
1)对称密钥签名
因为对称密钥的局限性,无法实现抗抵赖性,很难证明这个消息是你发送的
通常如果两个无法互相信任,就会引入一个第三方。
所以这里引入一个双方都信任的第三方------仲裁人(BB),来协助完成签名过程
步骤如下:
-
BB 有一个只有自己知道的密钥 KBB
-
用户A 和 BB 共享密钥 KA , 用户B 和 BB 共享密钥 KB
-
用户A 用 KA 对内容加密,发送给 BB
-
BB 用 KA 解密内容后,用 KBB 给该消息签名,并自己保留一份,用于后续仲裁
-
BB 再使用 KB 对【原消息+签名】加密,发送给 用户B
-
用户B 用 KB 解密,得到签名, 并保留作为证据

2)非对称密钥签名
公开密钥签名解决了对称密码体制中密钥交换困难的问题。在对称加密中,加密与解密密钥相同且必须保密传输,容易受到中间人攻击。而公开密钥天然没有这个问题,所以更加安全。
但是因为非对称密钥算法效率太低,所以通常不会用直接对内容加密(内容可能很大,可能是一个文件)。所以只会让内容生成一个唯一 hash,并且因为hash
-
单向性,无法通过hash还原成原文
-
弱碰撞性,很难找到内容生成一个一样的hash
所以只需要使用公钥对这个 hash 加密生成签名即可。
具体步骤分成两个部分:
- 用户A发送给用户B,详细步骤如下:

2、用户B接受并验证,详细步骤如下: 

(4)访问控制技术
通过限制和规范用户对系统资源的访问能力与范围,来保护信息系统安全的方法。核心目标是防止非法用户侵入系统或合法用户越权操作,从而确保信息资源的合法使用。核心就是权限。
1)基本模型
之所以叫模型,意思是对访问控制需求进行抽象和简化,我觉得也可以理解成一种架构
那来看看这个模型都有什么东东。
三个基本要素
-
主体(发起访问请求的实体,如用户、进程)
-
客体(被访问的资源,如文件、数据库、设备)
-
控制策略(定义主体对客体的操作权限及约束条件)

而访问控制又包含三种操作
-
认证(验证用户身份)
-
控制策略实现(根据策略允许访问哪些内容或拒绝访问)
-
审计(记录操作行为,防止滥用权力并支持事后追溯)
2)实现技术
把权限给保存起来,没有很复杂的内容,大概四种技术:
- 访问控制矩阵
以主体为行索引, 客体为列索引的一个矩阵,矩阵的每个元素则表示访问策略,如下:

缺点
-
随着用户和文件的增长,导致矩阵大小几何增长,成本骤增
-
矩阵存在空值,造成资源浪费
结论:几乎不用
在 Js 中会类似这样的实现

- 访问控制表
按列保存访问矩阵,即每个客体关联一个列表,记录哪些主体可以访问以及具体的权限

结论:目前最流行,使用最多。
在 JS 中类似这样

- 能力表
按行保存访问矩阵,即每个主体拥有一个能力表,列出其可访问的所有客体及其权限

在 JS 中就类似这样

- 授权关系表
对应于访问矩阵中每一个非空元素进行保存,也就是说,只记录实际存在的访问权限,而不是为每个主体-客体对都分配存储空间。所以就不会因为空值而浪费空间。

优点
-
节省存储空间(只存储实际存在的权限)
-
适应不同类型的访问控制查询需求
2.4 完整性框架
2.4.1 相关操作
阻止和探测威胁,保护数据及其相关属性的完整性,不能以未授权的方式篡改和损坏。
而我们的完整性保护手段,就是为了防止这五种对数据未授权的违规操作:
-
创建
-
修改
-
插入
-
删除
-
重放
其中,创建是一条全新的数据;修改是修改数据本身的内容;插入在原数据基础上,追加新的内容。
举个例子:
1)创建,直接新建转账请求
2)修改,把转账 20w 改成 200w
3)插入,在转账请求后,追加备注 "自愿无偿赠与"
2.4.2 完整性服务分类
1)按保护方法:
阻止完整性损坏 ,比如物理隔离,访问控制,路由控制等隔离技术,通过访问控制机制直接禁止非法修改;检测完整性损坏,比如数字签名使用哈希值验证数据是否被改动。
2)按是否支持恢复:
- 具有恢复机制 ,比如文件系统中的日志回滚、数据库事务回滚;不具有恢复机制,如果没有对数据进行备份,被病毒攻击后无法还原。
这就好像说你要怎么保护自己的安全
-
第一,不去危险的地方;
-
第二,强身健体带兵器,遇到危险可以保护自己。
2.5 抗抵赖框架
目的是: 为特定事件和行为提供证据, 防止事后有人否认参与过 该事件或行为。
这个比较简单,大致看下抗抵赖的整个流程,包括4个阶段
-
证据生成
-
证据传输、存储和恢复
-
证据验证
-
解决纠纷
证据生成,一个实体(证据生成请求者)请求系统(证据生成者)生成关于某一事件的证据。比如 你向商家下单时,系统会自动生成证据(时间戳、数字签名、IP地址等信息)。这个证据可由交易双方生成,也可借助可信第三方(如认证机构CA)共同生成,增强公信力
证据传输、存储和恢复,生成的证据需被安全地传输并长期保存,以便未来调用。比如你前面下单所生成的证据(数字签名和交易记录)会被加密后存储在数据库中
证据验证,争议出现时,证据使用者(如商家或司法机构)请求对证据进行验证,验证者(系统本身或第三方机构)检查数字签名的有效性、时间戳的真实性以及数据完整性,比如 验证你的 私钥签名是否和公钥匹配
解决纠纷,双方无法达成一致,则进入仲裁阶段,仲裁者(比如法院)依据已验证的证据判断事实。比如根据前面所有的证据都完整而且有效,那么就算你抵赖也没用。
参考文献:
1、