谈谈嵌入式开发中签名校验和加解密作用的理解

news2024/12/28 20:47:30

1、前言

本博文不是讲解可信加签和固件加密的具体原理,而是谈谈实际嵌入式开发中,可信加签和固件加密的应用场景,可以帮助从事嵌入式开发的人员快速理解加签和加密的作用。

2、嵌入式开发中可信加签和固件加密介绍

(1)各家公司都有自己的可信加签和固件加密的方法,加密算法也不相同,有的是自己公司研发的,有的从专门做安全防护业务公司那里买的加密算法;
(2)可信验签和固件加密的原理不同,有的是靠软件,有的是靠硬件(芯片自带安全模块 或者 外接一块加解密芯片);
(3)除了维护可信加签和固件加密功能的开发人员,其他绝大部分开发人员是不需要了解可信加签和固件加密的底层原理,公司也不会随意开放这些代码权限给一般员工;
总结:绝大部分研发人员,只需要理解可信加签和固件加密的作用,能调用相关接口进行加签验签和加解密,不需要也没必要了解底层原理,花时间也不一定能搞清楚那些原理;

3、可信加签

3.1、可信加签的功能作用

(1)可信加签的作用体现在“可信”二字,也就是程序或者驱动是不是“可以信赖、安全可靠”的;
(2)可信加签有点类似于Windows的“数字签名”功能,你想要在Windows上安装驱动就必须先要去Windows官方进行认证,Windows官方认为驱动是安全的,才会让你安装这个驱动;
(3)在嵌入式产品中,出厂后一般程序就是固定的,出于安全和保密的考虑,是不希望让没有经过认可的程序和驱动在设备里运行,换句话说,希望设备里只能运行厂家自己的程序;
总结:可信验签能保证设备里运行的都是厂家自己的程序,能有效避免别有用心的人在设备上运行一些病毒程序;

3.2、实际场景分析

(1)在支持可信加签的设备里,想要在设备上运行程序或者驱动,必须对程序或者驱动进行加签,否则是不能在设备上正常运行的;
(2)如果你所在的公司开发的产品是支持可信验签功能,你可以尝试一下,直接将用交叉编译工具编译的程序拷贝到设备里,是不能正常运行的,会报“没有权限、验签失败之类”的错误;
(3)可信验签也用于设备升级,如果是没有进过加签的升级包是无法升级到设备里的;

3.3、实现原理浅析

(1)可信验签的实现原理主要包含两大部分:可信验签算法、程序运行或者驱动加载原理;
(2)可信验签算法:这个本人不熟悉,没有去仔细了解过,也不建议工作不相关的人去了解;
(3)程序运行或者驱动加载原理:这个需要了解内核如何运行elf格式的程序和加载ko驱动文件,这里简单说一下内核中的相关代码位置,内核运行elf格式程序是在fs/exec.c,加载驱动是在kernel/module.c,在运行elf格式程序、ko驱动文件时,先验签,验签通过才进行后续操作;
(3)这里可以简单介绍一下我了解过的一种可信加签的方法:加签就是加签算法根据文件内容在文件尾部追加固定字节的加签数据,内核在验签时就是去文件尾部读取固定字节的内容进行验签;

4、固件加密

4.1、固件加密的功能作用

(1)固件加密就是把文件从明文变成密文,如果你不知道解密的方法就是无法知道文件的内容;
(2)在嵌入式开发中,可以对各个分区内容进行固件加密,从分区中读取出来的内容要先进行解密才能正常解析出内容,这要求内核要支持解密操作;

4.2、实际场景分析

(1)对升级覆盖的分区内容进行加密,内核读取这些分区内容时先解密;
(2)每个分区都对应一个升级镜像文件,一般为.bin或者.img格式,在生成升级镜像时要进行固件加密;

5、可信验签和固件加密的比较

(1)可信加签:防止不是厂家的程序升级到设备中,或者在设备里运行;
(2)固件加密:防止厂家的升级镜像被未授权的人读取。分区内容一般都是以某种文件系统格式存在,如果没有固件加密,那别人拿到你的升级镜像,只需要烧录到他的设备里,然后按照相应的文件系统格式去挂载,这样就能解读出升级镜像里的内容;
总结:可信验签可以防止别人入侵,不是厂家的程序一概不让再设备上运行;固件加密可以防止别人解读厂家的程序和文件;

6、拓展

(1)可信加签和固件加密功能引入,会带来问题:谁来负责验签、解密?谁来负责对负责验签、解密的程序进行验签和解密?
(2)解决办法:用两级文件系统,内核先加载一级文件系统,一级文件系统主要负责加载验签和解密的驱动,内核加载一级文件系统是不进行验签和解密的;等加载好验签和解密的驱动后,去挂载二级文件系统,对二级文件系统就需要验签和解密;

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作受限的线性表——栈

本文主要内容:本文主要讲解栈的基本概念、基本操作和栈的顺序、链式实现。 目录 栈一、栈的基本概念1、基本概念2、基本操作 二、栈的顺序存储结构1、顺序栈的实现2、顺序栈的基本运算1)初始化2)判栈空3)进栈4)出栈5&a…

【环境配置】C/C++第三方库管理工具vcpkg安装和使用

一,vcpkg简介 vcpkg是微软公司开发的一个开源C包管理工具,它可以很方便的帮助您在 Windows、 Linux 和 MacOS 上下载,编译和安装C 第三方库。它具有自动解决依赖关系的能力,并且支持多种目标架构和平台。提供了超过1500个C库的预…

