3、用户认证机制:密码认证(强度策略、哈希存储)、多因素认证(MFA)在HMI中的应用、生物识别(指纹/人脸)的工业场景限制
说到用户认证,我见过太多工厂在这上面栽跟头了。有的HMI密码直接贴屏幕上,有的用"123456"用了十年。你想想看,一个操作员能控制整条产线,密码却跟没有一样,这多吓人。
这一章咱们就聊聊认证机制。说白了,就是怎么证明「你是你」。我把它拆成三个部分:密码认证、多因素认证、还有生物识别。每个都有坑,咱们一个一个说。
3.1 密码认证:别让密码成为摆设
密码认证是最基础的,但也是最容易被忽视的。我在一个汽车零部件工厂做审计时,发现他们的工程师账号密码是"engineer2020"。嗯,2020年的密码,2024年还在用。这哪是密码,这是请帖。
3.1.1 密码强度策略
密码强度策略不是用来折腾操作员的,是用来保命的。我个人习惯这样设置:
- 最小长度:至少8位,我建议12位以上。别嫌长,PLC的密码要是被破解了,产线就停了。
- 字符组合:大写+小写+数字+特殊符号。别跟我说记不住,系统可以提示,但必须强制。
- 历史密码:禁止重复最近5次用过的密码。这能防止操作员在"Password1"和"Password2"之间来回切换。
- 有效期:普通用户90天,管理员30天。我在项目中遇到过,一个离职员工的账号半年后还在用,就是因为密码没过期。
避坑指南:我曾经见过一个工厂,密码策略设得太严,操作员就把密码写在便签纸上贴在屏幕边框上。所以策略要合理,别让用户走极端。我一般建议:密码长度12位,允许使用空格和常见单词组合,比如"MyPLC2024!",既好记又安全。
3.1.2 哈希存储:密码不能明文存
这个我必须强调:绝对不要明文存储密码。我在一个老旧HMI系统里见过,密码直接写在配置文件里,用记事本就能打开。这不是开玩笑。
正确的做法是用哈希算法。我推荐用bcrypt或Argon2,别再用MD5和SHA-1了,那俩早就被破解了。下面是一个简单的示例:
// 使用bcrypt进行密码哈希(伪代码)
String hashedPassword = BCrypt.hashpw(plainPassword, BCrypt.gensalt(12));
// 验证密码
if (BCrypt.checkpw(inputPassword, storedHash)) {
// 认证通过
} else {
// 认证失败
}
这里有个细节:加盐。每个用户的盐值要随机且唯一。我习惯用12轮的bcrypt,虽然计算慢一点,但安全。你想想看,攻击者想暴力破解一个bcrypt哈希,成本高得吓人。
我的经验:在HMI上做密码验证时,要注意响应时间。如果密码错误,故意延迟1-2秒再返回结果。这能防止暴力破解。我见过一个系统,密码错了立刻返回,结果被脚本一秒试几千次。
3.2 多因素认证(MFA)在HMI中的应用
密码认证有个硬伤:密码会泄露。多因素认证就是加一道锁。说白了,就是「你知道的+你拥有的+你本身的」至少组合两个。
在工业HMI里,MFA怎么用?我总结了几种常见场景:
| 因素类型 | 示例 | 工业场景适用性 |
|---|---|---|
| 知识因素 | 密码、PIN码 | 高,基础认证 |
| 持有因素 | U盾、手机令牌、RFID卡 | 中高,适合管理员 |
| 固有因素 | 指纹、人脸 | 低,受环境限制 |
我个人建议:操作员用密码+RFID卡,工程师用密码+手机令牌。为什么?操作员戴手套,手机令牌不方便。工程师经常远程维护,手机令牌更灵活。
注意:MFA不是万能的。我在一个化工厂见过,他们用了密码+短信验证码,但操作员把手机放在控制室公用。这等于把第二道锁的钥匙挂在第一道锁上。MFA的核心是「因素独立」,两个因素不能同时被一个人拿到。
3.3 生物识别(指纹/人脸)的工业场景限制
生物识别听起来高大上,但在工业现场,我劝你谨慎。为什么?我踩过坑。
3.3.1 指纹识别的工业困境
指纹识别在办公室好用,在工厂就是噩梦。你想想看:
- 油污问题:操作员手上有机油、切削液,指纹识别器根本读不出来。我在一个机加工车间试过,10次里有7次失败。
- 磨损问题:老工人手指上有老茧,指纹浅。我见过一个老师傅,按了5次都识别不了,最后只能用密码。
- 手套问题:很多岗位必须戴手套。你总不能让人脱了手套按指纹,再戴上吧?这不符合安全规范。
3.3.2 人脸识别的限制
人脸识别比指纹好一些,但也有问题:
- 光照条件:HMI屏幕通常背光,人脸识别摄像头对着操作员,光线反差大。我测试过,逆光时识别率下降30%。
- 安全帽和口罩:很多工厂要求戴安全帽和口罩。人脸识别系统如果没针对这些优化,基本废了。
- 双胞胎问题:虽然概率低,但工业场景里不能有「可能」。我见过一个案例,双胞胎兄弟在同一车间工作,人脸识别经常搞混。
我的建议:生物识别在工业HMI上只能作为辅助认证,不能作为唯一认证。我一般这样设计:
- 低风险操作(查看数据):密码或人脸识别
- 中风险操作(修改参数):密码+人脸识别
- 高风险操作(固件升级、配方修改):密码+人脸识别+管理员审批
3.4 实战建议:怎么选认证方案?
说了这么多,到底怎么选?我根据项目经验,给个参考:
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 普通操作员 | 密码(12位)+RFID卡 | 操作简单,抗油污,成本低 |
| 工程师 | 密码(16位)+手机令牌 | 远程维护方便,安全性高 |
| 管理员 | 密码(20位)+U盾+人脸识别 | 三重认证,最高安全等级 |
| 洁净室/无尘车间 | 人脸识别+密码 | 避免接触,减少污染 |
最后说一句:认证机制再强,也怕人偷懒。我见过最安全的系统,操作员把密码贴在键盘底下。所以,除了技术手段,还要做安全培训。让每个人明白:密码不是麻烦,是保护。
嗯,这一章就到这里。下一章咱们聊聊权限管理的具体实现,包括角色划分和最小权限原则。到时候我会分享一个我踩过的坑——因为权限没设好,操作员误改了配方,整批产品报废。你想想看,那损失有多大。