汽车信息安全--TLS,OpenSSL

目录

TLS相关知识

加密技术

对称加密

非对称加密

数字签名和CA

信任链

根身份证和自签名

双方TLS认证

加密和解密的性能


TLS相关知识

加密技术

TLS依赖两种加密技术

1. 对称加密(symmetric encryption)

2. 非对称加密(asymmetric encryption)

对称加密

对称加密的一方用秘钥 K 给文本 M 加密;另一方用同一个秘钥K对密文C进行解密:

C = E(M, K)
M = D(C, K)

痛点: 很有可能有人窃听到密钥 K,窃听者就可以假扮双方中的任何一 方与另一方通信。这叫中间人攻击

非对称加密

非对称加密利用成对的两个秘钥:K1 和 K2。

其中一个加密文本,另一个解密文本:

C = E(M, K1)
M = D(C, K2)

双方中的一方可以生成 K1和K2,然后把其中一个秘钥 (比如K1)私藏,称为私钥;另一个(比如K2)公开,称为公钥

另一 方得到公钥之后,双方就可以通信。

痛点:中间人还是可能截获公钥 K2,然后自己弄一对秘钥(K1‘, K2’)。这样中间人每次可以用截获的 K2 解密发送文本得到明文(甚至可能修改文本),再用 K1‘ 加密了发出去;接收方用 K2’ 解密接收得到的是被中间人篡改后的文档。

用OpenSSL工具生成密钥对的例子:

//OpenSSL的genrsa命令生成一个2048 bit的公钥私钥对,输出到文件server.key里:openssl genrsa -out server.key 2048//server.key是PEM格式的:

数字签名和CA

为了确定得到的公钥不是中间人伪造的 K2‘,*数字签名(digital signature)*技术应运而生。

数字签名的做法是:

  1. 发送方把自己的公钥和ID(身份证号码,或者域名)合为身份证申请(certificate signing request,CSR)
  2. 把CSR发给权威机构CA(被称为 certificate authority,CA),
  3. CA用自己的私钥加密 CSR,得到的密文被称为数字签名(digital signature)
  4. CA把 数据签名 和 CSR 的明文合在一起称为 CA签署的身份证(CA signed certificate,CRT),发给发送方,
发送方:CSR = 公钥 + 域名
signature = E(CSR, CA的私钥)
CRT = CSR + signature

用OpenSSL生成CSR的例子:

//以下OpenSSL的req命令, 以上文中的 server.key 为输 入,生成一个身份证申请(CSR)文件 server.csropenssl req -nodes -new -key server.key -subj "/CN=localhost" -out server.csr//这个 CSR 里的公钥是从 server.key 里提取出来的,域名是 localhost。

用OpenSSL签署 CSR的例子:

//以下OpenSSL的x509命令用指定的私钥 server.key 签署 server.csr,输出身份证 server.crt:openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt//server.crt也是PEM格式的

当接收方和发送发通信时(建立HTTPS连接),发送发出示CA签署的身份证。 接收方是在自己机器上安装了CA的身份证的,

  1. 从CA的身份证中的CSR里提取出CA的公钥;
  2. 然后用CA的公钥解密发送方身份证中的signature,得到发送方的CSR';
  3. 如果这个CSR'和发送方身份证中的CSR明文一致,则说明发送方是CA权威认证的。
接收方:CA的公钥 = CA的CRT.CSR.CA的公钥
CSR' = D(CRT.signature, CA的公钥)
if CSR' == CRT.CSR then OK

信任链

CA如果担心没有人信任自己是个好 CA,可以找一个大家都信的 CA’,用CA‘的私钥在CA的身份证上签名:

CA:CSR = CA的公钥+CA域名
signature = E(CSR, CA’的私钥)
CRT = CSR + signature

如果浏览器或者操作系统里安装了CA‘的公钥则可以验证“CA的身份证是CA’确认并且签名过的。

这样,CA在签署发送方的身份证的时候,可以在发送方身份证后面附上自己的身份 证。

当接收方和发送方通信的时候:

  1. 接收方会先要求发送方出示自己的身份证;
  2. 接收方虽然不信任CA,但是信任CA‘,所以接收方可以用CA’的身份证里的CA‘的公钥来验证CA的身份证,于是就可以信任CA了;
  3. 然后接收方用CA身份证里的公钥验证发送方的身份证。

从而形成了一条信任链(trust of chain)chain。

根身份证和自签名

信任链总会有个顶端,被称为根身份证(root CA)。那么根身份证是谁签名 的呢?答案是:自己签名。实际上,我们每个人都可以自己签名认证自己的身份 证,得到自签名的身份证(self-signed certificate)。具体过程是:

  1. 生成一对秘钥:公钥 K2 和私钥 K1,
  2. 创建自己的 CSR,
  3. 用自己的秘钥加密CSR得到signature,然后把CSR明文和signature一起发布。

