对称密钥认证:主机和设备共享同一把密钥

深入解析eMMC RPMB安全机制:从防重放攻击到密钥管理 本文深入解析eMMC RPMB安全机制,重点阐述其如何通过对称密钥、HMAC-SHA256认证、写计数器和随机数等核心技术,构建防篡改与防重放攻击的安全堡垒。文章详细拆解了RPMB的认证流程、防重放攻击原理,并探讨了密钥生命周期管理及在Linux与TEE中的实战应用,为嵌入式系统关键数据保护提供了全面的安全方案。 阅读详情

对称密钥认证,是指主机和设备共享同一类密钥,通过相同算法计算认证结果,从而判断对方是否拥有正确密钥。

它的特点是:

  • 速度快;
  • 资源占用低;
  • 实现相对简单;
  • 适合 MCU、耗材、配件、传感器等资源受限场景。

在嵌入式系统中,对称密钥认证常用于:

  • 耗材认证;
  • 配件认证;
  • 探头认证;
  • 电池认证;
  • 短报文消息认证;
  • 主机与外设之间的挑战响应。

但它也有一个非常关键的工程风险:

关键词

工程含义

对称密钥 / 派生密钥

适合低成本认证,但必须避免全局共享密钥。

1. 什么是对称密钥认证

对称密钥认证的核心思想是:

主机和设备都持有同一类密钥。
谁能用这把密钥算出正确结果,谁就被认为是可信对象。

这里的“对称”指的是:

  • 主机端知道密钥;
  • 设备端也知道对应密钥;
  • 双方使用相同算法计算认证结果。

例如,主机发送一个随机 Challenge,设备使用内部密钥计算 MAC,主机使用相同密钥计算期望 MAC。

如果两个结果一致,说明设备大概率持有正确密钥。


2. 典型认证流程

对称密钥认证最常见的形式是 Challenge-Response 挑战响应。

典型流程如下:

1. 主机读取设备 SN
2. 主机生成随机 Challenge
3. 主机将 Challenge 发送给设备
4. 设备使用内部密钥计算 MAC
5. 设备返回 Response
6. 主机使用对应密钥计算 Expected_Response
7. 主机比较 Response 和 Expected_Response
8. 一致则认证通过,不一致则拒绝使用

可以简化表示为:

Host → Device:
    Challenge

Device:
    Response = HMAC(Device_Key, Challenge)

Device → Host:
    Response

Host:
    Expected = HMAC(Device_Key, Challenge)

if Response == Expected:
    认证通过
else:
    认证失败

这个过程中,设备不需要把密钥发送出来。

设备只需要证明:

我拥有正确密钥。


3. 为什么不能所有设备共用一把密钥

最简单的设计是:

所有设备都使用同一把 Global_Key

这种方式实现简单,但风险非常高。

因为一旦攻击者从某一台设备中提取出 Global_Key,就可以伪造所有设备。

后果包括:

  • 可以批量克隆耗材;
  • 可以伪造合法配件;
  • 可以绕过探头认证;
  • 可以伪造通信报文;
  • 可以生产山寨设备;
  • 可以影响整批产品安全。

这就是典型的全局共享密钥风险。

所以工程上应尽量避免:

Device_A_Key = Global_Key
Device_B_Key = Global_Key
Device_C_Key = Global_Key
...

更合理的方式是:

Device_A_Key != Device_B_Key != Device_C_Key

也就是每台设备都有自己的唯一密钥。


4. 唯一派生密钥

为了避免所有设备共用一把密钥,工程上常用唯一派生密钥。

基本思想是:

使用一个父密钥 Root_Key,再结合设备唯一信息,派生出每台设备自己的密钥。

例如:

Device_Key = KDF(Root_Key, Device_SN)

或者:

Device_Key = HMAC-SHA256(Root_Key, Device_SN)

其中:

字段

含义

Root_Key

父密钥,只存在于安全产线系统、HSM 或主机安全模块中

Device_SN

设备唯一序列号

Device_Key

每台设备最终保存的唯一密钥

这样做的好处是:

  • 每台设备密钥不同;
  • 单台设备密钥泄露,不会直接泄露父密钥;
  • 攻击者不能直接推导其他设备密钥;
  • 主机可以根据 SN 动态计算对应设备密钥;
  • 产线可以按设备唯一身份写入不同密钥。

5. 派生密钥的工程示例

假设有 3 个耗材:

SN_A = 100001
SN_B = 100002
SN_C = 100003

使用父密钥派生:

Key_A = HMAC-SHA256(Root_Key, SN_A)
Key_B = HMAC-SHA256(Root_Key, SN_B)
Key_C = HMAC-SHA256(Root_Key, SN_C)

最终结果是:

Key_A != Key_B != Key_C

耗材 A 内部只保存 Key_A。

耗材 B 内部只保存 Key_B。

耗材 C 内部只保存 Key_C。

即使攻击者破解了耗材 A,拿到 Key_A,也不能直接得到 Key_B、Key_C,更不能反推出 Root_Key。

这就把攻击影响范围限制在单台设备或单个耗材上。


6. 认证时主机如何得到设备密钥

使用唯一派生密钥后,主机认证设备时通常有两种方式。


6.1 方式一:主机保存父密钥并动态派生

主机读取设备 SN 后,动态计算:

Device_Key = HMAC-SHA256(Root_Key, Device_SN)

然后用 Device_Key 验证设备 Response。

优点是:

  • 不需要保存所有设备密钥表;
  • 只要知道 SN,就能计算对应密钥;
  • 适合大量设备、耗材和配件认证。

缺点是:

  • 主机必须保护 Root_Key;
  • 如果主机 Root_Key 泄露,可能影响大量设备;
  • 主机端最好使用安全芯片、安全区域或受控模块保存 Root_Key。

6.2 方式二:主机保存设备密钥表

主机或服务器保存:

SN_A → Key_A
SN_B → Key_B
SN_C → Key_C

认证时根据 SN 查找对应 Device_Key。

优点是:

  • 主机不需要保存 Root_Key;
  • 单个密钥泄露影响范围可控;
  • 可以单独吊销某个设备密钥。

缺点是:

  • 密钥表管理复杂;
  • 大批量设备时存储和维护成本较高;
  • 离线设备可能不方便同步密钥表。

7. 产线设计

对称密钥认证是否安全,很大程度取决于产线密钥管理。

生产阶段应由 HSM 或受控产线系统完成密钥派生和写入。

推荐流程:

1. 产线系统读取设备 SN
2. HSM 根据 Root_Key 和 SN 派生 Device_Key
3. 产线系统将 Device_Key 写入设备安全区域或加密芯片
4. 写入后锁定调试口和读保护
5. 产线记录 SN、批次、证书编号、写入状态
6. Device_Key 不以明文形式保存在普通产线电脑中

关键原则是:

父密钥不应出现在普通产线电脑、脚本、日志、烧录文件或 MCU 固件中。

设备端只保存派生密钥。

主机端可以保存父密钥,也可以通过安全模块动态派生。


8. 父密钥不能放在哪里

工程上应避免把父密钥放在以下位置:

  • 普通 PC 脚本;
  • Excel 表格;
  • 烧录配置文件;
  • MCU 固件源码;
  • 固件常量数组;
  • 调试日志;
  • 产线明文数据库;
  • 邮件或网盘文档;
  • 普通外部 Flash;
  • 未保护的 EEPROM。

一旦 Root_Key 泄露,攻击者可能批量派生合法设备密钥。

因此,Root_Key 应尽量只存在于:

  • HSM;
  • 安全服务器;
  • 安全芯片;
  • MCU 安全区域;
  • 受控密钥管理系统。

9. 设备端密钥存储

设备端保存的是 Device_Key,而不是 Root_Key。

