非对称加密概述

非对称加密概述

前言

在阅读《精通比特币》的过程中,我发现比特币系统中有两个重要的概念需要利用非对称加密技术:

比特币地址的生成

交易合法性的验证

因此,我用了几天时间学习了密码学基础知识,尤其是非对称加密技术的原理。这里加以整理总结,本文只求通俗,必需涉及数学公式才能解释的部分只给出优质教程的链接,根据需求选择学习就好。

本文以一个一脸懵逼的新手视角进行介绍:

  • 想了解非对称加密,那么对称加密是什么?
  • 非对称加密又是什么??
  • 非对称加密技术能做什么???
  • 如果想深入了解非对称加密算法原理看哪些资料????
    这里写图片描述

先说说对称加密

想了解非对称加密,不妨先解释对称加密是什么

对称加密,全称应该是对称密钥加密(Symmetric-key algorithm),是密码学中的一类基本的加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。

而在密码学中,密钥(key)是指某个用来完成加密、解密、完整性验证等密码学应用的秘密信息。

一个密钥大概长这样“A56FDJK3+dj2slh345dhi”,一般以一定长度的字母和数字组成的字符串来表达,具体长度和使用的字母由具体的加密算法规定,没有统一规定。

下面用例子和图来直观解释对称密钥加密,有请出密码学中出镜率最高的两个人:Alice和Bob

假设Alice正在利用网络向Bob发送一条消息“Alice已向Bob转账1BTC,请查收。”
这里写图片描述
由于通信过程不能保证是安全的,两人的通信暴露在网络中是存在被第三方劫持的可能

因此Alice和Bob商量使用对称加密方法对消息进行。

为了安全,两人私下确定了使用的加密规则(例如对称加密算法DES),以及密钥(例如“AliceBobKey”)

于是新的通信过程如下图所示:
这里写图片描述
从图中可以看出,Alice使用事先商量好的加密算法和密钥对消息进行加密,通过互联网发送给Bob,Bob收到密文后,使用同样的算法和密钥对密文进行解密。加密-解密的过程完全对称,因此被称为对称密钥加密。

于是,即使现在存在第三方劫持了Alice发送的消息,也无法得知消息的具体内容,安全性得到的一定程度的保证。

事实上,这组密钥成为了Alice和Bob的共同秘密,以便维持专属的通信联系,任何一方都不能将密钥泄露。

对称加密的过程非常好理解,在很多场合都需要这种技术,也有着很多优点(比如速度快)。

但与非对称加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。在某些特殊的场景下,这种加密技术就会有局限性,比如它无法用于身份验证,因为你不能将密钥提供给其他人。

下面就来说说非对称加密

非对称加密是什么?

