0基础学习区块链技术——推演猜想

news2024/11/9 3:51:02

大纲

  • 去中心
  • 预防篡改
  • 付出代价
  • 方便存储

在《0基础学习区块链技术——入门》一文中,我们结合可视化工具,直观地感受了下区块的结构,以及链式的前后关系。
本文我们将抛弃之前的知识,从0开始思考和推演,区块链技术可能是如何构思出来的。

去中心

在一般的思维中,我们在一个“中心”保存信息,这样即方便又高效。但是带来的问题是:篡改起来容易。因为只要攻克“中心”这样一个对象,就可以修改全部信息。(下图中:人脸表示用户,红色6角星表示攻击,红色方块表示被篡改的数据)
在这里插入图片描述
那怎么变得更加安全一点呢?一个朴素的想法就是——再加一个“中心”。
在这里插入图片描述
这样攻击者需要攻克两个“中心”才能达到修改历史数据的目的。
按照这个思路,如何做到更加安全呢?对的,增加更多的“中心”。这样攻击者需要攻克更多的“中心”才能修改数据。
随着“中心”的增多,它们就越来越显得不那么“中心”了。因为每个“中心”都对等,没谁权重高,没谁权重低,于是丧失了“中心”这个概念。这就是“去中心化”。

预防篡改

如何防止篡改历史数据?实际上,“防止”是不太可能。我们唯一能做的就是“提高篡改成本”。像上面增加“中心”数量一样,它并不能避免全部“中心”被攻克,只是提高了被攻克的难度。
那如何提高篡改成本呢?一种朴素的想法是:给数据加密。但是数据加密需要秘钥,这个秘钥如果被偷窃,会导致整个方案,或者某个数据中心的数据全部被攻克。
在这里插入图片描述

最关键的问题是:被篡改后,需要对比其他“中心”解密后的数据,才能感知该中心数据出现了问题。
在这里插入图片描述
如何可以快速感知数据变动?那就是指纹计算。即我们对数据计算出一个唯一性指纹。一旦数据有任何变动,之前的指纹都会失效。
在这里插入图片描述
这样如果篡改者修改了历史数据,历史数据所在的数据区域指纹就失效,这个时候篡改者就需要重新计算新的指纹。
在区块链技术中,指纹计算使用的Hash算法,有SHA-256等。不同算法算出来的数据(指纹)长度不一样,但是相同算法算出的长度是一致的。需要说明的是,目前的hash算法都存在碰撞的可能性(即不同的数据,算出相同的hash值),只是概率很低罢了。

付出代价

如果篡改者手速非常快,可以一下就算出Hash。那不就意味着我们这种方式很容易被攻克吗?怎么办?增加算法的难度。因为Hash算法不具备可预测性,也不可逆。我们只能使用“暴力”计算的方式。这样我可以提出一些规则,比如要求Hash出来的值需要符合某些条件。但是由于数据到Hash值存在一一对应的关系,如果要求Hash值改变,则需要原始数据也改变。于是我们就引入Nonce这个概念,它会成为原始数据的一部分,从而让Hash值可以随着它改变而改变。但是这种改变是不可预测的,即我们不知道Nonce为什么值时,算出的Hash符合某种规律。我们唯一能做的就是算出来,然后查看该值是否符合规律。
一种比较容易想到的规则,就是要求算出的的Hash值前面或者后面几位为0。
在《0基础学习区块链技术——入门》中,我们看到例子中有5种规则,实际规则会更复杂,要求的暴力计算时间也越长。
在这里插入图片描述

方便存储

如果我们将数据保存到一个加密区域,则新增数据时需要解密原始数据,然后把新数据加入后再加密。
在这里插入图片描述
这个过程略显繁琐。
有没有更简单的方式?可以一条数据加密一次,不和历史数据掺和到一起。但是在预防篡改这块,这个方案显得无能为力。
这样我们就又回到指纹的方案。
那么是对全部数据进行指纹?还是对单条数据进行指纹?(实际两者都不是)
如果对全部数据进行指纹计算,就会面对一个“以有限对抗无限”的问题。因为随着数据量的增加,要将全部数据每次都计算一次,将变得越来越难以实现。比如现在比特币交易数据有几百G,如果每次有新的数据进来,都要对着几百G数据进行Hash,则机器资源消耗会更大。
那么对单条数据进行指纹?这似乎只能在检查单个数据时,可以发现被篡改(因为数据的Hash因为数据被篡改而改变),但是不能快速发现整体数据都变得不可信了。
于是,基于一些计算机数据结构的思想,可以将数据通过链式关系关联起来。起到“铰链”作用的就是前一个区块的Hash。
https://img-blog.csdnimg.cn/direct/47cdfd582eb94866bd7b07544b0b8ac6.png
如果链中某个区块数据变了,它的Hash也会改变,而它后面的区块的Pre hash还是指向原始值,这样区块链的链式关系就断开了,该链就出现问题了。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【必会面试题】快照读的原理

目录 前言知识点一个例子 前言 快照读(Snapshot Read)是数据库管理系统中一种特殊的读取机制,主要用于实现多版本并发控制(MVCC, Multi-Version Concurrency Control)策略,尤其是在MySQL的InnoDB存储引擎中…

hadoop疑难问题解决_NoClassDefFoundError: org/apache/hadoop/fs/adl/AdlFileSystem

