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

密码学概述

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

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

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

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

区块链中的密码学

哈希算法

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

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

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

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

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

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

非对称加密

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

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

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

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

推荐阅读

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

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

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

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

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

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

相关推荐
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
攸攸太上2 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
罗曼蒂克在消亡3 小时前
graphql--快速了解graphql特点
后端·graphql
潘多编程3 小时前
Spring Boot与GraphQL:现代化API设计
spring boot·后端·graphql
大神薯条老师3 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
2401_857622664 小时前
Spring Boot新闻推荐系统:性能优化策略
java·spring boot·后端
知否技术4 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
AskHarries5 小时前
如何优雅的处理NPE问题?
java·spring boot·后端
计算机学姐5 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis