嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识,这些在嵌入式软件开发中也同样会用到。

1 信息安全

1.1 信息安全的基本要素

  • 保密性:确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。
  • 完整性:保证数据传输过程中是正确无误的,接收和发送的数据相同,不被篡改。包括安全协议、校验码、密码校验、数字签名、公正等手段。
  • 可用性:保证合法的用户能以合法的手段来访问数据,不会被拒绝。
  • 可控性:控制授权范围内的信息流向及行为方式,整个网络处于可控状态。
  • 不可抵赖性:信息数据的参与者不能否认自己发送的数据,参与者身份真实有效。

1.2 安全攻击与威胁

  • 被动攻击:不直接影响通信内容,如监听、窃取。
  • 主动攻击:直接影响通信内容,如中断、篡改、伪造、拒绝服务(DOS)等。

2 加密

2.1 加密基本概念

  • 明文:实际传输的真正数据
  • 密文:经过加密后的数据
  • 加密:将明文转换为密文的过程
  • 解密:经密文转换为明文的过程
  • 加密算法:一般是公开的,包括两大原则:
    • 代换:转换成完全不同的其它数据
    • 置换:打乱明文顺序,进行重新置换
  • 密钥:加密和解密过程中使用的密码

2.2 对称加密

对称加密是指加密和解密的密钥是相同的,属于不公开密钥的加密算法。其缺点的加密强度不高,且密钥分发困难。

对称加密算法描述
DESDES(Data Encryption Standard),即数据加密标准,通过替换+位移,使用56位密钥,64位数据块,速度快,密钥易产生。
3DES即三重数据加密算法,是一种对称密钥加密块密码,相当于是对每个数据块应用三次数据加密标准(DES)算法。
AESAES(Advanced Encryption Standard),是美国联邦政府采用的一种区块加密标准。
RC-5RC5的主要特性是很快,只是用基本的计算机运算(加、异或、移位等),轮数可变,密钥位数可变,从而大大增加灵活性。
IDEAIDEA(International Data Encryption Algorithm),即国际数据加密算法,使用128位密钥,64位数据块,比DES的加密性好,对计算机功能要求相对低。

2.3 非对称加密

非对称加密是指加密和解密的密钥是不同的,信息传递双方都拥有自己的公钥和私钥,用对方的公钥加密,用自己的私钥解密。

公钥只能用做数据加密,公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。