【Ubuntu系统内核更新与卸载】

【Ubuntu系统内核更新与卸载】 1. 前言2. 内核安装2.1 系统更新2.2 官网下载 3. 内核卸载3.1 需求分析3.2 卸载方法 1. 前言 我们在搭建环境时常常遇到内核版本不匹配的问题,需要我们安装新的内核版本;有时又会遇到在安装软件时报错boot空间已满无法安装…

Python爬取影评并进行情感分析和数据可视化

Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王&#xff1…

N - Cthulhu

第三次题组 [Cloned] - Virtual Judge (vjudge.net) 【题目描述】 一个具有 n 个顶点和 m 条边的无向图。现在,世界上最好的头脑即将确定这张图是否可以被视为克苏鲁。 为了简单起见,让我们假设克苏鲁从空间里看起来就像一个附有触手的球形身体。从形式…

sqlserver存储过程中使用临时表的问题

2023年6月6日08:52:15 因为最近接触的his系统一些存储过程做数据统计,一个存储过程就要使用1-3个临时表,这些存储过程是零几年的写得,和我们这个时代的写的存储过程习惯不太一样,就好奇为什么要使用这么多的临时表 临时表的基本概…

结构型设计模式05-组合模式

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 组合模式 1、组合模式介绍 组合模式(Composite Pattern),又叫部分…

Generator-Evaluator重排模型在淘宝流式场景的实践

除了相关性,复杂信息流推荐场景还需要兼顾多样的业务需求,包括打散(多样性),流量调控,多展示形态/多路供给融合等。传统推荐系统采用pipeline的形式,分步处理上述需求,缺少统筹优化&…

【博客650】irate适用于绘制细粒度灵敏图,但警惕用于告警

irate适用于绘制细粒度灵敏图,但警惕用于告警 1、irate解析 作用: irate(v range-vector) 函数用于计算区间向量的增长率,但是其反应出的是瞬时增长率。 原理: irate 函数是通过区间向量中最后两个两本数据来计算区间向量的增长…

C++表达式模板教程:从原理到应用的全面解析

C表达式模板教程 1. C表达式模板的引入 (Introduction to C Expression Templates)1.1 表达式模板的定义和作用 (Definition and Role of Expression Templates)1.2 表达式模板的历史和发展 (History and Development of Expression Templates)1.3 表达式模板在现代C中的地位 (…

java springboot VUE 在线学习平台系统开发mysql数据库web结构java编程计算机网页源码maven项目前后端分离

一、源码特点 springboot VUE 在线学习平台系统是一套完善的完整信息管理类型系统 前后端分离,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架 (MVC模式开发),系统具有…

005Mybatis返回值(ResultMap 一对多,多对多)

属性 id 应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以…

DevOps系列文章之 远程部署的一种方案

远程部署的一种方案 sshpass 一个简单、轻量级命令行工具,提供非交互式密码验证 原理 ssh 直接使用 TTY 访问,以确保密码是用户键盘输入的。 sshpass 在专门的 tty 中运行 ssh,以误导 ssh 相信它是从用户接收到的密码使用 sshpass 是不安…

深入理解HashMap源码

文章目录 HashMap简介源码分析关键参数获取数组下标put方法resize扩容过程jdk1.7的扩容实现jdk1.8的扩容实现 get()方法remove()方法 总结 关于HashMap,一直都是一个非常热门的话题,只要你出去面试,一定少不了它! 本文主要结合 JD…

English Learning - L3 作业打卡 Lesson5 Day35 2023.6.8 周四

English Learning - L3 作业打卡 Lesson5 Day35 2023.6.8 周四 引言🍉句1: Publishers know that some people are self-conscious about what they read on public transport and so they put out different versions of a cover.成分划分弱读连读爆破语调 &#x…

实现表白墙

我们已经学习了Http以及Servlet类的相关知识 今天我们来实操一下,实现一个简单的既有前端又有后端的网站–表白墙 之前在学习前端的时候已经写过了表白墙的前端代码,存在两个问题 1.页面重启,数据丢失 2.数据只是在本地的,别人看不见 那么这样的问题我们要咋样解决呢? 引入…

黑马Redis视频教程高级篇(二:多级缓存)

目录 一、什么是多级缓存? 二、JVM进程缓存 2.1、导入案例 2.2、初识Caffeine 2.3、实现JVM进程缓存 2.3.1、需求 2.3.2、实现 三、Lua语法入门 3.1、初识Lua 3.2、HelloWord 3.3、变量和循环 3.3.1、Lua的数据类型 3.3.2、声明变量 3.3.3、循环 3.4…

Hadoop | 好用的脚本分享

知识目录 一、写在前面✨二、一键安装HA🍭三、Hadoop一键启动🔥四、一键启动可视化工具🍭五、结语🔥 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 🏠 个人主页&a…

2023版一线大厂Java面试八股文(最新版)1000+ 面试题附答案详解,最全面详细

Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。…

Python爬虫之Scrapy框架系列(21)——重写媒体管道类实现保存图片名字自定义及多页爬取

目录: 重写框架自带媒体管道类部分方法实现保存图片名字的自定义:1.爬虫文件:2.items.py文件中设置特殊的字段名:3.settings.py文件中开启自建管道并设置文件存储路径:4.编写pipelines.py5.观察可发现完美实现&#xf…