阻止“异鬼”侵袭的古老又现代的战士

本文深入浅出地讲解了加密技术的历史与原理,重点介绍了非对称加密的机制及其在现代互联网安全通信、身份认证和电子签名中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章本来是要延着我们拆解区块的思路,继续分析剩下的" scriptPubKey", "scriptSig"的 ,这其实就要涉及比特币的脚本系统,这套系统所蕴含的思想,也是独具创新,这个思想可以说是智能合约实现的基础,值得好好说一说。但是我发现,在讲这个之前,有几个基础概念 ,需要交代清楚。那就是非对称加密,私钥、公钥、地址等,以及它们之间的关系。因此,本文就先来说说加密,文中没有太多技术性的解释,相信你一定能看得懂。明白了本文,对数字货币中这些常见的概念就了然于胸了,因为它正是——比特币最坚硬的基石。

1. 古老又现代的学科

加密可以说是一门古老的学科,自古以来就有之。只要信息涉及到利益,足够有价值,就值得为它加密。往小里说,精妙的藏头诗就是一种加密方法,它把关键信息编码到整首诗里。往大里说,人类的各种经济、战争都需要有加密的存在。尤其在战争中,一条信息有没有被安全加密,很可能关系到最终的胜利与失败。而在现代,对普通人而言加密更多普遍地用在经济活动中。

在我国很早就发明了用于战争军事的加密方法——字验代码法。据《武经总要》记载,字验是宋朝传递情报的密码,将各种情报内容,比如将士叛变、被贼围困等内容归纳为40项,编成40条短语,分别编码。将领带兵出发前,指挥部门与其约定一首40字的五言律诗作为解码密钥,诗中的每一字都对应一条短语;在战斗中,前后方就用该密码本进行通讯。

在谍战片《潜伏》中, 孙红雷主演的余则成在接受上级指令时,总是一边听着广播里念出的四位一组的数字,一边查阅小说《梦蝴蝶》。他所使用的那本书就是“字验”。

而在国外,古代运用加密技术最著名例子是是凯撒密码。凯撒是古代一位军事将领,他率先将加密技术应用于军事通信。它的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。

通过上面的例子,不难发现加密技术包括两方面,一个是加密算法,一个是加密密钥。二者就像锁与钥匙的关系,锁是加密算法,钥匙就是密钥 。想要打开一个房间,必须有针对这把锁的钥匙才可以。只不过在上锁的过程中,也需要有钥匙参与才能实现上锁。在上面字验代码法中《武经总要》中的那首诗、《潜伏》中的《梦蝴蝶》 以及凯撒密码中的位数就是密钥。

对于一段密文,只知道了密钥,不知道算法无法解开;而知道了加密算法不知道密钥,也无济于事。因此加密算法与密钥二者共同保证了信息的安全。但是,如果加密算法非常薄弱,密钥再复杂也很容易破解。比如凯撒密码,只要稍加分析人脑都能破解。另外,利用统计学知识,通过分析加密的长文字母出现的概率也很容易破解。

所以加密算法从根本上决定了加密技术抵抗破解的能力,但加密算法的设计是一个复杂的工作,需要数学理论的保证。如果算法设计的有漏洞,可以分析出规律,那么加密也就形同虚设。一个好的加密技术,算法应该是公开的,强度经得起检验的,理论上经得起论证的,那么只需要保证好密钥足够长、足够安全即可。现在计算机界加密算法也都是公开的,只需要拿来使用即可。

2. 关键的问题

这里还有一个关键的问题,不知你有没有发现?

举一个例子,Alice 要给 Bob 发送信息,使用公开的算法和密钥加密后,发送给Bob。 Bob 要想得到信息,必须有密钥才能解开。但密钥怎么才能告知Bob呢?也许你会说,可以当面告知。在现实场景中,也许这是个办法。但在网络环境中,如何实现一次顺畅的通信呢?

好办,我们可以聪明地给出答案:把密钥加密再发送给Bob啊。

那加密密钥的密钥怎么传送呢?这仿佛看起来是个 “鸡生蛋,蛋生鸡” 无解的死循环难题!

