【安全】基础概念梳理-基本加密方式、数字签名、证书

一、两种基本加密方式

1.1 对称加密

        对称加密是指双方持有相同的密钥进行通信,加密速度快。常见的对称加密算法有DES、3DES、AES等。存在问题:通信双方如何获得相同的密钥?

1.2 非对称加密

        非对称加密,又称为公开密钥加密,是为了解决对称加密中的安全问题而诞生,一个称为公开密钥(public key),即公钥,另一个称为私钥(private key),即私钥。相对于对称加密来说,其加密速度很慢。

  • 公钥(public key)是对外开放的,私钥(private key)是自己拥有的。
  • 公钥(public key)加密的数据,只能用私钥(private key)解密。
  • 私钥(private key)加密的数据,只能用公钥(public key)解密。

二、如何使用两种基本加密方式保证数据安全

2.1 数据安全的类型

        现在信息传输中,需要保证三类数据传输安全:

        a. 数据的保密性:即保证数据即使被窃听,hacker也无法获取信息内容;

        b. 数据的完整性:即保证数据不会中途被hacker修改

        c. 身份认证:即保证接收的数据来源可信,不是hacker冒充发送的。

2.2 数据保密性 

        解决方法:对称加密+非对称加密

        为保证数据的保密性,可以使用对称加密或非对称加密。使用对称加密,速度相对非对称加密很快,但是存在一个安全问题,密钥如何传递?

        由此通用的方法是使用非对称加密+对称加密来完成,即用非对称加密方式传输对称加密的密钥,利用对称密钥进行数据传输。具体过程为:客户端使用公钥对对称加密的密钥进行加密,然后传递给服务端,服务端使用私钥进行解密确认密钥。两端开始对称加密的传输数据。

2.3 数据完整性

        解决方法:散列算法+非对称加密

        数据传输的途中,数据有可能被第三方劫持篡改。为了防止这种情况的通用方法是使用散列算法如SHA1,MD5等。使用散列算法将传输内容hash一次获得hash值(即摘要)。客户端使用服务端的公钥摘要和信息内容进行加密,然后传输给服务端,服务端使用私钥进行解密获得原始内容和摘要值,这时服务端使用相同的hash算法对原始内容进行hash,然后与摘要值比对,如果一致,说明信息是完整的。

2.4 身份识别(数字签名)

        解决方案:证书(私钥公用)

        为了保证数据安全性,在接收到数据后,接收方需要验证数据的发送方的身份。通用方法是把发送端的公钥发送给接收端,发送端通过把自己的内容使用私钥加密然后发送给接收端,接收端只能用发送端的公钥解密,自然就验证了发送端的身份。

 进阶思考:

        在保证数据保密性、完整性、来源确定的时候,都需要互相持有对方的公钥。为保证数据保密性,数据发送方要有接收方的公钥;为保证完整性,数据发送方要有接收方的公钥;身份识别的时候,数据接收方要有发送方的公钥。

        这就引出一个问题,这个公钥要如何传输到对方的手中?如果在传输公钥的过程中,公钥被劫持,第三方就能伪造一对公私钥,在接收方这里伪装发送方,在发送方这里伪装接收方。为了避免这种情况,引出数字证书。

三、数字证书

3.1 数字证书的作用与内容

        数字证书是由权威容的CA(Certificate Authority)机构颁发给服务端(数据发送方)。CA机构通过服务端(发送方)提供的相关信息生成证书,证书内容包含了持有人的相关信息服务器的公钥签署者签名信息(数字签名,即用私钥加密,保证这个信息真的来自签署者)等。

        但是证书也是可以伪造的,如何保证证书为真呢?

        一个证书中含有三个部分:"证书内容,散列算法,加密密文"。证书内容会被散列算法hash计算出hash值,然后使用CA机构提供的私钥进行RSA加密。过程如下图:

当客户端(接收方)发起请求,要客户端(发送端)的公钥的时候,服务器将该数字证书发送给客户端,客户端通过CA机构提供的公钥对加密密文进行解密获得散列值(数字签名),同时将证书内容使用相同的散列算法进行Hash得到另一个散列值,比对两个散列值,如果两者相等则说明证书没问题。