1、问题描述 impala执行查询:select * from stmta_raw limit 10; 报错信息如下: Query: select * from sfmta_raw limit 10 Query submitted at: 2018-04-11 14:46:29 (Coordinator: http://mrj001:25000) ERROR: AnalysisException: Failed to load …

关于一些优化的知识

1、凸优化:一定可找到全局最优解 非凸优化:一般是局部最优解 2、无约束优化问题求解方法:梯度下降、拟牛顿法、高斯牛顿法、LM算法 3、 解释,就是右边的式子对应于就是当前这个xk这个点基础上朝着pk取走步长为a得到了对应的值&…

什么是Vector Database(向量数据库)?

什么是Vector Database(向量数据库)? 向量数据库是向量嵌入的有组织的集合,可以随时创建、读取、更新和删除。向量嵌入将文本或图像等数据块表示为数值。 文章目录 什么是Vector Database(向量数据库)?什么是嵌入模型(Embedding Model)&…

618精选好物盘点!五款必买力作合集,省钱又实用!

随着夏日的脚步越来越近,618购物节也如期而至,成为消费者们期待的年度购物盛宴。在这个全民狂欢的日子里,各种精选好物层出不穷,无论是追求高品质生活的你,还是希望提升日常效率的上班族,都能在这一天找到心…

【微服务】使用kubekey部署k8s多节点及kubesphere

kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…

QT_UI设计

mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE //命名空间 namespace Ui { class MainWindow; } //ui_MainWindow文件里定义的类&#xff0c;外部声明 QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_O…

读书笔记-《软件定义安全》之一:SDN和NFV:下一代网络的变革

第1章 SDN和NFV&#xff1a;下一代网络的变革 1.什么是SDN和NFV 1.1 SDN/NFV的体系结构 SDN SDN的体系结构可以分为3层&#xff1a; 基础设施层由经过资源抽象的网络设备组成&#xff0c;仅实现网络转发等数据平面的功能&#xff0c;不包含或仅包含有限的控制平面的功能。…

debian支持中文

1. 安装依赖 apt-get install locales2. 设置字符集 dpkg-reconfigure locales 选择en_us.UF-8&#xff0c;其余全部取消 3.设置生效&#xff0c;无需重启系统 source /etc/default/locale 4. 查看是否生效 locale

高效内容分发:海外短剧推广平台的流媒体传输技术挑战与解决

随着海外短剧市场的蓬勃发展&#xff0c;如何高效地将短剧内容分发给全球观众成为了推广平台必须面对的一大挑战。在这一过程中&#xff0c;流媒体传输技术起着至关重要的作用。然而&#xff0c;由于网络环境的复杂性和多样性&#xff0c;流媒体传输面临着带宽限制、延迟等诸多…

(学习笔记)数据基建-元数据管理

&#xff08;学习笔记&#xff09;数据基建-元数据管理 什么是元数据元数据该如何管理工具化规范化 数据血缘 什么是元数据 简单来说就是描述数据的数据&#xff0c;更直白来说就是描述表名、表制作者、表字段、表生命周期、表存粗等信息的数据 元数据该如何管理 工具化 …

【备战蓝桥杯】蓝桥杯省一笔记:算法模板笔记(Java)

蓝桥杯 0、快读快写模板1、回文判定2、前缀和3、差分4、二分查找5、快速幂6、判断素数7、gcd&lcm8、进制转换9、位运算10、字符串常用API11、n的所有质因子12、n的质因子个数13、n的约数个数14、n阶乘的约数个数15、n的约数和16、阶乘 & 双阶乘17、自定义升序降序18、动…

Docker安装、使用,容器化部署springboot项目

一、使用官方安装脚本自动安装 安装命令如下&#xff1a; curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 也可以使用国内 daocloud 一键安装命令&#xff1a; curl -sSL https://get.daocloud.io/docker | sh 二、Docker离线安装 1. 下载安装包 可…

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

一、【源码】创建简单的映射器代理工厂

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/01-xxxDao-proxy 创建简单的映射器代理工厂 执行xxxDao.method()时都做了些什么&#xff1f; 原理是&#xff1a;首先定义Dao接口&#xff…

docker 停止重启容器命令start/stop/restart详解(容器生命周期管理教程-2)

Docker 提供了多个命令来管理容器的生命周期&#xff0c; 其中start、stop 和 restart。这些命令允许用户控制容器的运行状态。 1. docker start 命令格式&#xff1a; docker start [OPTIONS] CONTAINER [CONTAINER...]功能&#xff1a; 启动一个或多个已经停止的 Docker …

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt

文章目录 1.1 Qt 简介1.2 Qt 的安装1.3 编写 Hello World 1.1 Qt 简介 Qt&#xff08;官网&#xff1a;https://www.qt.io&#xff09;于1995年5月首次公开发布&#xff0c;是一个跨平台的应用程序开发框架&#xff0c;也是最主流的 C 开发框架&#xff1b; Qt 具有其他编程…

[XYCTF新生赛]-Reverse:ez_rand解析(爆破时间戳,汇编结合反汇编)

无壳 查看ida 这里是利用time64获取种子&#xff0c;但是time64不是标准的函数&#xff0c;这里是伪随机数&#xff0c;简单地来说就是它不是通过时间来确定种子&#xff0c;所以我们没办法在脚本里直接调用它得到种子&#xff0c;那就意味着我们不知道种子是多少&#xff0c;…

一个好用的对外开放端口工具 Ngrok

工作中我们经常需要在测试或者开发阶段给客户快速展示程序&#xff0c;需要运维打开端口、部署等一系列操作&#xff0c;成本较高。如果能够直将本地开发环境发布给客户直接进行体验、需求确认&#xff0c;就会方便很多&#xff0c;本文将介绍一个小工具可以快速对外打开端口。…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…