的确是的,直到一个新技术的出现。
那就是非对称加密。简单来讲,非对称加密里的这把锁很特殊, 它有两把钥匙, 一把用来上锁,一把用来开锁。锁定的时候的钥匙叫公钥,开锁的钥匙叫私钥。
这样,Bob先生成自己的公钥和私钥,把公钥公布出去。Alice 拿Bob的公钥加密后传给Bob,Bob用自己的私钥解密解开即可。
这个过程,完全没有密钥的传递,可用于解密的私钥只有Bob本人才知道,只有他能解密,所以是安全的。

相应的,前面只有一个密钥的情况就叫对称加密,因为加密与解密都需要同一个密钥。

由于非对称的加密,运算量较大,一般不会直接用它来加密大量的数据加密。它的主要用途是,传送对称加密的密钥,密钥得到安全的传送之后,通信的时候用对称加密来加密,

既考虑到了速度,又考虑到了安全,是不是一举两得,可以非常安心且舒心了?~~

3. 另个用途

由于非对称加密的这种 “一方隐私、一方公开” 这种特性,还可以有什么用途呢?
加密的过程是Bob有公钥私钥,Alice给Bob发信息,Bob来验证,Alice作为主动方,假如这个关系调换过来会怎样?
Bob有一对公钥私钥,Bob作为主动方,Alice作为被动验证方。Bob用自己的私钥来加密一段信息发送出去,作为知道Bob公钥的大众中一员的Alice可以作什么?
她可以用公钥解密段信息对吧? 如果解密对了,那就说明这段信息确实是来自Bob!

这个过程是一个什么过程?先别往下看,思考一下。

其实是一个“签名与验证”的过程么,Bob相当于对自己发布的信息进行了签名。 现实中签名多见于合同协议中,只要你在上面签了名字,代表你是完全认同这份协议,对于这份协议就具有了责任与义务。
所以非对称的加密,反过来,可以实现电子签名的功能。

也许上面,你注意到还有一个关键问题——我上面标注了:解密怎么算对了?这个问题,其实相当于,怎么证明这个公钥就是Bob的?

这个技术上,没有什么好方法。在现实中,怎么解决的呢?证明一个东西就是某个人的,需要借助第三方公信机构,这个机构颁发证书来认证。

所以在电子签名这件事上,也是如此。需要有这么个机构——CA, Certificate Authority。它的作用是对Bob的公钥也进行一次电子签名,证明这个公钥就是Bob的,Bob的公钥加上CA的签名就构成了Bob的证书。

如此,Alice 发现这个证书确实是公开的CA签过名的,就证明了这个公钥就是Bob的,进而就可以证明这段信息是Bob签过名的。所以要Bob发送签名的时候,就不能只包括信息及它的签名,还得有++Bob的证书(公钥+CA对这个公钥的签名)++, 别人才可以进行验证。

我们上面提到,非对称加密是很耗时的,而数据是可能很大的,比如一篇文章,怎么办?再开脑动思考一下。

哈希(Hash)——我们之前文章里提到过的哈希,哈希是把一段任意长的数据映射成长度固定的短数据,它具有难伪造的特性。

我们只签名文章的Hash值,最后验证签名的Hash值与原始数据的Hash相同,就可以了!
具体流程可以参见下图。

当今计算机与互联网的发展当然是软硬件的飞速发展为前提的,但背后也少不了加密技术这个功臣,尤其是非对称加密,一切的信息的安全传递、身份认证几乎都是建立在它基础之上的。怪不得有人把加密称为互联网大陆的守夜人(The Night Watch)呢,确实正是它像Game of Thrones里面的守夜人一样,默默无闻又坚韧地保卫着互联网这片大陆不受“异鬼”的侵袭。

参考:
https://36kr.com/p/5040438.html
https://zh.wikipedia.org


本公众号是活动“每周一新”第11周的践行产物。主要分享成长感悟、旅游经历、通用技术、IT趣闻、编程知识等,真诚欢迎你关注公众号。

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值