任何人只要信任我们自签名的身份证 CRT,也就可以用 CRT.CSR.K2 作为公钥加 密要传递给我们的文本。我们可以用自己的私钥 K1 来解密文本。

双方TLS认证

上述解释了通信的一方如何验证另一方的身份。这种情况的一个常见应用是: 我们通过浏览器访问银行的网页。这里的关键是,我们要能验证银行的身份证, 然后才敢于在网页里输入账号和密码。浏览器验证银行的身份证的过程如下:

  1. 在浏览器和银行的HTTPS服务建立安全连接的过程中,银行的HTTPS服务会把 它的身份证发给浏览器showcerts;
  2. 浏览器使用内置的CA的身份证来验证银行的身份证。

浏览器验证了银行的HTTPS服务的身份之后,就轮到银行验证浏览器的用户的身份了:

  1. 浏览器展示银行HTTPS服务发来的登陆页面;
  2. 用户在这个页面里输入账号和密码,银行的HTTPS服务由此验证用户的身份。

在这个过程中,银行HTTPS服务器的身份是通过TLS身份证来验证的。而我们(用 户)的身份是通过我们输入的账号和密码来验证的。

有时通信的双方都是程序(而不是人)。此时,让一方输入账号和密码,不如让 双方都通过TLS身份证来互相验证方便。尤其是在很多分布式系统里,有多种类 型的程序互相通信,而不只是两方通信。

比如在 Kubernetes 机群里,不光操作机群的客户端程序 kubectl 要能验证 Kubernetes master node(具体的说是 apiserver)的身份,才能放心地把包括 敏感信息(比如数据库密码)的计算作业提交给 apiserver。类似的, apiserver也要能验证 kubectl 的身份,以确认提交作业的是公司的合法雇员, 而不是外贼sign。

为此,通信各方都需要有各自的身份证。一个公司可以自签名一个CA身份证,并 且用它来给每个雇员以及每个程序签署身份证。这样,只要每台电脑上都预先安 装好公司自己的CA身份证,就可以用这个身份证验证每个雇员和程序的身份了。 这是目前很多公司的常用做法。

加密和解密的性能

因为TLS模式下所有传输的数据都是加密的,大家会关注加密和解密的性能。客观的说,非对称加密技术的加密和解密比较慢,相对来说,对称加密技术的加密 解密过程更快。所以实际的连接和握手过程中,通信双方会协商一个对称加密秘钥,之后的数据通信过程中的加密都是利用对称加密技术来实现的。

具体的做法是:握手的时候,双方各自生成一个随机数,并且以非对称加密的方式 分享给对方。然后每一方都把自己的随机数和对方的随机数拼起来,就是接下来 通信时候使用的对称加密方法的秘钥了。

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

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

相关文章

深入理解 Linux Zero-copy 原理与实现策略图解

用户态和内核态 一般来说,我们在编写程序操作 Linux I/O 之时十有八九是在用户空间和内核空间之间传输数据,因此有必要先了解一下 Linux 的用户态和内核态的概念。 从宏观上来看,Linux 操作系统的体系架构分为用户态和内核态(或者…

SourceCodester v1.0 SQL 注入漏洞(CVE-2023-2130)

前言 CVE-2023-2130是一个影响SourceCodester Purchase Order Management System v1.0的SQL注入漏洞。此漏洞的存在是由于应用程序未能正确过滤和验证用户输入,使得攻击者可以通过SQL注入来执行任意SQL命令,从而对数据库进行未授权的访问和操作。 在利…

【大数据面试题】38 说说 Hive 怎么行转列

一步一个脚印,一天一道大数据面试题 博主希望能够得到大家的点赞收藏支持!非常感谢 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! 行转列 假设我们有一张名为 sales_data 的表,其中包含…

15Kg级无人机降落伞系统技术详解

15Kg级无人机降落伞系统由以下几个主要部分组成: 1. 降落伞主体:采用轻质高强度的材料制成,能够承受无人机在降落过程中产生的冲击力,并确保无人机平稳安全地着陆。 2. 伞绳与连接机构:伞绳负责连接降落伞主体与无人机…

nginx虚拟主机配置项

50x和40x配置 error_page 500 502 503 504 /50x.html; location /50x.html {root html; }error_page 404 /404.html; location /404.html {root html; }URL重写配置(例如隐藏) location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s/$1 last;break;}index…

1-2、truffle与webjs亲密接触(truffle智能合约项目实战)

