1. 安全通信概述

各位同学好,我是这门课的主讲。今天咱们聊聊安全通信的入门知识。说实话,这个领域我摸爬滚打十几年了,踩过的坑不少,积累的经验也挺多。咱们先从最基础的概念讲起。

通信安全三要素

做安全通信,说白了就三件事要守住:机密性、完整性、可用性。业内管这叫 CIA 三元组,不是中央情报局那个 CIA 啊,别搞混了。

核心要点:通信安全三要素是评估任何安全协议的基础框架。缺一个,系统就不安全。

1. 机密性(Confidentiality)

机密性就是保证信息不被不该看到的人看到。我当年在做一个金融项目时,客户要求所有交易数据必须加密传输。当时有人觉得没必要,结果后来出了数据泄露事件,整个项目差点黄了。

实现机密性的常见手段:

  • 对称加密:AES、SM4 这类算法,速度快,适合大量数据
  • 非对称加密:RSA、ECC,用于密钥交换和数字签名
  • 混合加密:实际项目中用得最多,比如 HTTPS 就是这种思路

我的经验:别迷信单一加密算法。我在项目中习惯用「对称加密处理数据 + 非对称加密传递密钥」的组合方式,既安全又高效。

2. 完整性(Integrity)

完整性确保数据在传输过程中没被改过。你想想看,如果银行转账指令被篡改了,那后果多严重?

完整性保护常用技术:

  • 哈希函数:SHA-256、SM3,给数据打个「指纹」
  • 消息认证码(MAC):HMAC 是常见实现
  • 数字签名:不仅能验证完整性,还能防抵赖

我曾经遇到过一个案例:某系统只用了 CRC 校验来保证完整性,结果被攻击者轻松绕过。嗯,这里要注意,CRC 是检错码,不是安全校验,千万别混用。

3. 可用性(Availability)

可用性就是说,该用的时候系统得能用。这个点很多人容易忽略。我记得有个项目,加密做得很好,但密钥管理系统太复杂,导致正常用户经常无法解密数据——这就是典型的「为了安全牺牲可用性」。

影响可用性的常见问题:

  • 拒绝服务攻击(DoS/DDoS)
  • 密钥丢失或损坏
  • 协议设计过于复杂导致性能瓶颈

避坑指南:我曾经见过一个团队,把安全协议设计得极其复杂,结果系统响应时间从 50ms 飙升到 5 秒。用户全跑了。安全很重要,但别让系统变得不可用。

常见攻击类型

搞安全通信,你得先知道敌人长什么样。我总结了三类最常见的攻击,几乎每个项目都会遇到。

1. 窃听攻击(Eavesdropping)

说白了就是偷听。攻击者在通信链路上截获数据包,直接读取明文内容。这种攻击在无线网络中尤其常见。

举个真实例子:我在做 Wi-Fi 安全审计时,用 Wireshark 抓包,发现某个 APP 居然用 HTTP 传输登录密码。嗯,这就是典型的「裸奔」。

防御手段:加密传输,别用明文。

2. 篡改攻击(Tampering)

攻击者不仅偷看,还动手改数据。比如修改转账金额、篡改软件更新包等。

我记得有个项目,客户说他们的固件升级包经常被篡改。我一查,发现他们只用了简单的校验和。后来我建议他们加上数字签名,问题就解决了。

防御手段:消息认证码或数字签名。

3. 重放攻击(Replay Attack)

这个很有意思。攻击者不需要破解加密,只需要把之前截获的合法数据包重新发送一遍就行。

我遇到过最典型的案例:某门禁系统用 RFID 卡开门,攻击者用设备复制了卡片的通信数据,然后重放一遍,门就开了。你说吓人不?

防御手段:

  • 时间戳:检查消息是否在有效时间内
  • 随机数(Nonce):每次通信使用不同的随机数
  • 序列号:记录消息序号,防止重复

关键点:加密只能防窃听,防不了重放。很多新手以为加密了就万事大吉,这是大错特错。

安全协议设计原则

讲了这么多攻击,那怎么设计一个靠谱的安全协议呢?我总结了几个核心原则,都是血泪教训换来的。

原则一:不要自己发明加密算法

这个我反复强调。你想想看,全世界那么多密码学家,花了几十年才设计出 AES、SHA-256 这些算法。你一个下午写出来的加密算法,能比他们强?

我见过太多「自创算法」的项目,最后都被攻破了。用标准算法,别作死。

原则二:Kerckhoffs 原则

系统的安全性应该依赖于密钥的保密性,而不是算法的保密性。说白了,算法可以公开,密钥必须保密。

这个原则在开源项目中体现得最明显。比如 TLS 协议,算法完全公开,但只要你密钥保管好,它就是安全的。

原则三:最小权限原则

每个实体只拥有完成其任务所需的最小权限。别给太多。

我做过一个物联网项目,设备之间的通信密钥居然全部相同。结果一个设备被攻破,整个网络都沦陷了。这就是典型的权限过大。

原则四:防御纵深

别只依赖一层防护。多设几道防线,即使一层被突破,还有后面的兜底。

举个例子:

层级 防护措施
传输层 TLS 加密
消息层 数字签名
应用层 身份认证 + 权限控制

我的建议:设计协议时,先画攻击树,想想每个环节可能被怎么攻击,然后针对性地加防护。别等出事了再补。

原则五:考虑性能开销

安全是有代价的。加密、签名都会消耗计算资源和网络带宽。设计时要权衡。

我记得有个项目,为了追求极致安全,每个数据包都做非对称加密签名,结果服务器 CPU 直接跑满。后来改成「批量签名 + 对称加密」,性能提升了 10 倍。

小结

这一章咱们聊了安全通信的三大基石:机密性、完整性、可用性。也看了三种常见攻击:窃听、篡改、重放。最后讲了设计安全协议的几条原则。

说实话,这些内容看起来简单,但真正做好不容易。我做了这么多年安全,每次设计新协议时,还是会反复检查这些基础点。因为很多重大安全漏洞,往往就出在这些「简单」的地方。

下一章咱们深入讲讲加密算法的具体实现,到时候我会带大家手写一个简单的加密通信示例。今天就到这儿,有问题随时问我。