非对称加密算法描述
RSARSA加密算法是由罗纳德·李维斯特(Ronald Linn Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德尔曼(Leonard Adleman)于1977年共同发明的。使用1024或512位密钥,计算量极大,难破解。
ElGamalElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。
ECCCC(Ellipse Curve Ctyptography),是一种基于椭圆曲线数学的公开密钥加密算法。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。ECC可以使用更小的密钥并提供相当高等级的安全。ECC164位的密钥相当于RSA1024位密钥提供的保密强度,且计算量较小,处理速度更快,存储空间和传输带宽占用较少。

3 信息摘要

信息摘要,是指一段数据的特征信息,当数据发生变化时,信息摘要也会发生改变。

信息传递时,发送方将数据和对应的信息摘要一起发送,接收方收到后,根据收到的数据重新生成一个信息摘要,若与收到的摘要相同,则说明数据正确。

信息摘要由哈希函数生成。

摘要算法特点
MD5(Message-Digest Algorithm)产生128位的输出
SHA-1(Secure Hash Algorithm 1)产生160位的输出,安全性更高

虽然通过信息摘要,可以判断数据有没有被篡改,但仍然会存在的问题是:如果发送方的数据和摘要都被篡改了,那么接收方拿到错误的数据生成的摘要也和篡改的摘要相同,接收方就无法判断接收的数据是否正确了。

4 数字签名与数字证书

4.1 数字签名

数字签名用于验证发送方是否合法。

数字签名的基本原理是:

  • 若发送方需要发送数据,应使用发送方的私钥进行数字签名
  • 因为公钥是可以共享的,发送方将自己的公钥发送给接收方
  • 接收方使用发送方的公钥对接收的数据核实签名,则可验证数据发送方的身份

另外,由上述示意图可以看出,数字签名技术与非对称加密技术使用公钥和私钥的过程正好是相反的。

当数字签名和信息摘要合用后,就能保证数据不会产生错误。

  • 数字签名确定了唯一的发送方,如果被篡改,数字签名肯定错误
  • 若签名无误,则数据未被篡改,然后根据信息摘要,确定数据的完整性

4.2 数字证书

数字证书指的是互联网通信中,标志通信各方身份信息的一个数字认证,用于识别对方的身份。

数字证书由用户申请,证书签证机关CA(Certificate Authority)对其核实签发,是对用户公钥的认证。

每一个发送方都要先向CA申请数字证书,数字证书是经过CA数字签名的,即CA使用私钥加密。当发送方要发送数据时,接收方首先下载CA的公钥,来验证数字证书的真伪,如果是真的,就能保证发送方是真的,因为CA是权威机构,会确保合法性。

5 总结

本篇介绍了信息安全的基础知识,以及数据加密相关的基础知识,包括加密的分类,信息摘要,数字签名与数字证书等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让GPT成为您的科研加速器丨GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。​2、数据可视化…

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 使用二分查找的方式,分左右端进行查找。首先使用二分找到左端的端点下标,然后在使用二分找到右端的端点下标。 注意事项 求mid注意事项 在使用二分找左端…

jvm 程序计算器 程序计数器是否溢出 程序计数器是做什么的 java程序计数器会内存溢出吗 程序计数器作用与用处 jvm内存模型 jvm合集(一)

1. jvm内存模型: 内存模型: 程序计数器 堆 栈 本地方法栈 方法区 2. java代码编译为class文件,由类加载器加载到jvm,然后由解释器,jit即时编译到机器码,机器码再到cpu执行 3. 程序计数器: 是一块较小的内存…

记录一次IDEA非法字符‘\ufeff‘报错

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 报错以及Bug ✨特色专栏: …

Hadoop生态之hive

一 概述与特点 之所以把Hive放在Hadoop生态里面去写,是因为它本身依赖Hadoop。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能。 其本质是将 SQL 转换为 MapReduce/Spark 的任务进行运算,底层由 HDFS 来提供…

[uniapp]踩坑日记 unexpected character > 1或‘=’>1 报错

在红色报错文档里下滑&#xff0c;找到Show more 根据提示看是缺少标签&#xff0c;如果不是缺少标签&#xff0c;看看view标签内容是否含有<、>、>、<号,把以上符合都进行以<号为例做{{“<”}}处理

动态表单设计

动态表单设计 背景方案讨论基于上面分析&#xff0c;对比调研&#xff0c;自定义动态表单数据模型表单详解&#xff08;一&#xff09; 表单模板&#xff1a;jim_dynamic_form&#xff08;二&#xff09;表单数据类型&#xff1a;jim_form_data_type&#xff08;三&#xff09;…

基于SSM的学生公寓管理中心系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言&#xff0c;而且每个版本的新功能ui都有很多地方需要多语言&#xff0c;如果手动添加非常耗时&#xff0c;于是设计了一个python脚本&#xff0c;通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…

DevOps到底是什么意思?

前言: 当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念。那么,到底什么是"DevOps"呢? 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学…

MySQL的权限管理与远程访问

MySQL的权限管理 1、授予权限 授权命令&#xff1a; grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名用户地址 identified by ‘连接口令’; 该权限如果发现没有该用户&#xff0c;则会直接新建一个用户。 比如 grant select,insert,delete,drop on atguigudb.…

淘宝销量展示方式变更背后的逻辑

淘宝销量展示方式发生了调整&#xff0c;平台于8月16日将商品详情销量展示表达由【月销**件】全部换成展示【已售**件】&#xff0c;将30天销量改成了近365天销量。 【已售**件】统计口径&#xff1a;统计近365天支付的商品件数&#xff0c;数据更新请关注24-48小时。其中涉及销…

Prometheus+Grafana可视化监控【主机状态】

文章目录 一、介绍二、安装Prometheus三、安装Grafana四、Pronetheus和Grafana相关联五、监控服务器状态六、常见问题 一、介绍 Prometheus是一个开源的系统监控和报警系统&#xff0c;现在已经加入到CNCF基金会&#xff0c;成为继k8s之后第二个在CNCF托管的项目&#xff0c;在…

UG\NX二次开发 获取曲面uv中心点 UF_MODL_ask_face_props

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 获取曲面uv中心点 UF_MODL_ask_face_props。 效果: 代码: #include "me.hpp"void AskFaceMidpoint() {//选择面tag_t face …

win11无法加载文件,因为在此系统上禁止运行脚本

问题背景&#xff1a; 最近升级了windows11&#xff0c;文件右键打开终端&#xff0c;默认是使用的powershell。 后面安装npm包依赖的时候&#xff0c;遇到了无法加载文件&#xff0c;因为在此系统上禁止运行脚本。 提示中可以通过访问链接查看&#xff1a;https:\go.micros…

Java复习-25-单例设计模式

单例设计模式 目的&#xff08;使用场景&#xff09; 在实际开发下&#xff0c;会存在一种情况&#xff1a;某一种类在程序的整个生命周期中&#xff0c;只需要实例化一次就足够了。例如&#xff0c;系统数据类&#xff0c;由于操作系统只有一个&#xff0c;因此在程序初始化…

MATLAB入门-矩阵的运算

MATLAB入门-矩阵的运算 本篇文章为学习笔记&#xff0c;课程链接为&#xff1a;头歌 相关知识 常见的矩阵运算有算术运算、关系运算和逻辑运算。MATLAB中的所有变量都是以矩阵的形式存储的&#xff0c;单个变量就相当于一个1*1的矩阵。 算术运算 下面展示的是常见的矩阵之…

vue3:22、vue-router的使用

import { createRouter, createWebHistory } from vue-router//history模式&#xff1a;createWebHistory //hash模式&#xff1a;createWebHashHistory//vite中的环境变量 import.meta.env.BASE_URL 就是vite.config.js中的base配置项 const router createRouter({history:…

C高级Day5

课后作业&#xff1a; rootlinux:~/shell# cat qh.sh #!/bin/bash function sum_array() {local brr($*) local sum0for i in ${brr[*]} dosum$((sum i))doneecho $sum } arr(1 2 3 4 5) result$(sum_array ${arr[*]}) echo "数组的和为: $result"#!/bin/bash fun…

上位机编程 VS 嵌入式编程:哪个更有前途?揭秘行业发展秘密

上位机和嵌入式是计算机的两个具体应用领域&#xff0c;它们在语言、工具和应用方面存在一定的差异。上位机更加注重高层逻辑和抽象&#xff0c;提供了多种语言和工具供开发者选择。而嵌入式开发通常局限于使用C语言&#xff0c;并且在过去甚至需要使用汇编语言&#xff0c;开发…