1-2、truffle与webjs亲密接触(truffle智能合约项目实战) 5,web3调用智能合约6,Ganache 5,web3调用智能合约 在前面已经完成简单的合约编写 使用web3调用此函数 Web端的代码使用web3进行智能合约的访问 首先在cmd以…

使用9种方法隐藏和显示元素

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>使用9种方法隐藏和显示元素</title><sty…

火影评论词云图

背景介绍 词云图(Word cloud)又称文字云,是一种文本数据的图片视觉表达方式,一般是由词汇组成类似云的图形,用于展示大量文本数据。 我收集了豆瓣网站上火影博人传下方的网友评论&#xff0c;以评论为数据基础制作了词云图。 准备工作 安装两个模块&#xff1a;词云模块和结…

verilog行为建模(四):过程赋值

目录 1.两类过程赋值2.阻塞与非阻塞赋值语句行为差别举例13.阻塞与非阻塞赋值语句行为差别举例24.阻塞与非阻塞赋值语句行为差别举例35.举例4&#xff1a;非阻塞赋值语句中延时在左边和右边的差别 微信公众号获取更多FPGA相关源码&#xff1a; 1.两类过程赋值 阻塞过程赋值执…

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记&#xff08;上&#xff09; 参考&#xff1a;pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页&#xff0c;网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…

网易易盾图标点选验证码识别代码

简介 网易图标点选一直都是一个大难题&#xff0c;如上图所示。难点之一是图标变幻莫测&#xff0c;很难刷出有重复的图标&#xff0c;所以使用传统等等方式去标注、识别具有较大的难度。 经过我们大量的数据标注&#xff0c;终于完成了这款验证码的识别。 目前我们提供两种识…

Shell程序设计

各位看官&#xff0c;从今天开始&#xff0c;我们进入新的专栏Shell学习&#xff0c;Shell 是操作系统的命令行界面&#xff0c;它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh&#xff0c;它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…

昇思25天学习打卡营第5天 | 数据集

在探索MindSpore深度学习框架中的数据集处理过程&#xff0c;我对其数据加载和处理流程有了深入的了解。MindSpore提供了一套功能强大的工具&#xff0c;可以有效地处理和转换数据&#xff0c;确保了数据预处理的效率和质量。以下是我从本次学习中得到的几点主要心得&#xff1…

[算法题]重排字符串

题目链接: 重排字符串 首先找出出现次数最多的字符和其出现次数, 如果该字符的出现次数大于 (字符串的长度 1) / 2, 那么该字符串必然不能重排, 如果该字符的出现次数小于等于 (字符串的长度 1) / 2, 是可以重排的, 重排方式如下图所示: 先以间隔的方式将出现次数最多的字符…

MRD、BRD、PRD

MRD、BRD、PRD是产品开发过程中不同的文档类型&#xff0c;‌它们各自具有特定的目的和内容&#xff0c;‌以支持产品从概念到实现的各个阶段。‌ MRD&#xff08;‌Market Requirement Document&#xff09;‌&#xff0c;‌即市场需求文档&#xff0c;‌侧重于市场和用户需求…

宇航人今年部分瓶装饮料铅浓度超标,采购成本连年大增

《港湾商业观察》廖紫雯 日前&#xff0c;内蒙古宇航人沙产业股份有限公司&#xff08;以下简称&#xff1a;宇航人&#xff09;递表港交所&#xff0c;保荐机构为中银国际&#xff0c;宇航人国内运营主体为内蒙古宇航人高技术产业有限责任公司、内蒙古宇航人沙产业股份有限公…

【SASS/SCSS(三)】样式的复用与动态计算(@mixin和@function)

目录 一、mixin 1、定义复用的样式代码&#xff0c;接受传参&#xff0c;搭配include使用。 位置传参 关键词传参 ...语法糖接受传入的任意参数 2、在mixin中使用content&#xff0c;获取外部对mixin的追加内容 二、function 三、字符串——值得注意的点 很多时候&#…

Python酷库之旅-第三方库Pandas(037)

目录 一、用法精讲 116、pandas.Series.div方法 116-1、语法 116-2、参数 116-3、功能 116-4、返回值 116-5、说明 116-6、用法 116-6-1、数据准备 116-6-2、代码示例 116-6-3、结果输出 117、pandas.Series.truediv方法 117-1、语法 117-2、参数 117-3、功能 …

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

原来隐藏一个DOM元素可以有这么多种方式,最后一种你肯定不知道

我们在日常编码的时候&#xff0c;隐藏一个 dom 元素有很多种方式&#xff0c;今天我们来盘点一下隐藏 dom 元素有哪些方式&#xff0c;最后一种&#xff0c;你绝对没有用过。 display: none 作为经常用来隐藏元素的 css 属性&#xff0c;display: none 相信大家并不陌生&…