内容正文:
第六单元 物联网安全
第30课系统安全需升级
物联网安全技术
身份认证与加密
1
本课内容
01
学习目标
了解提升数据采集安全的方法,认识物联系统安全的重要性
02
问题导入
物联门锁的安全隐患与核心问题探讨
03
体验摄像头活体检测
学习动作交互式活体检测技术原理与实践
04
探究身份认证技术
设计并实现用户身份认证方案
05
巧用数据加密传输
理解数据加密的重要性与实现方法
06
课堂总结
回顾核心知识点与安全实践要点
2
学习目标
1
提升数据采集安全
了解提升数据采集安全的方法,能够开展摄像头 活体检测 实践,掌握动作交互式检测技术的基本原理与实现方法
2
认识物联系统安全
了解 身份认证技术 ,认识物联系统安全的重要性,理解数据加密传输在保护系统安全中的关键作用
本课核心问题: 如何提高物联门锁系统安全性?
3
问题导入
物联门锁的安全隐患
安全隐患回顾
在之前的课程中,我们提到了 照片欺骗摄像头 的案例。攻击者可以使用他人的照片轻松骗过简单的人脸识别系统,从而非法进入受保护的区域。
因此,之前设计的物联门锁系统的刷脸开锁功能也存在安全隐患!
物联门锁系统现状
在前面课程的学习中,我们已经完成了物联门锁系统的基本设计和实现。和其他系统一样,物联门锁系统也需要不断 迭代和完善 。
完成了基础功能开发
实现了远程控制开锁
核心问题
在学习了物联网安全知识后,你知道如何提高物联门锁系统的安全性吗?
本课将通过体验和探究,提升物联门锁系统的安全性能,让你在实践中认识物联系统安全的重要性。
4
30.1
体验摄像头活体检测
什么是活体检测?
活体检测(Liveness Detection)是人脸识别系统的 安全防线 ,通过验证目标是否为真实活体,防止照片、视频、3D面具等伪造攻击。
核心价值:解决"身份真实性"问题,不仅验证"是否为同一人",更要确认"是否为真实存在的活体"
为什么需要活体检测?
无活体检测
攻击成功率高达 87%
有活体检测
攻击成功率降至 0.3%
动作交互式检测
通过引导用户完成特定动作(如眨眼、张嘴等),结合人脸关键点跟踪与动作序列分析,判断是否为真实人脸。
眨眼检测
检测眼睑闭合与张开动作
张嘴检测
检测嘴巴张开与闭合动作
实践目标
对物联门锁系统进行改进,增加 张嘴、眨眼 等面部动作的识别功能,防止被照片欺骗。
5
活体检测技术原理
动作交互式检测的工作流程
核心流程
1
动作指令生成
系统随机生成动作序列(如"向左转头并眨眼"),避免攻击者预录视频
2
关键点跟踪
利用Dlib、OpenCV等库提取68个人脸关键点,实时计算动作幅度与速度
3
动作一致性校验
对比用户实际动作与指令的匹配度,判断动作是否自然流畅
技术优势
实现简单: 对硬件要求低,适合移动端和嵌入式设备部署
防御性强: 能有效防御静态(照片)和动态(视频)攻击
技术成熟: 基于计算机视觉的动作追踪算法已经非常成熟
局限性
体验略繁琐: 需要用户主动配合,可能影响使用流畅性
3D攻击风险: 高精度3D头模理论上存在被破解的可能
深度伪造: AI换脸技术生成的视频可能绕过检测
技术指标: 动作识别精度需达 95%以上 ,实时反馈延迟控制在 200ms内
6
活动1
增加面部动作识别功能
实践任务
对物联门锁系统进行改进,增加 张嘴、眨眼 等面部动作的识别功能,主要代码逻辑如下:
核心思路:先检测眨眼和张嘴的动作,再进行具体的人脸识别和开锁判断
变量说明
blink
眨眼次数
人工智能摄像头在工作过程中自动检测并记录的眨眼次数
mouth
张嘴次数
人工智能摄像头在工作过程中自动检测并记录的张嘴次数
程序实现逻辑
# 定义开锁函数defopen():
servo(1).angle(180)
time.sleep(1.5)
servo(1).angle(0)
# 消息接收处理函数defreceivedfunction():
# 获取MQTT消息
msg = mqttclient.message(
topic="主题ID")
# 解析JSON数据
status = ujson.loads(msg)["status"]
# 获得人脸识别结果# 获取眨眼和张嘴次数
blink = ujson.loads(msg)["blink"]
mouth = ujson.loads(msg)["mouth_open"]
# 通过眨眼和张嘴次数进行活体检测# 如果人脸识别成功且活体检测通过,则开锁if status == 1and blink > 1and mouth > 1:
open()
# 订阅主题并设置回调函数
mqttclient.received(
topic="主题ID",
callback=receivedfunction)
7
活体检测代码解析
利用面部动作识别开锁的核心流程
核心流程图
1
设置网络及物联网服务平台
配置MQTT连接
2
获取物联网服务平台的消息
订阅主题接收数据
3
获得人脸识别结果
解析status字段
4
获得眨眼和张嘴次数
解析blink和mouth
判断条件
if status == 1 \
and blink > 1 \
and mouth > 1:
open()
status == 1: 人脸识别成功
blink > 1: 眨眼次数大于1次
mouth > 1: 张嘴次数大于1次
安全机制
双重验证
结合人脸识别和活体检测,确保是本人且为真实活体
防照片攻击
静态照片无法完成眨眼和张嘴动作,有效防止照片欺骗
动态验证
通过动作序列验证,增加攻击难度和成本
8
活体检测的局限性
现有方案的不足与改进方向
仍存在被视频欺骗的风险
仅通过面部动作识别,依然无法解决利用 视频欺骗 的问题。攻击者可以事先通过 人工智能换脸技术 生成一段包含面部动作的视频,来欺骗物联门锁系统。
攻击手段升级
深度伪造视频
利用Deepfake技术生成逼真的动态视频,包含眨眼、张嘴等动作
3D面具攻击
高精度3D打印面具可以模拟真实人脸的立体结构和动作
屏幕翻拍攻击
在屏幕上播放预录制的视频,摄像头拍摄屏幕内容
更高级的解决方案
想要更有效地进行活体检测,更好的方案是使用 深度摄像头 采集脸部的三维特征,并配合更复杂的算法提升物联门锁系统的安全性。
3D结构光技术
投射结构光图案,获取面部深度信息,区分平面照片和立体真人
红外热成像
检测面部温度分布,真实人脸有血液流动产生的温度特征
多模态融合
结合可见光、红外、深度等多种信息,构建立体化防护体系
9
30.2
探究身份认证技术
远程控制的安全隐患
在物联门锁系统中,远程控制开锁功能是通过门锁在MQTT服务器中订阅主题 "Door/Lock" 实现的。
安全风险:如果收到消息 "open" ,则开锁。这意味着 任何人 只要接入了该MQTT服务器,都可以向门锁发送"open"指令打开门锁!
什么是身份认证?
用户身份认证可以让物联门锁系统知道是 "谁" 在开门。如果是非法用户,则可以拒绝开门操作,从而增加了安全性。
合法用户
验证通过 → 执行开锁
非法用户
验证失败 → 拒绝开锁
思考问题
问题1:哪些情况下需要验证身份数据?
问题2:如何"告知"物联门锁身份数据?
问题3:将用户名和密码存储在门锁主控板中,是否会带来一些不便?
解决方案思路
可以将用户名和密码存储在 物联网服务平台 中,每次由门锁向平台询问用户账户信息,或者直接把接收到的数据发送给平台,由平台直接给出账户比对结果。
10
身份认证的作用
为什么需要身份认证?
识别用户身份
身份认证让系统知道是 "谁" 在尝试开门,从而区分合法用户和非法用户
增强安全性
对于非法用户的请求,系统可以 拒绝开门操作 ,有效防止未授权访问
记录操作日志
可以记录每次开锁操作的 用户身份和时间 ,便于安全审计和追溯
身份认证流程对比
无身份认证
用户发送"open"指令
门锁直接执行开锁
任何人都能开锁!
安全风险极高
有身份认证
用户发送带身份信息的指令
系统验证用户名和密码
验证通过后才执行开锁
安全性大幅提升
11
活动2
设计身份认证方案
任务要求
以小组为单位提出一个物联门锁系统 身份认证设计方案 ,并填写设计方案表格。
设计目标:通过MQTT服务器向门锁发送开门消息时附带上用户名和密码
消息格式示例
"user1,psd123,open"
1
user1 - 用户名
2
psd123 - 密码
3
open - 开锁指令
身份认证方案表
方案名称 身份认证方式 设计理由
方案一 用户名和密码 比较常用,不需要额外硬件
方案二 (请填写) (请填写)
方案三 (请填写) (请填写)
提示:可以考虑指纹识别、IC卡、手机APP等多种认证方式
12
模拟实现用户身份认证功能
三个关键步骤
1
增加数据存储
采用 列表 等方式存储用户名、密码等数据
users = ["user1", "psd1"]
2
进行身份认证
利用 split() 解析数据,进行数据对比
msg.split(",")
3
开展测试
非授权用户发送开锁消息后,检查 舵机是否转动
验证安全性
split() 方法说明
split() 可以实现将一个字符串按照指定的 分隔符 切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。
示例
# 原始消息
msg = "user1,psd123,open"# 按逗号分割
result = msg.split(",")
# 结果:['user1', 'psd123', 'open']
分割后的数据
0
user1
用户名
1
psd123
密码
2
open
指令
13
账号密码认证代码解析
主要代码逻辑详解
完整代码
# 门锁用户名和密码存储在列表中
users = ["user1", "psd1"]
# 对接收到的消息按逗号进行分割
msg = msg.split(",")
# 如果可以被分割为3个字段# 说明该消息符合要求if len(msg) == 3:
# 解析用户名、密码和指令
user = msg[0]
psd = msg[1]
cmd = msg[2]
# 对用户名和密码进行认证if user == users[0] and psd == users[1]:
# 认证成功,检查指令if cmd == "open":
# 执行开锁动作
servo(0).angle(180)
time.sleep(1.5)
servo(0).angle(0)
else:
# 认证失败,显示错误信息
oled.print("用户名或密码错误!")
指令标记:可以在消息头部设立特定标记字段,只有收到该标记时才解析
代码逻辑流程
1
数据存储:用户名密码存入列表
2
消息分割:split(",")解析数据
3
字段验证:检查是否为3个字段
4
身份认证:比对用户名和密码
5
执行指令:认证通过后开锁
安全提升效果
只有知道用户名和密码的用户才能开锁
非法用户会收到错误提示
系统安全性显著提升
14
30.3
巧用数据加密传输
新的安全隐患
即使增加了身份认证,用户名、密码数据在网络传输过程中使用 明文 ,仍有 泄露的风险 。
问题:攻击者可以通过网络嗅探工具截获传输的数据包,直接读取用户名和密码!
解决方案
通过对传输数据进行 加密 可以较好地解决数据传输过程中的泄露问题。
传输层加密
使用TLS/SSL协议加密整个通信通道
应用层加密
对消息内容进行加密后再传输
明文传输的风险
传输过程示意
手机APP
发送消息
"user1,psd123,open"
明文传输
物联门锁
接收消息
攻击者可以:
截获网络数据包
直接读取用户名和密码
伪装成合法用户进行攻击
15
数据加密的重要性
为什么需要加密传输?
生活中的安全问题
很多用户习惯在不同的系统中使用 相同的用户名和密码 。一旦某个系统的数据泄露,用户在其他平台上的数据安全也会受到威胁。
购物网站
user1 / psd123
邮箱账户
user1 / psd123
物联门锁
user1 / psd123
风险:购物网站数据泄露 → 攻击者获得用户名密码 → 可以打开你的家门!
加密后的效果
原始数据:
"user1,psd123"
加密数据:
"xK9#mP2$vL7..."
即使被截获也无法读取
保护用户隐私安全
防止中间人攻击
加密的价值
数据机密性
确保只有授权方能够读取数据内容
数据完整性
防止数据在传输过程中被篡改
身份认证
验证通信双方的真实身份
16
拓展
选择加密算法
拓展任务
选择一种 加密算法 对物联门锁系统中传输的数据进行加密,修改物联门锁系统的程序,实现该功能。
提示:可以结合前面学习的算法内容,利用 移位密码 等方式进行加密
对称加密
特点
加密和解密使用 相同的密钥
常用算法
AES、DES、3DES
优点
加密速度快,适合大数据量
缺点
密钥分发和管理困难
非对称加密
特点
使用 公钥和私钥 配对,公钥加密私钥解密
常用算法
RSA、ECC、DSA
优点
密钥管理更安全
缺点
加密速度慢,计算量大
实际应用:通常结合使用,用非对称加密传输对称密钥,再用对称加密传输数据,兼顾安全性和效率
17
课堂总结
系统安全需升级
活体检测
通过 眨眼、张嘴 等面部动作识别,防止照片欺骗攻击
动作交互式检测
人脸关键点跟踪
身份认证
通过 用户名密码 验证,确保只有授权用户能开锁
数据存储与验证
split()方法解析
数据加密
通过 加密算法 保护数据传输,防止信息泄露
对称加密
非对称加密
核心认识
物联网系统安全需要从 多个维度 进行防护:数据采集安全、身份认证安全、数据传输安全,只有构建完整的 安全防护体系 ,才能有效保护系统和用户的安全。
感谢学习 | 第六单元 物联网安全 | 第30课
18
$