设备端密钥应尽量存放在:

  • 加密芯片;
  • 安全认证芯片;
  • MCU 安全存储区域;
  • OTP / eFuse;
  • 读保护 Flash;
  • TrustZone 安全区;
  • 不可直接读取的密钥槽。

如果只能存放在普通 MCU Flash 中,应至少采取:

  • 开启读保护;
  • 关闭 SWD/JTAG;
  • 禁止调试口量产开放;
  • 固件中避免明文打印密钥;
  • 产线写入后立即锁定;
  • 防止升级包覆盖密钥区;
  • 对密钥区做访问权限隔离。

10. 对称认证的优点

对称密钥认证在嵌入式系统中非常实用,主要优点包括:

10.1 速度快

HMAC、AES-CMAC 等算法计算速度较快。

对于 MCU 来说,认证一次通常可以在较短时间内完成。


10.2 资源占用低

相比非对称算法,对称算法通常占用更少的 Flash、RAM 和 CPU。

这对低成本 MCU、耗材芯片、传感器模块非常重要。


10.3 实现简单

主机和设备使用相同算法即可完成认证。

协议流程清晰,容易嵌入到现有通信流程中。


10.4 适合短报文认证

对于控制命令、状态包、配置包、耗材认证包等短报文,对称 MAC 很适合。


11. 对称认证的缺点

对称认证最大的挑战是密钥管理。

11.1 密钥分发压力大

因为主机和设备都要知道对应密钥,所以密钥必须安全写入双方。

密钥在产线、维修、升级、备份过程中都有泄露风险。


11.2 主机密钥保护压力大

如果主机需要保存 Root_Key 或大量 Device_Key,就必须有足够保护。

否则一旦主机被破解,攻击者可能伪造大量设备。


11.3 不适合公开验证场景

对称认证要求验证方也知道密钥。

如果有很多第三方系统都需要验证设备,就必须把密钥分发给多个验证方。

这会增加密钥泄露风险。

这种场景更适合使用非对称签名或证书机制。


11.4 密钥轮换和吊销复杂

当某个密钥泄露后,需要考虑:

  • 如何吊销;
  • 如何更新;
  • 如何通知主机;
  • 如何兼容旧设备;
  • 如何防止攻击者继续使用旧密钥。

这些都需要在架构阶段提前设计。


12. 对称认证适合哪些场景

对称密钥认证适合:

  • 耗材认证;
  • 探头认证;
  • 电池认证;
  • 传感器模块认证;
  • 主机与固定外设认证;
  • 短报文完整性保护;
  • 成本敏感设备;
  • 低资源 MCU;
  • 离线认证场景。

尤其适合主机和设备关系比较固定的系统,例如:

主机 ↔ 耗材
主机 ↔ 探头
主机 ↔ 电池
主机 ↔ 传感器模块
主控 MCU ↔ 安全芯片

13. 不太适合哪些场景

对称认证不太适合:

  • 多个第三方都要验证设备;
  • 验证方不可信;
  • 主机容易被攻击者拿到并逆向;
  • 大规模开放生态;
  • 需要公开验证固件来源;
  • 需要跨组织信任链;
  • 需要强身份体系和证书链。

例如,固件升级包验证通常不推荐只依赖对称 MAC。

因为设备端如果保存验证密钥,一旦设备被破解,攻击者可能伪造升级包。

对于固件发布验证,更常见做法是:

发布方私钥签名
设备端公钥验证

也就是使用数字签名。


14. 工程注意事项

14.1 避免全局共享密钥

不要让所有设备使用同一把密钥。

应尽量做到:

一机一密
一耗材一密
一探头一密
一模块一密

14.2 密钥与设备身份绑定

派生密钥时应绑定设备唯一信息,例如:

Device_Key = HMAC-SHA256(Root_Key, Device_SN || Product_Type || Batch_ID)

这样可以避免不同产品线、不同批次之间密钥混用。


14.3 Challenge 必须随机且一次性

对称认证通常依赖挑战响应。

因此 Challenge 必须满足:

  • 由验证方生成;
  • 随机或不可预测;
  • 一次性使用;
  • 绑定当前会话;
  • 超时失效;
  • 成功或失败后都失效。

否则截获的 Response 可能被重放。


14.4 MAC 比对使用常量时间比较

验证 Response 时,不建议使用普通字符串比较函数。

应使用常量时间比较,避免因为提前退出导致时序泄露。


14.5 不要自己设计算法

不要自行设计类似下面的认证算法:

Response = CRC(Key + Challenge)
Response = Hash(Key + Challenge)
Response = Challenge XOR Key
Response = AES_Encrypt(Challenge) 的部分字节

工程上应使用成熟算法,例如:

  • HMAC-SHA256;
  • AES-CMAC;
  • 安全芯片提供的 MAC 认证接口;
  • 经过验证的密码库。

15. 工程总结

对称密钥认证适合资源受限、成本敏感、主机与设备关系固定的嵌入式场景。

它的核心优势是:

速度快、成本低、实现简单。

但它的核心风险是:

密钥一旦泄露,攻击者就可以伪造合法设备或合法报文。

因此,对称认证工程落地时必须注意:

  • 避免全局共享密钥;
  • 每台设备使用唯一派生密钥;
  • 父密钥只存在于 HSM 或安全系统中;
  • 设备端只保存派生密钥;
  • Challenge 必须随机、一次性、短时有效;
  • 密钥写入、调试口关闭、读保护和产线记录必须形成闭环。

简单来说:

对称认证不是难在算法,而是难在密钥管理。
一机一密、安全产线、密钥隔离,是对称认证能否真正安全的关键。

SSH加密连接三步原理:传输层、认证、通道全解析 SSH并非简单的远程登录协议,而是一套保障机密性、完整性、真实性和不可否认性的安全通信框架。其核心在于分阶段的加密协商机制:先通过密钥交换算法(如curve25519-sha256)建立前向保密的传输层隧道,再经公钥认证等模块化方式确认用户身份,最后在加密隧道上动态创建会话、端口转发或SFTP等逻辑通道。这一设计直接支撑git配置ssh密钥、vscode连接ssh远程服务器等高频开发实践,也决定了connection refused、host key verification failed等报错的本质是协议 阅读详情

相关推荐

搞懂车辆数字钥匙:ICCE和CCC标准到底差在哪?从密钥体系到定位技术一次说清

本文深度解析车辆数字钥匙技术中ICCE与CCC标准的核心差异,从密钥体系到定位技术进行全面对比。ICCE采用对称密钥和BLE定位,适合低成本快速部署;CCC则使用非对称加密和UWB/BLE混合方案,提供更高安全性及精度。文章还探讨了工程实现中的成本考量及未来技术演进方向,为开发者提供选型建议。

weixin_30512043的博客 184

对称密钥-学习笔记

对称加密、常见对称加密算法、分组密码模式、加密数据填充方法

weixin_41620902的博客 2860

密钥交换、数字签名与认证协议:构建安全通信的三大基石

在构建安全通信系统时,密钥交换、数字签名和认证协议是三个核心基础概念。密钥交换协议解决了在不安全信道上安全协商共享秘密的问题,其数学原理基于离散对数等计算难题。数字签名技术则利用非对称加密,为数据提供身份认证、完整性校验和不可否认性,是建立信任的关键。这些技术的核心价值在于为数据传输提供了机密性、完整性和身份验证保障,广泛应用于TLS/SSL、物联网安全、API认证等场景。本文聚焦于**前向保密**的实现与**RSA密钥交换**的替代方案,深入解析了如何通过临时密钥交换(如ECDHE)和强签名算法构建既安全

hideto 476

连接鉴权_读懂物联网⑧:5G安全之鉴权与密钥协商