非对称加密(asymmetric cryptography),也称为公开密钥加密(Public-key cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥。顾名思义,公钥可以任意对外发布;而私钥必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给要通信的另一方,即使他被信任。

非对称加密的重要性质:

1.加密的双向性。

加密具有双向性,即公钥和私钥中的任一个均可用作加密,此时另一个则用作解密。
这里写图片描述
使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文,甚至连最初用来加密的密钥也不能用作解密,这是非对称加密最重要的性质或者说特点。

2.公钥无法推导出私钥

必须确保使用公钥无法推导出私钥,至少妄想使用公钥推导私钥必须在计算上是不可行的,否则安全性将不复存在。

虽然两个密钥在数学上相关,但如果知道了公钥,并不能凭此计算出私钥;因此公钥可以公开,任意向外发布;而私钥不公开,绝不透过任何途径向任何人提供。

注1:任何一种实现上面两条性质的不同方法,便是一种新的非对称加密算法。例如RSA算法和椭圆曲线算法,其背后原理大不相同,但都满足这两个重要性质或者说定义。这就好像好比欧式距离,马氏距离都满足了范数的定义,因此都是一种具体的范数。

注2:如果你第一次接触非对称加密,你可能会和我一样对上面两条性质如何实现深感好奇,但目前你不必深陷于此,其背后的数学原理还是需要耐心钻研上几天的。现在仅仅牢记这两个性质就好,文末提供了一些优质的材料以供进一步学习。

非对称加密的应用

了解了非对称加密大致是什么,这小节来说说它能够做什么?

前面已经知道,非对称加密具有双向性,即公钥和私钥中的任一个均可用作加密,此时另一个则用作解密。于是不同加密方向便产生了不同的应用。

应用1:加密通信

|明文|->公钥加密->|密文|->私钥解密->|明文|

这种加密路径用于和他人进行加密通信,作用等同于对称加密。

我们回到Alice和Bob的例子来看下。

如果Bob想利用非对称加密算法私密的接收他人向他发送的信息,步骤是这样的。

1.首先Bob需要使用具体约定的算法(例如RSA)生成密钥和公钥,密钥自己保留,公钥对外公布。

2.Alice拿到Bob的公钥后,便可以对想要发送的消息“Alice已向Bob转账1BTC,请查收。”进行加密。

3.然后Alice将密文(例如是“FH39ggJ+shi3djifg35”)发送给Bob。

4.Bob收到消息后,用自己的私钥进行解密,还原出消息原文“Alice已向Bob转账1BTC,请查收。”

用图来表示便是下面的过程:
这里写图片描述
由于使用Bob公钥加密的消息只能用Bob的私钥解密(Bob的公钥也是不行的),而私钥只有Bob拥有,因此即使消息被第三方劫持,他也无法还原出消息明文。

应用2:数字签名

如果反过来,先用私钥加密呢?这便诞生了非对称加密的另一个重要应用:数字签名

我们回到Alice和Bob的例子来看下。

在比特币系统中,类似“Alice已向Bob转账1BTC,请查收。”这样的消息最终会被矿工记录在账本上,是与转账双方利益相关的。这样一条消息的受益方是Bob,我们腹黑一点想,如果Bob一直向网络中广播Alice给他转账的消息呢?

Bob:“Alice已向Bob转账1BTC”

Bob:“Alice已向Bob转账2BTC”

Bob:“Alice已向Bob转账3BTC”

因此,我们需要一种机制来证明Alice是“自愿”的,也就是消息是Alice亲自发出的。步骤是这样的:

1.Alice需要使用具体约定的算法(例如RSA)生成密钥和公钥,密钥自己保留,公钥对外公布。

2.当Alice想要发送消息 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。 时,Alice使用自己的私钥对消息进行加密,假设加密后的密文是 SHG356g3T4+dh4fh,现在这个密文可以看作Alice的数字签名。

3.Alice将消息明文和数字签名放到一起并发送到网络中

发送的消息类似这样的形式 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。| 签名:“SHG356g3T4+dh4fh”

4.网络中的所有人接收到消息后,都可以进行如下操作完成验证:

收到消息 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”。| 签名:“SHG356g3T4+dh4fh”

使用Alice在消息中提供的公钥 gh3giPGFN2jgh3sF对私钥签署的数字签名SHG356g3T4+dh4fh进行解密

将解密结果与消息明文 Alice已向Bob转账1BTC,请查收。| 我的公钥是:“gh3giPGFN2jgh3sF”进行对比

如果一致,说明消息是Alice亲自发送的,因为只有Alice本人拥有Alice的密钥

如果不一致,则说明消息不是Alice发送的,或者虽然消息是Alice发送的但已遭到他人篡改

5.于是,通过4中描述的方法,Bob确认了Alice给他了一笔价值1BTC的转账。

网络中其他人(矿工)均成功验证了这条消息的真实性,并为Bob作证他的账户新增了1个BTC,Alice的账户减少了1个BTC。

整个过程可以被下图描述:
这里写图片描述
注1:上面仅仅是对数字签名技术的一个简单描述,很好理解吧~实际应用中的操作略有区别,比如通常是先对明文进行hash,再对hash后结果用私钥进行签名。

注2:此外,上述介绍的数字签名简略版本是存在被第三方攻击的漏洞的。你能想到问题以及如何解决吗?[提示:相同内容的消息、时间戳]

注3:如果你觉得对数字签名的理解还不够清晰,不妨再读读What is a Digital Signature?

应用3:数字证书

数字证书是非对称加密的又一个重要应用,由于与区块链的学习的关系相对不那么密切,这里就先放一边了。

大家有兴趣可以看这篇文章数字证书原理,讲的很清晰

教程推荐:加密-解密背后的数学原理

读到现在,你应该对非对称加密的步骤非常了解了

但你不清晰的地方是背后的数学原理,其实还是围绕非对称加密的两条性质来的:

  • 加密-解密的过程到底是如何实现的?
  • 为什么公钥无法推导出私钥?

如果你想进一步探索,不妨读读下面这些资料:

RSA算法是如何实现加密解密的?

wiki:RSA algorithm

阮一峰的网络日志:RSA算法原理(一)

阮一峰的网络日志:RSA算法原理(二)

椭圆曲线算法的具体原理?

椭圆曲线算法可以用来进行秘密的共享以及数字签名,实际上其具体步骤和本文介绍的还是略有差异的,如果想详细了解原理,不妨看看下面这些文章:

椭圆曲线算法的几个简单有意思的解释(知乎)

推荐!椭圆曲线算法的通俗介绍(tutorial)

椭圆曲线加密算法介绍

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

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

相关文章

信息摘要算法之二:SHA1算法分析及实现

SHA算法,即安全散列算法(Secure Hash Algorithm)是一种与MD5同源的数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。 1、概述 SHA算法…

2018数学建模A题的简单指导

之前写过一篇博客,介绍如何使用差分格式求解热传导方程 今天打开博客,突然发现评论区被这篇文章霸屏了 询问实验室的小伙伴才知,原来是被可爱的建模学子们攻占了 经过简单的了解,发现今年建模的A题的核心就是求解一个热传导方程…

PID控制器开发笔记之五:变积分PID控制器的实现

在普通的PID控制算法中,由于积分系数Ki是常数,所以在整个控制过程中,积分增量是不变的。然而,系统对于积分项的要求是,系统偏差大时,积分作用应该减弱甚至是全无,而在偏差小时,则应该…

使用SIFT匹配金馆长表情包

python使用opencv计算SIFT特征点的示例前言潜在的问题记录demo1:计算并绘制特征点demo2:使用SIFT匹配两幅图像参考文章地址前言 SIFT(Scale-invariant feature transform)是2004年提出的,至今已经经受住各种考验&…

PID控制器开发笔记之六:不完全微分PID控制器的实现

从PID控制的基本原理我们知道,微分信号的引入可改善系统的动态特性,但也存在一个问题,那就是容易引进高频干扰,在偏差扰动突变时尤其显出微分项的不足。为了解决这个问题人们引入低通滤波方式来解决这一问题。 1、不完全微分的基…

使用Python实现简易的数据标注工具

使用Python实现简易的数据标注工具 以增加工作效率为目的,最近一直在着手构建一个AI ToolBox 这两天,我为其中的预处理工具目录添加了数据标注模块,本文所介绍内容的代码见这里 该数据标注模块包含以下几个demo gui_tkinter_exercise.py …

PID控制器开发笔记之七:微分先行PID控制器的实现

前面已经实现了各种的PID算法,然而在某些给定值频繁且大幅变化的场合,微分项常常会引起系统的振荡。为了适应这种给定值频繁变化的场合,人们设计了微分先行算法。 1、微分先行算法的思想 微分先行PID控制是只对输出量进行微分,而…

python实现视频关键帧提取(基于帧间差分)

python实现视频关键帧提取(基于帧间差分) 在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取。 关键帧提取算法多种多样&…

PID控制器开发笔记之八:带死区的PID控制器的实现

在计算机控制系统中,由于系统特性和计算精度等问题,致使系统偏差总是存在,系统总是频繁动作不能稳定。为了解决这种情况,我们可以引入带死区的PID算法。 1、带死区PID的基本思想 带死区的PID控制算法就是检测偏差值,…

在多任务(RTOS)环境中使用看门狗

最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章。从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁。为了阅读方便,有些航天领域名词本人添加了注释&#xf…

天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享

天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享 一、前言 竞赛页面 团队名BugFlow,最终排名35/2157 虽然成绩一般,但是作为一支目标检测领域的新手队伍,仅仅有一块1070显卡,从零开始拿到这个排名,也算有一…

信息摘要算法之三:SHA256算法分析与实现

前面一篇中我们分析了SHA的原理,并且以SHA1为例实现了相关的算法,在这一片中我们将进一步分析SHA2并实现之。 1、SHA简述 前面的篇章中我们已经说明过,SHA实际包括有一系列算法,分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-…

focal loss的几种实现版本(Keras/Tensorflow)

起源于在工作中使用focal loss遇到的一个bug,我仔细的学习多个靠谱的focal loss讲解及实现版本 通过测试,我发现了这样一个奇怪的现象,几乎每个版本的focal loss实现对同样的输入计算出的loss都是不同的。 通过仔细的比对和思考&#xff0c…

基于ARM Cortex-M和Eclipse的SWO单总线输出

最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关通过SWD的跟踪接口SWO获取ARM Cortex-M相关信息的文章,文章结构明晰,讲解透彻,本人深受启发,特意将其翻译过来供各位同仁参考。当然限于个人水平,有不当之处…

PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现

对于一般的时滞系统来说,设定值的变动会产生较大的滞后才能反映在被控变量上,从而产生合理的调节。而前馈控制系统是根据扰动或给定值的变化按补偿原理来工作的控制系统,其特点是当扰动产生后,被控变量还未变化以前,根…

借助百度识图爬取数据集

背景 一个能够实际应用的深度学习模型,背后的数据集往往都花费了大量的人力财力,通过聘用标注团队对真实场景数据进行标注生产出来,大多数情况不太可能使用网络来源的图片。但在项目初期的demo阶段,或者某些特定的场合下&#xf…

通过printf从目标板到调试器的输出

最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁。当然限于个人水平,有不当之处恳请指正。原文网址:https://blog.seg…

小心使用tf.image.resize_images,填坑经验分享给你

上上周,我在一个项目上线前对模型进行测试时出现了问题,这个问题困扰了我近两周,终于找到了问题根源,做个简短总结分享给你,希望对大家有帮助。 问题描述: 线上线下测试结果不一致,且差异很大…

PID控制器开发笔记之十:步进式PID控制器的实现

对于一般的PID控制系统来说,当设定值发生较大的突变时,很容易产生超调而使系统不稳定。为了解决这种阶跃变化造成的不利影响,人们发明了步进式PID控制算法。 1、步进式PID的基本思想 所谓步进式PID算法,实际就是在设定值发生阶跃…

AutoML 与 Bayesian Optimization 概述

1. AutoML 概述 AutoML是指对于一个超参数优化任务(比如规定计算资源内,调整网络结构找到准确率最高的网络),尽量减少人为干预,使用某种学习机制,来调节这些超参数,使得目标问题达到最优。 这…