3.2 数字证书分类

一些常见的数字证书类型:

  • X.509#DER 二进制格式证书,常用后缀.cer .crt
  • X.509#PEM 文本格式证书,常用后缀.pem
  • 有的证书内容是只包含公钥(服务器的公钥),如.crt、.cer、.pem
  • 有的证书既包含公钥又包含私钥(服务器的私钥),如.pfx、.p12

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

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

相关文章

【坑】云相关

1. NAT NAT(Network Address Translation,网络地址转换:当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密&…

Pycharm 2019 添加 docker 解释器

打开docker的tls 点击设置: 搜索docker, 添加: 点击解释器选项 添加 选择docker 这里说缺少映射, 先不管 接下来, 创建一个新项目, 在选择解释器的时候, 如果选择刚刚添加的, 会报错, 先选一个能用的, 进到项目再换 在右下角的解释器小部件, 选择我们刚刚添加的 然后就可以正常…

【待补】Wireshark+BLE dongle: BLE数据包捕获以及分析

文章目录前言1. 捕获BLE数据包2. 分析BLE数据包2.1 过滤掉不感兴趣的BLE数据包2.2 利用Wireshark内嵌工具生成图表前言 硬件:Nordic 52840 dongle 软件: Wireshark 1. 捕获BLE数据包 待补充。 2. 分析BLE数据包 2.1 过滤掉不感兴趣的BLE数据包 以自…

js动态添加div

问题 有没有遇到过这样的需求, 在页面上会有不定个input, 点击添加按钮就添加 每次写这玩意好麻烦啊, 把他封装起来, 需要的时候调用就好了 思路 因为每个input标签的name如果相同的话, 在后端接收的时候会出错, 所以我的解决办法就是在name后加上一个数字, 后端用一个循环进…

【5G入门】MCS调制编码方案简介

​ 目录参考资料:1. MCS简介MCS是什么如何选择MCS有哪些MCS可供选择如何配置MCS示例参考资料: 链接: 5G NR Modulation and Coding Scheme – Modulation and Code Rate. 1. MCS简介 MCS是什么 MCS(Modulation and Coding Scheme&#xf…

caffe初体验

caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊. 在安装完caffe, 我的第一个想法就是, 别管他是个啥东西, 总得先让我运行一些看一看吧. 刚好, 官方就准备了一些数据, 供我们运行一下看一看使用. 因为我是通过dock…

【安全】进阶的Mosquitto:搭建一个安全的MQTT服务

目录一、基础版Mosquitto安装及运行Mosquitto安装Mosquitto运行二、基础安全版Mosquitto安装及运行(需要输入密码)Mosquitto安装Mosquitto配置Mosquitto测试效果三、安全版Mosquitto安装及运行Mosquitto安装TLS安装Mosquitto配置Mosquitto测试效果注意一…

PHP 循环引用的问题

问题 为了引出问题, 先来看下面一段代码: <?php $arr [a, b,c, d, ];foreach ($arr as &$each){echo $each; } echo PHP_EOL; foreach ($arr as $each){echo $each; }这段代码很简单, 输出数组的元素两次, 感觉会输出两次 abcd? 不好意思, 输出结果如下:  是不是感…

揭开HTTPS的神秘面纱

在说HTTP前&#xff0c;一定要先介绍一下HTTP&#xff0c;这家伙应该不用过多说明了&#xff0c;大家每天都在用&#xff0c;每一次HTTP请求&#xff0c;都是一次TCP连接。遗憾的是&#xff0c;请求的内容在TCP报文中是明文传输的&#xff0c;任何人截取到请求都可以读取其中的…

递归函数两种方式的区别

概述 递归函数都不陌生&#xff0c;比如计算n的阶乘&#xff1a; function f($n){if($n < 1) return 1;return $n * f($n-1); } 当然&#xff0c;有人可能会这么写&#xff1a; function f($n, $result){if($n < 1) return $result;return f($n-1, $n*$result); } 上…

Trie树

概述 在Google中随意搜索&#xff0c;如下所示&#xff1a; 他会自动显示相关的搜索&#xff0c;不知道有没有想过这个功能是如何实现的呢&#xff1f;面对海量的数据&#xff0c;它怎么能在我输入的同时&#xff0c;如此快速的检索到相关内容呢&#xff1f;当我查找资料后&am…

Python元组是什么

引出 在使用Python过程中&#xff0c;列表、集合和字典是比较常用的数据结构。 列表简单说就是数组&#xff0c;不对&#xff0c;它就是数组 集合就是去重的元素结构&#xff0c;和JAVA中的set一样 字典就是一个key-value的键值对&#xff0c;和JAVA中的HashTable一样 但是…

B+树

引言 时隔一年&#xff0c;我又想起当初看数据库时&#xff0c;看到的B树&#xff0c;就是数据库的索引使用的数据结构。再整理一下&#xff0c;看看自己没有忘记很多吧。 概述 B树之前&#xff0c;先来看一下二叉查找树&#xff08;1,2,3,4,5,6,7&#xff09; 恩&#xff0…

Python导入运行的当前模块报错

引言 今天遇到了一个奇怪的现象&#xff0c;简单举个栗子&#xff1a; 文件结构如下&#xff1a; 其中tt.py文件中定义了一个方法&#xff1a; def tt():print(tt) 我现在要在test.py中使用tt(), 代码如下&#xff1a; from test.tt import tt ​ if __name__ __main__:t…

Python中的+=

引出 今天在运行之前写的一个Python脚本时&#xff0c;发生了一个奇怪的现象&#xff08;我怎么老遇到奇怪的现象&#xff5e;&#xff5e;&#xff09;。当时的代码大概长这样&#xff1a; a [1, 2, 3] b [4, 5, 6] # ...一大段逻辑 c a c b # ...一大段逻辑 # 在这里&a…

js new Date 创建时间默认是8点

起因 最近在写一个页面&#xff0c;需要用到时间控制。然后我通过new Date()传入日期字符串创建了一个对象&#xff0c;并与当前时间做时间戳比较&#xff0c;结果12点刚过&#xff0c;就出问题了。举个栗子&#xff1a; // 假设当前时间是2019年12月22日0点20分 new Date(20…

Ubuntu14升级MySQL

最近需要将测试环境的MySQL从5.6升级到5.7. 我就自己先虚拟机搭了一个Ubuntu14进行模拟升级, 不得了 开始了各种踩坑记录 方案一 此方案可以跳过, 全是坑. 搜索 Ubuntu14 MySQL升级5.7, 出现很多结果 查看后发现处理方法全都一样, 既然大家都是这么升级的, 肯定么得问题. …

微信朋友圈技术实现设想

前提 微信朋友圈是我们每天都在用的功能, 但是如果让你来实现一个微信朋友圈, 你会如何做呢? 我来简单设想一下. 实现功能 发朋友圈评论动态查看朋友圈(只能查看好友的)查看评论(只能查看共同好友的) 是不是看着很简单? 也没有几个功能嘛. so easy. 开始实现 数据库选用…

redis的多路复用是什么鬼

有没有人和我一样, 自打知道了redis, 就一直听说什么redis单线程, 使用了多路复用等等. 天真的我以为多路复用是redis实现的技术. 今天才发现, 我被自己骗了, 多路复用是系统来实现的. 对不起自己的专业了. 为了引出多路复用, 我来大胆设想一下技术的发展路程. 前提 一个应用…

WebSocket小叙

概述 刚看到WeSocket的时候&#xff0c;我以为是HTTP相关&#xff0c;但是在前两天搭了一个简单的Client之后, 我发现这不就是TCP长连接么? 建立连接->通信->断开连接. 直到今天, 我在调试的时候, 发现发出了HTTP请求, 我想, 事情可能不是我想的那样. 先来简单描述一下…