网站开发 源代码/搜索推广渠道

网站开发 源代码,搜索推广渠道,python网页版编辑器,网站站群优化学习视频源链接: https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根据肖老师的视频进行的笔记记录 一、 cryptographic hash function 1.1. collision resistance抗碰撞性 : collision 指的是hash碰撞 抗碰撞性 (Collision Resistance) 是密码…

学习视频源链接:
https://www.bilibili.com/video/BV1Vt411X7JF/
本文是根据肖老师的视频进行的笔记记录

一、 cryptographic hash function

1.1. collision resistance抗碰撞性 :

collision 指的是hash碰撞

抗碰撞性 (Collision Resistance) 是密码学哈希函数的一个重要安全属性,指的是:很难找到两个不同的输入 x 和 y,使得它们的哈希值相同,即 hash(x) = hash(y)。

作用:

  • 数字签名安全性:防止攻击者找到与已签名文档具有相同哈希值的伪造文档
  • 区块链技术:确保交易和区块的唯一性,防止伪造
  • 数据完整性:保证数据没有被篡改
  • 在以太坊的上下文中,抗碰撞性在多个地方都很重要,比如:
  • 区块头的哈希计算
  • 交易哈希的生成
  • Merkle树的构建
  • 账户地址的生成

后果: 如果一个哈希函数失去了抗碰撞性,攻击者可能能够构造碰撞来进行双花攻击或其他欺诈行为。(bitcoin这种pow就容易有double spending,以太坊po

以太坊主要使用Keccak-256(一种SHA-3变种)作为哈希算法,它被设计为具有强抗碰撞性。

(从数学上证明不出来抗碰撞行,就是实践中验证的。。。
md5 之前以为做不出来hash碰撞,但是后来证明可以做出了。。。)

1.1.2 hiding 单项One-way Function / Preimage Resistance

给定哈希值 h,计算上不可行找到任何输入 x 使得 hash(x) = h
即从哈希值反推原始输入在计算上是不可行的

成立前提:输入的分布均匀,数量足够大
单向函数 (One-way Function)

1.1.1、1.1.2 两个性质和起来的作用: 可以形成digital commitment /digital equivalent of a sealed envelope 。

数字承诺(Digital Commitment)

1.1.3 puzzle friendly

挖矿就是 一直寻找随机数(none) 让 block header+ none 进行运算后的hash 函数值,在target 目标内
所以这个才能 proof of work 。

difficult to solve ,but easy to verify
一到有人找到这个none ,发布出去之后,验证算一下就行。
挖矿很难,验证很容易

2. 签名

公私钥来自非对象加密的概念
一个公私钥就是一个账户

加密和解密用的是同一个人的公钥和私钥

公钥相当于你的银行账户。
公私钥用来签名。
如果我想转给你的钱,我要用自己的私钥进行签名,然后其他人用我自己的公钥 验证 ,我是不是真的想转给你这笔钱。
如果两个人生成的公私钥恰好相同,可以吗? 256位hash,出现两个人相同的公私钥,概率微乎其微。 (假设产生公私钥的时候有一个好的随机源

先对一个message 取hash 然后再对这个hash值签名

二、 数据结构

2.1 hash pointers

区块链: 一个一个区块 组成的链表
block chain is a linked list using hash pointers。
哈希指针(Hash Pointer) : 有环链表不能使用hash pointer

第一个区块: Genesis block
最后一个: most recent block

每一个区块都有指向前一个区块的指针。
每一个区块的hash值时前面+自己的hashpointer 一起取的hash 值算出来的

我们通过这种数据结构可以实现 tamper- evident log

所以保证了区块链中间东西不能变,如果改变前面任何一个区块,都会引发多米诺骨牌效应

防篡改日志(Tamper-Evident Log)

2.2 merkle tree

相对于
binray tree
用hash 指针代替普通指针
Merkle树(Merkle Tree)
好处: 只要记住根hash值,就能记住树中 对任何的修改。 这叫 maerkle proof

Merkle证明(Merkle Proof)

proof of membership / proof of inclusion

Merkle非成员证明 (Proof of Non-membership)

Btc 只用了 membership的证明
proof of membership

三、 btc 协议

如何防范 double spending attack
比特币与以太坊防范双重支付(Double Spending)的机制
铸币交易:

btc每个区块链的组成:
输入部分: 币的来源,指向前面某个交易
输出部分: 收款人公钥的hash (相当于收款人地址)

为什么要说明币的来源? 证明这个钱不是凭空捏造的,也防范double spending
付款方需要知道 收款方的地址(公钥的hash值)
收款方需要知道 付款方的公钥 ,a的公钥代表a的身份,代表知道从哪来的
所有节点也要知道付款方的公钥,为了认证这笔交易是不是合法的。
认证原则:因为有的节点是恶意的,所有的节点验证时,都要独立验证。

怎么才能知道付款方的公钥?

我给你发送信息,我是用你的公钥加密,然后你收到后用你的私钥解密。

比特币区块的组成结构

全节点(Full Node)与轻节点(Light Node)的区别

哪些交易应该放到下一个区块中? 哪一个时合法的?
区块链: 账本的内容钥取得分布式共识—— 又绕到了分布式共识算法中。

3.2 分布式共识 :

eg: distributed hash table
需要取得共识的是 hash表中的kv
有很多impossibility result
eg. FLP
在一个异步的系统里(asynchronous ,如果有一个成员时faulty 的,那么也无法达成共识

eg. CAP theorem

虽然这些和btc 应用

假定系统中小部分为恶意节点,大部分是好的,所以如何处理consensus in bitcoin

比如 hyperledger(如fabric) ,当membership 是有门槛的,所以可以使用投票协议。
如果没有门槛,还采用投票协议,会出现sybil attack
Sybil攻击(Sybil Attack)

3.2.1 bitcoin 如何解决?

只有找到nonce ,才会有记账权,

记账权(Bookkeeping Rights)
分叉攻击? forking attack 。bitcoin 的规则是: 连接到最长合法链 。

longgest valid chain 。
比特币中被废弃的分叉:孤块(Orphan Block)与陈旧块(Stale Block)
求解 puzzle friendly 就是靠算力来投票。看每秒钟能试出多少个nasco数 ,hash rate 决定投票权重

四、 btc 实现

UTXO(Unspent Transaction Output)未花费交易输出
utxo 检测是不是double spending

交易型账本 vs 账户型账本

挖矿的时候用 block header就能保证这个链没有篡改。
区块头(Block Header)与区块体(Block Body)比较

比特币的Extra Nonce与挖矿双层循环

挖矿公平性保证: progress free
Progress-Free(无进展性)
比特币的挖矿 除了比拼算力外,没有任何意义,稀缺性是人为造成的,他越来越少是因为初块奖励人为减少。
但是!bitcoin is secured by mining
只要大部分算力掌握在诚实节点手里,那么系统安全就能得到保证。
是不是说挖矿动力越来越小呢? 恰恰相反,竞争越来越激烈,bitcoin的价格飙升

挖矿是比较大的概率落到诚实的节点上。
就算落到不诚实节点,由于不诚实节点虽然获得记账权,但是他不知道别人的私钥,那么这个钱就转不走。
如果不诚实的节点获得记账权,乱记,诚实的节点不会接受这个交易,诚实节点会向上追溯,链接到上面去。

抛弃不诚实的节点。

  • 那么问题来了,不诚实的节点能做到double spending吗?
    不行,如果不合法,诚实节点不会接受。

  • 那能不能分叉攻击呢?
    也不行,因为挖矿的时候,设置的block header里要填上前一个区块的hash,所以要差到前面的区块的话,一开始就要差到前面。

分叉攻击的目的是什么? 干掉其他链。开始m->a 成功后,非要再来个下面的m->m, 干掉下面的m->a
如何防范? 后面跟一个区块后,后面再跟6个区块,然后才认为前面的是不可篡改的。
一个区块是10分钟。
mining 机制的设立为了维护系统安全性

假设大部分的算力掌握在诚实的矿工手里,也不能保证所有写入区块链的交易是合法的。挖矿给出的是概率上的保证。

  1. btc 网络 : the bitcoin network
    用户把 交易发送的btc网络上,节点收到交易,把这些交易打包到区块里,然后把区块发布到比特币网络上。
    那么btc网络怎么传播呢?

application layer: bitcoin block chain
network layer: p2p overlay network

这个p2p节点很简单,每个节点都是对等的
simple ,robust,but not efficient
消息节点采用flooding
邻居节点是随机的,不考虑网络拓扑,这样增强了鲁棒性(robust),但是降低了效率 。
转发的前提是这个交易是合法的,
每个节点要维护一个等待上链的交易集合:
传播属于best effort
越是大的区块,在网络上传播越慢
带宽是瓶颈。限制是1m

挖矿难度

H(block header) <= target
采用的是SHA-256
通俗来说要是合法的区块,要求hash 前面有多少个0

51% attack
出块 时间是10min
以太坊 出块速度变快为 15s ,就需要设置新的共识协议 ghost ,会产生了很多orphan block ,但是对orphan block 也会有奖励

如何调整挖矿难度?
2016个区块调整一下难度 ,每个区块十分钟,大概是14天调整一下区块。
调整公式: target= target x (actual time / expected time)

expected time = 2016 x10 min
actual time 最近的2016 个区块实际花费的时间

5 btc 脚本

6 分叉

比特币中的分叉类型全解析:Forking Attack、Deliberate Fork 与 Protocol Fork

P2SH (Pay-to-Script-Hash) 详解

  1. 匿名性

bitcoin and anonymity

bitcoin 匿名性<银行存款< 现金

bitcoin 完全公开

如何保证匿名性: 建议出入使用不同账户但是找零

7.1 找零
把不同的地址关联在一起: 找零
输出地址之间有可能是一部分是同一个的。
但是找零的地址虽然不是固定位置,但是可以分析出来 。
7.2 资金转入转出
bitcoin 和实体账户换钱
怎么办? 去交易所、场外交易
7.3 用btc 支付
在实体世界用btc 支付
交易费贵
等待确认时间长
引起隐私泄露,你的虚拟账户和真实世界产生联系了

hide your identity from whom?
在application layer 层
但是可以在network layer

在线钱包、交易所 天然的 coin mixing

不可篡改实际上对隐私保护并不合适,是摘难性的,账户之间的关联性是要小心的
可摘难性(NP-hardness)解释

7.5 零知识证明 (zero-knowledge proof)
零知识证明是指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无序透露除该成熟时正确的歪的忍者信息

eg: 数字签名 不一定是零知识证明,因为透露了公钥

7.6 同态隐藏
如果x,y 不同,那么他们的加密函数值 e(x),e(y) 也不相同
给定e(x)的 值,很难翻推出x的值
给定e(x) 和 e(y)的值,我们可以很容易地计算出某些关于x,y 的加密函数值。
同态加法: 通过ex和 ey 计算出e(x+y)的 值
同态乘法: 通·过ex 和 ey 计算出e(xy)的值
扩展到多项式

同态隐藏(Homomorphic Hiding)

虚拟货币编号不能是央行产生的,这样信息泄漏了。

和 bitcoin 不一样。 零币就是破坏了关联性。
为什么这些匿名性 不是主流货币: 1. 性能不行, 2. 对初始化要求比较高。3. 需要强匿名性的用户不是很多。4. 和实体发生交互的时候还是要暴露身份。

零钞(Zerocash)和零币(Zerocoin)

Bitcoin区块链的创世区块溯源

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

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

相关文章

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言&#xff1a;为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时…

32单片机——LED

LED原理图如图所示&#xff1a; 代码 DS0和DS1每过500ms一次交替闪烁&#xff0c;实现类似跑马灯的效果 GPIO输出配置步骤 &#xff08;1&#xff09;使能对应GPIO时钟 STM32在使用任何外设之前&#xff0c;我们都要先使能其时钟&#xff08;下同&#xff09;。本实验用到…

贪心算法和遗传算法优劣对比——c#

项目背景&#xff1a;某钢管厂的钢筋原材料为 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 种规格 &#xff0c;现用贪心算法和遗传算法两种算法进行计算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…

【Java篇】一法不变,万象归一:方法封装与递归的思想之道

文章目录 Java 方法的使用&#xff1a;从基础到递归的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定义1.3 方法调用的执行过程1.4 实参和形参的关系1.5 没有返回值的方法 二、方法重载2.1 为什么需要方法重载2.2 方法重载的概念2.2.4 C 和 Java 的比较&…

实验5 逻辑回归

实验5 逻辑回归 【实验目的】掌握逻辑回归算法 【实验内容】处理样本&#xff0c;使用逻辑回归算法进行参数估计&#xff0c;并画出分类边界 【实验要求】写明实验步骤&#xff0c;必要时补充截图 1、参照“2.1梯度下降法实现线性逻辑回归.ipynb”和“2.2 sklearn实现线性逻辑…

思维训练让你更高、更强 |【逻辑思维能力】「刷题训练笔记」假设法模式逻辑训练题(1-5)

每日一刷 思维训练让你更高、更强&#xff01; 题目1 谁在说谎&#xff0c;谁拿走了零钱&#xff1f; 姐姐上街买菜回来后&#xff0c;就随手把手里的一些零钱放在了抽屉里&#xff0c;可是&#xff0c;等姐姐下午再去拿钱买菜的时候发现抽屉里的零钱没有了&#xff0c;于是&…

用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件

需求 需求&#xff1a; 1.将execl文件中的A列赋值给json中的TrackId&#xff0c;B列赋值给json中的OId 要求 execl的每一行&#xff0c;对应json中的每一个OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…

【Python】dash-fastapi前后端搭建

概述 项目中需要快速搭建一个前后端系统&#xff0c;涉及到dash-fastapi架构的时候&#xff0c;对该架构的时候进行总结。本文主要总结的是对该架构的基本使用&#xff0c;后续再对该架构的项目源码进行总结分析 此处实现一个小的demo&#xff0c;迷你任务管理器&#xff0c;…

IDEA中链接使用mysql数据库

一、连接mysql 1. 打开idea&#xff0c;在右上角侧边栏有数据库database插件&#xff0c;打开侧边栏点击加号->数据源&#xff0c;可以看到支持很多数据库&#xff0c;选择mysql。 2. 首次使用需要下载驱动程序&#xff0c;不然连接数据库会报错。找到mysql&#xff0c;点击…

程序编译生成的文件

目录 .i 文件 .s 文件 .o文件 总结 在 C 编程中&#xff0c;.i、.s和 .o 文件是编译过程中生成的不同阶段的文件&#xff0c;它们代表不同的含义&#xff1a; .i 文件 全称 &#xff1a;预处理后的文件&#xff08;Intermediate File&#xff09;。 含义&#xff1a;.i文件…

[S32K]SPI

SpiShiftClockidleLevel: CLK空闲时电平(CPOL)&#xff1b; SpiDataShifrEdge:数据移位边沿(CPHA)&#xff1b; SpiDataWidth: SpiTransferStart: MSB(高位起始)&#xff0c;LSB(低位起始)&#xff1b;&#xff1b; SpiHwUnit: 这是一个具体的硬件&#xff1f; SpiDataShiftE…

系统思考:客户价值

“真正的市场竞争&#xff0c;不是比谁更能制造产品&#xff0c;而是比谁更能创造价值。” ——杰夫贝索斯 在组织辅导中&#xff0c;我经常问团队一个问题&#xff1a;“我们的客户是谁&#xff1f;”大多数人的第一反应是——“支付费用的就是客户。” 这在过去的市场扩张阶…

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术在各个领域都有着广泛的应用&#xff0c;而 ArcGIS Pro 作为一款功能强大的 GIS 软件&#xff0c;为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里&#xff0c;addWeighted 函数的作用是对两个图像进行加权求和&#xff0c;常用于图像融合、图像过渡等场景。函数如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1&#xff1a;第一个输入图…

Tcp网络通信的基本流程梳理

先来一张经典的流程图 接下介绍一下大概流程&#xff0c;各个函数的参数大家自己去了解加深一下印象 服务端流程 1.创建套接字&#xff1a;使用 socket 函数创建一个套接字&#xff0c;这个套接字后续会被用于监听客户端的连接请求。 需要注意的是&#xff0c;服务端一般有俩…

leecode797.所有可能的路径

深度优先搜索 class Solution { private:vector<vector<int>> result;vector<int> temp;void allPathsSourceTarget(vector<vector<int>> &graph,int v){if(vgraph.size()-1)result.push_back(temp);else{for(auto& adjVertex:graph[v]…

第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red和 Black 。 通过对 任何…

微信小程序threejs三维开发

微信小程序threejs开发 import * as THREE from three; const { performance, document, window, HTMLCanvasElement, requestAnimationFrame, cancelAnimationFrame, core, Event, Event0 } THREE .DHTML import Stats from three/examples/jsm/libs/stats.module.js; im…

jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.

无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样&#xff0c;还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…