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

密码学概述

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

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

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

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

区块链中的密码学

哈希算法

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

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

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

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

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

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

非对称加密

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

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

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

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

推荐阅读

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

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

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

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

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

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

相关推荐
Estar.Lee9 分钟前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
新知图书1 小时前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
盛夏绽放1 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
Ares-Wang1 小时前
Asp.net Core Hosted Service(托管服务) Timer (定时任务)
后端·asp.net
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
天晟科技2 小时前
GameFi的前景:游戏与金融的未来交汇点
游戏·金融·区块链
Roun33 小时前
Web3和区块链如何促进数据透明与隐私保护的平衡
web3·区块链·隐私保护
Rverdoser3 小时前
RabbitMQ的基本概念和入门
开发语言·后端·ruby
Tech Synapse3 小时前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴3 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构