认识区块链(四):区块链的底层实现之密码学

密码学概述

区块链起源于密码学,可以说区块链的核心,以及安全性、不可篡改性的来源很大一部分都是基于密码学实现的。

密码学相信对大家来说都有接触过,但是不搞安全的同学可能没有深入学习过,密码学是网络安全、信息安全等专业的奠基学科。按照时间分类,我们可以把密码学分为古典密码学和现代密码学。

古典密码学主要是通过一些移位对应、字母重排、替换字母、或者简单的其他方法进行加密的。比如a-> i, b->u 进行一个简单的加密,在现代计算机面前显然是没有任何安全性的。

现代密码学除了关注信息的保密性和可传递性,还涉及到了信息的完整性、不可抵赖性,以及防攻击性等等。

区块链中的密码学

哈希算法

哈希也被称为散列算法,指的是对一个任意的输入,都能给出一个定长的字符串,它能够代表一段数据的唯一特征,类似于人类的指纹,所以在后端开发中我们也会使用哈希算法对某些数据进行加密,通过这个哈希值来保证数据的唯一性。

在前文我们已经说过,每一个区块链中的区块都有一个值previous hash,这个值指向的是当前区块的上一个区块。

同时,在一个区块中会使用哈希树(Merkle Tree)来组织交易数据,以确保数据的完整性,提高效率。

以一个长度为4的交易作为例子,哈希树的构建方式如下

  • 将4个交易按顺序排列,作为树的叶子结点
  • 对每两个相邻的交易数据进行哈希操作,得到它们的哈希值
  • 将得到的哈希值组成新的一层节点,再次进行两两哈希操作

这就保证了树的根节点作为区块头的一部分,存储在区块链上。这个头的值是对所有交易数据进行哈希计算得到的,因此任何一个交易数据的变化都会导致树头结点的变化。

非对称加密

区块链中的参与者通过会使用椭圆曲线算法生成一堆公私钥对组合,公钥对外公开,私钥自己持有。通过公钥对数据进行加密,私钥对数据进行解密。因为私钥是自己持有的,并且不需要在网络中进行传递,这样就能够验证身份的唯一性、保证身份的安全性。

包括区块链的数字钱包也用到了这个技术,数字资产通常存储在加密货币钱包中,这些钱包使用非对称加密来保护用户的私钥,私钥进行签署交易,公钥用于接收资产。

同时,私钥会用于生成数字签名,而相应的公钥用于验证这个数字签名。区块链中的交易通常都包含数字签名,以验证交易的真实性和完整性。其他参与者可以使用发送者的公钥验证数字签名,确保交易没有被篡改,并且确实是由合法的私钥签名生成的。

在白皮书中,因为数字签名的唯一性,数字签名还用来防止double-spending问题,通过数字签名来确保交易的唯一性,避免同一份资金被重复使用。

推荐阅读

当说到云原生时,我们究竟在谈论什么? - 掘金

不太熟悉Git? 不妨看看这篇文章 - 掘金

一文搞定常见分布式事务实现 - 掘金

你真的理解分布式理论吗? - 掘金

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

01.你为什么需要学习K8S - 掘金

相关推荐
写码跑山的老艾35 分钟前
优惠券为何能反复使用?一次算价与提单不一致的资损复盘
后端
RAG学徒loading1 小时前
我把 RAG 召回从 57.6% 做到 78.8%,然后发现 75% 的真实问题它答不了
后端
用户42569399996201 小时前
我的 HashMap 查找全废了,但 36 个测试全绿
后端
小番茄程序猿1 小时前
Redis 编码压测 59 轮:HSET 快 23 倍是假象,SMEMBERS 慢 30 倍是真的
redis·后端
Moment2 小时前
代码都能让 Agent 写了,我们为什么还要学前端?
前端·后端·面试
Hilaku2 小时前
MCP 协议会成为前端 AI 工程的标准接口吗?
前端·javascript·程序员
AI入职记2 小时前
Spring AI 实测:不挂工具,模型真的会瞎编吗?
后端·ai编程
wei_shuo2 小时前
SQL Server数据迁移实战:内置故障诊断工具与根因分析实践
后端
一条Go2 小时前
告警指纹:一次故障为什么只产生一条 FIRING 记录
后端·架构·github