5G即第五代移动通信网络,具有更快的速率,峰值速率期望提高10-20倍,更低的时延,协议空口环回时延降低1-10倍,更多的连接,连接密度期望能提高约10倍,除此之外,5G的安全性也全方位增加,增强了对用户唯一标识符的隐私保护,增强了归属网络对鉴权认证的控制,按需提供数据加密,扩大了对用户数据的保护面等等,这里我们就详细介绍5G的鉴权与认证环节。​5G鉴权的目的主要是实现终端和核心网之间的相互认证,...

weixin_36190910的博客 2641

SSH密钥登录实战指南:从ed25519生成到密码登录彻底禁用

SSH密钥认证是现代远程访问的基础安全机制,其本质是基于非对称加密的零知识证明,而非简单替代密码。原理上,服务端用公钥加密随机挑战,客户端以私钥签名响应,全程不传输私钥,杜绝凭证截获与重放风险。相比传统密码认证,它提供不可伪造性、抗暴力破解和强身份绑定等技术价值。广泛应用于云服务器管理、CI/CD自动化部署、多节点集群运维及DevOps流水线等场景。本文聚焦ed25519算法实践,覆盖密钥生成、安全分发、服务端加固、团队协作与生命周期管理,帮助工程师真正落地‘禁用密码登录’这一关键安全基线。

weixin_27875131的博客 321

Kerberos面试内容整理-会话密钥的协商与使用

Kerberos认证中的会话密钥机制确保了安全通信:由KDC临时生成并分发的会话密钥(客户端/TGS、客户端/服务器两种)仅在单次会话有效。长期密钥仅用于初始认证,避免直接传输;短期会话密钥则用于具体服务访问,即使泄露也不影响其他会话。KDC通过加密分发会话密钥,客户端和服务端通过认证器验证身份并建立加密通信。这种机制减少了协商开销,支持多种加密算法,在保证灵活性的同时最小化密钥泄露风险。

不务正业的猿 476

从Needham-Schroeder到Kerberos:密钥分配协议的进化史与实战启示

本文深入探讨了从Needham-Schroeder到Kerberos的密钥分配协议进化历程,分析了其设计哲学、安全缺陷及工业级应用。重点解析了Needham-Schroeder协议的核心机制与安全漏洞,以及Kerberos在分布式系统中的优化实践,为现代网络信息安全提供重要启示。

tomato的博客 937

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 956

密码学:一文读懂对称密钥体系

在介绍AES的加密模式之前,向量这个概念不得不先介绍一下:在密码学和加密领域,向量(IV)指的是初始化向量(Initialization Vector)。初始化向量是在使用块密码模式时,为了增加加密算法的安全性而引入的一组随机数或伪随机数。初始化向量引入了随机性,确保相同的明文块在使用相同密钥的情况下产生不同的密文块。这是为了防止同样的明文在不同位置生成相同的密文,增加了密码算法的安全性。在一些加密模式中,例如CBC(Cipher Block Chaining)模式,每个块的加密依赖于前一个块的密文。

Shujie 2787

多智能体强化学习中的Trust Region技术:HATRPO与HAPPO深度解析

本文深度解析多智能体强化学习中的Trust Region技术,重点探讨HATRPO(异质智能体信任区域策略优化)与HAPPO(异质智能体近端策略优化)两种先进算法。通过数学架构与工程实现细节,揭示其在解决联合策略空间爆炸、信用分配等挑战中的优势,并分享实际部署中的优化技巧与前沿进展。

weixin_29072299的博客 191

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 386

录音不上云也能变成文字:FunASR 语音识别从安装到跑通

会议录音在桌上躺了三天,30 多分钟,4 个人说了整整一上午,字幕还没补上。你回听一遍,眼睛先累,还老漏掉换人的那个瞬间——把"甲说的"打成"乙说的",纪要直接没法用。其实不用把录音丢给云端 API 按分钟计费,这事可以在自己的机器上办。 干这件事的,就是 FunASR——一个开源的语音识别工具箱。离线转写、语音转文字、说话人分离、标点恢复,它都收进一条流水线,全跑在你本地。这篇带你从装到跑通,

gitblog_00238的博客 488

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文详细介绍了如何使用Simulink搭建交流异步电机矢量控制模型,涵盖系统架构设计、关键模块实现、PI调节器参数整定及仿真分析等核心内容。通过实战指南和完整仿真文件,帮助读者掌握矢量控制技术,提升电机控制系统的设计与调试能力。

n4o5p6q7r的博客 251

IoT-For-Beginners 农场景观收官课:用对称密钥与 X.509 证书保护你的土壤监测 IoT 设备

本文是开源课程仓库 IoT-For-Beginners(12 周、24 课)中「数字农业」项目最后一课(`2-farm/lessons/6-keep-your-plant-secure`)的深度技术解析。你此前已经完成了一台土壤监测 IoT 设备并将其接入 Azure IoT Hub 云服务,本课将回答一个关键问题:**如何防止黑客劫持你的设备、伪造遥测数据、恶意操控你的自动灌溉系统**。读完本文

gitblog_00554的博客 370

Jetson Nano之CSI摄像头操作方法

jetson端csi摄像头的应用方法

ZONGXP的博客 1万+

Python爬虫实战:采集菜谱网站数据——以“下厨房”为例

随着互联网的发展,海量优质数据为各类应用提供了坚实基础。菜谱作为用户日常生活中需求极高的内容,丰富多样的菜谱数据不仅方便用户烹饪,也为美食推荐、营养分析等研究提供了数据支持。本文将围绕国内知名菜谱网站“下厨房”(https://www.xiachufang.com)展开,结合最新Python爬虫技术,详细讲解如何高效、规范地采集菜谱数据,包括菜谱名称、食材、步骤、评分、评论等丰富信息。全篇覆盖爬虫原理、框架选型、反爬应对、数据存储和简单分析,是学习爬虫实战的绝佳案例。菜谱标题作者信息菜谱图片。

2201_76125261的博客 1899

Hacker News API:3 个请求打通官方数据接口

假设你想在 HN 热榜出现异动时第一时间收到提醒,或者给 AI Agent 喂一份干净的技术语料。Hacker News API 是 Y Combinator 官方维护的公开数据接口,把站点上的故事、评论、用户资料以 JSON 形式放在 Firebase 上;它最大的吸引力是无需认证、也没有速率限制,curl 一下就能拿到数据。读完这篇文章,你能用三个请求跑通自己的第一条 HN 数据管道。 ##

gitblog_00413的博客 401

中国农业银行——轻量式云原生应用平台(轻云平台)

2021年10月,中国人民银行等联合发布了《关于规范金融业开源技术应用与发展的意见》(银办发〔2021〕146 号),规范金融机构合理应用开源技术,提高应用水平和自主可控能力,促进开源技术健康可持续发展。前期,为助力成员单位做好开源技术应用与发展工作,北京金融科技产业联盟开源专委会组织了金融业开源技术应用、创新等方面的案例征集,现对部分优秀案例进行宣传,发挥先进典型示范引领作用。申报单位:中国农业银行股份有限公司技术领域:云原生、无服务器架构(Serverless)、DevOps。

银行信息系统应用架构详解 2392

密码学-对称密钥的应用(四)

对称密钥的应用 实现保密性 链路加密与端到端加密 链路加密 在通信链路两端加上加密设备 每次分组交换都需要将消息解密,在交换节点暴露了信息的内容 整个网络需要维护的密钥数量庞大 接收者无法确定消息来源 用户对分组交换节点的安全性不能保证 端到端加密 由源主机加密用户数据,信息头以明文方式传送 密文经由网络传送到目的主机,目的主机与源主机共享一个密钥以便解密 但是信息头在传输过程中为明文,易受流量分析攻击 传输保密性 数据传输分析可以得到的信息类型 传输双方的标识(与谁通信) 信

huzai9527的博客 776

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

本文通过15个实战案例,系统讲解VSCode进行Python开发的环境配置、编码技巧、调试方法及性能优化,帮助初学者快速构建专业开发环境。

赶紧的博客 3761

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老 Mac 升级 macOS 最新版:OpenCore Legacy Patcher 五步保姆级教程

OpenCore Legacy Patcher 是一款免费开源的 Mac 系统升级工具,让官方已不支持的老 Mac 也能安装新版 macOS。这篇教程带你走通环境准备、制作启动盘、安装系统、打补丁的完整流程,新手照着做,就能让旧设备跑起最新系统。 ## 你的 Mac 为什么被系统更新拒之门外? 你是不是也遇到过这种情况:想给系统升个级,设置里却灰着一条"此 Mac 无法安装新系统"?硬件没坏、

gitblog_00012的博客 776

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMP1827认证流程

TMP1827 的认证流程通过硬件级安全机制和标准化算法,在高精度温度测量的同时提供可靠的设备身份验证,适用于对安全性和数据完整性要求较高的工业与物联网场景。TMP1827 作为集成 SHA-256-HMAC 认证引擎的高精度温度传感器,其认证流程旨在确保主机与传感器之间的安全通信,防止数据篡改和假冒设备接入。主机与传感器通过交换挑战值和哈希消息认证码(HMAC)完成双向身份验证,符合 FIPS 180-4 和 FIPS 198-1 标准。(如 128 位对称密钥),支持写保护和认证写保护模式。

dafurong的专栏 943

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMP1827认证的原理

TMP1827 的认证原理通过密码学算法、硬件安全设计和动态密钥管理的深度融合,在高精度温度测量的同时,为设备通信提供了端到端的安全防护,适用于对安全性和可靠性要求严苛的工业与医疗场景。:该实现符合 FIPS 180-4(SHA-256 标准)和 FIPS 198-1(HMAC 标准),适用于对安全性要求极高的场景。:每次认证时,密钥与随机挑战值、设备唯一 ID 混合,生成动态 HMAC 值,避免静态密钥暴露风险。:写入操作需通过额外的 HMAC 验证,确保只有通过认证的主机可修改配置数据。

dafurong的专栏 709

信息安全技术——(三)标识与认证技术

1.标识的概念 1.1概念 1.2分类 2.口令与挑战-响应技术 2.1概念 2.2面临的安全威胁 2.3经典口令方案 3.非公钥在线认证技术 3.1概念 3.2由验证者联系服务器 4.公钥认证技术 5.PKI技术 5.1概念 5.2PKI组成

m0_63853448的博客 1959

IPsec协议全面介绍:安全协议、封装模式与密钥交换

本文介绍IPsec VPN协议框架,主要从安全协议、封装模式、加密和验证算法、密钥交换方面介绍。

Mario_Ti的博客 1582

非对称密钥如何解决密钥配送难题:从RSA到TLS的四种经典方案

在信息安全领域,加密通信是保障数据机密性的核心技术。其核心原理在于通过算法将明文转换为密文,防止未授权访问。对称加密虽然高效,但面临密钥配送的根本性难题——如何在通信前安全地共享同一把密钥。非对称加密技术通过公钥和私钥的数学配对,为这一难题提供了革命性解决方案,实现了在不安全信道上的安全密钥协商。其技术价值在于奠定了现代安全协议的基石,使得HTTPS、SSH等广泛应用成为可能。本文聚焦于利用非对称密钥解决密钥配送问题的四种经典方案,涵盖从基础的公钥加密法到集成化的TLS握手协议,并结合**前向保密性**和*

weixin_33997389的博客 384
上一篇: MAC 消息认证码:同时验证来源和完整性
Let's Chat Coding
博客等级 码龄3年 1020粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值