多重验证及比特币脚本中的P2PK、P2PKH、P2SH机制

在数字货币的世界中,安全性和有效性是核心要素。其中,二重验证作为一种强化账户安全的重要手段,以及比特币赎回脚本系统中的P2PK、P2PKH、P2SH等交易类型,对于理解区块链技术的底层逻辑和实现方式至关重要。本文将对这些概念进行深度解析。

多重签名

首先,我们来理解多重签名。多重签名(Multisignature, MultiSig)技术是一种应用于数字货币交易的安全措施,其基本思想是要求多个预设的私钥共同参与到一笔交易的签名和确认过程中,只有当达到预定数量的私钥签名后,这笔交易才能被认为有效并被区块链网络接受。多重签名技术显著提高了资金的安全性和管理灵活性,因为它可以在一定程度上防止单点故障,避免单一私钥丢失或被盗带来的资产损失风险。

    地址生成:

        创建一个多签名地址时,需要指定所需的签名总数(N)和至少需要多少个签名(M)才能解锁交易,通常表示为M-of-N。

        对于每个参与者,都会生成各自的公钥,并将这些公钥合并生成一个多重签名地址。

    交易构造:

        发起一笔多重签名交易时,交易输出(UTXO)会关联到上述多重签名地址,并在锁定脚本(scriptPubKey)中嵌入多重签名规则。

    签名收集:

        当需要花费这笔资金时,需要获得M个私钥持有人的签名,每个参与者用自己的私钥对交易数据进行签名。

    交易提交与验证:

        收集到足够的签名后,将这些签名连同原始交易信息一起组成一个新的交易输入脚本(scriptSig)。

       区块链网络中的每个节点在验证交易时,会检查输入脚本中的签名是否满足多重签名规则,只有当满足M-of-N条件时,交易才会被认为是有效的,并最终被确认到区块链上。

在比特币网络中,多重签名可以通过标准的P2SH(Pay to Script Hash)或 native SegWit (P2WSH) 地址格式实现,而在其他区块链平台上也可能有不同的实现方法。这项技术已经被广泛应用在加密货币钱包、企业级财务管理、冷热钱包隔离策略、去中心化金融(DeFi)等领域,以增强资产管理和交易的安全性。

接下来,我们将目光转向比特币交易赎回脚本中的三种常见类型:P2PK、P2PKH和P2SH。

P2PK(Pay to Public Key):

这是一种直接支付到公钥的交易类型。在比特币交易中,用户通过私钥生成公钥,然后直接将比特币发送到这个公钥上。接收者需使用对应的私钥解锁交易。然而,由于公钥的长度较大,这种交易模式在存储和处理上效率较低,因此并未广泛采用。

P2PK(Pay to Public Key)是比特币早期的一种交易类型,它的底层原理基于比特币的公钥加密算法。在比特币网络中,每一个参与交易的实体都有自己的密钥对,包括一个公钥和一个私钥。公钥用于接受资金,私钥则用于证明所有权和花费资金。

P2PK的工作原理

  1. 公钥公开:在P2PK交易中,发送者直接指定接收者的公钥作为输出赎回脚本的一部分,这意味着任何人都可以看到这个公钥,但并不知道对应的私钥。
  2. 私钥签名:当接收者想要花费这笔资金时,他需要用他的私钥对交易进行数字签名。签名过程确保了只有持有相应私钥的人才能创建有效的交易请求。
  3. 验证交易:网络上的每个节点在验证交易时,会使用公钥验证数字签名的有效性。如果签名正确,那么可以确认发起交易的是拥有对应私钥的实体,交易得以通过网络共识机制确认并添加到账本(区块链)中。

尽管P2PK直截了当,但它在实际应用中存在一些不足,例如公钥数据量相对较大,不利于存储和传播效率。相比之下,P2PKH通过引入公钥哈希解决了这个问题,它要求资金转到公钥哈希(即比特币地址)而非完整的公钥,从而提高了交易赎回脚本的紧凑性和安全性。此外,P2PKH还提供了额外的层次间接保护,因为公钥本身不直接暴露在区块链上。

P2PKH(Pay to Public Key Hash)

这是比特币中最常见的交易类型。它改进了P2PK模式,将公钥哈希(即地址)作为交易目标,而不是直接使用公钥。这种方式不仅缩短了交易数据大小,也提升了隐私保护,因为哈希值并不能反推出原始公钥。发送者将比特币发至收款人的地址,收款人再用对应私钥进行解密,完成交易。

P2PKH(Pay to Public Key Hash)是比特币中广泛使用的交易类型,它的底层原理建立在比特币的公钥加密体系和散列函数基础之上。以下是P2PKH工作流程的详细说明:

  1. 公钥和私钥生成
    1. 首先,用户通过一个随机数生成器创建一个私钥,这个私钥是一个非常大的整数,用于签署交易以证明所有权。
    2. 私钥经过椭圆曲线加密算法(ECDSA)计算得出对应的公钥,公钥是一串可公开的长字符串。
  2. 公钥哈希
    1. 公钥接着被通过SHA256算法进行哈希运算,然后再经过RIPEMD160算法再次哈希,生成一个20字节的公钥哈希值,也称为地址标识符。
    2. 这个公钥哈希值(或者经过Base58Check编码后的版本,即我们日常看到的比特币地址)被用来接收比特币。
  3. 交易结构
    1. 当发送者想要向一个P2PKH地址发送比特币时,他们在交易的输出部分(UTXO,未花费交易输出)设定一个锁定赎回脚本(scriptPubKey),该赎回脚本包含一个OP_DUP、OP_HASH160、推送公钥哈希、OP_EQUALVERIFY、OP_CHECKSIG的操作码序列。这意味着要花费这笔资金,必须提供一个能够解开这个赎回脚本的公钥及其对应的合法签名。
  4. 解锁交易
    1. 接收者在构建一笔新的交易时,他们需要提供输入赎回脚本(scriptSig),该赎回脚本包含他们的公钥和用私钥对交易进行的数字签名。
    2. 区块链上的节点在验证这笔交易时,会执行输入赎回脚本和锁定赎回脚本。首先,检查提供的公钥是否匹配先前的公钥哈希;其次,通过公钥验证签名的有效性。两者均验证通过后,交易被认为是有效的,并可以被矿工打包进区块中。

通过这种方法,P2PKH不仅增强了隐私,因为它在网络中仅广播地址而不是公钥,而且通过使用哈希简化了地址的表示形式,同时保持了交易的安全性,因为只有拥有相应私钥的人才能成功地解锁并转移资金。

P2SH(Pay to Script Hash)

P2SH则是进一步提升比特币交易灵活性与扩展性的方案。在这种模式下,交易的目标是一个赎回脚本哈希,实际的锁定和解锁条件被封装在一个赎回赎回脚本中。只有当提供的输入赎回脚本执行结果与该哈希匹配时,交易才能被解锁。P2SH极大地支持了多重签名、时间锁等复杂交易场景,并且能兼容未来的新型交易类型,具有很高的前瞻性。

P2SH(Pay to Script Hash)的底层原理:

P2SH是一种特殊的比特币交易输出类型,它允许将付款发送至一个特定的脚本哈希值而不是直接到一个公钥哈希地址。这种机制允许复杂脚本隐藏在交易输出中,使得交易数据更加简洁,同时也提高了灵活性和安全性。

P2SH的工作原理

  1. 创建赎回脚本: 用户定义一个复杂的脚本作为“赎回脚本”,例如一个多重签名脚本,要求多个签名者中的一定数量签名来解锁资金。
  2. 哈希脚本: 将此赎回脚本经过SHA256和RIPEMD160双层哈希运算得到一个脚本哈希值,这个哈希值就是所谓的P2SH地址。
  3. 交易输出: 发送者创建交易输出时,锁定脚本(scriptPubKey)设置为OP_HASH160 + 脚本哈希 + OP_EQUAL。这样,任何想花费这笔资金的人都需要提供一个能解密这个脚本哈希的完整赎回脚本来证明他们有权花费这些资金。
  4. 花费输出: 接收者在花费这个P2SH输出时,在输入脚本(scriptSig)中提供完整的原始赎回脚本以及必要的签名和其他数据来满足赎回脚本的要求。验证节点会执行这个赎回脚本,如果所有条件都被满足,则交易被认可为有效。
  5. BUG:在比特币早期开发过程中,有过与脚本语言执行相关的bug,由于早期的多重签名交易中CHECKMULTISIG指令的执行顺序 bug,导致在P2SH多重签名脚本中,解锁脚本需要以OP_0开头(或一个无效的签名占位符),以便正确处理多签情况下的签名计数。这个“bug”后来并没有被视为严重错误,而是成了实际应用中的一种约定俗成的做法,并且在后续的软分叉升级(如BIP 66)中得到了标准化和修正。

POB

全称为Proof of Burn(燃烧证明),是一种共识机制的概念,在分布式账本或区块链系统中用于决定谁有权参与区块创建(挖矿)的过程。不同于工作量证明(Proof of Work, PoW)、权益证明(Proof of Stake, PoS)等常见共识算法,POB通过“销毁”或“牺牲”一定数量的代币来获得未来在网络中的某种权利或特权。

POB的核心理念在于:用户通过将他们的代币发送到一个不可逆转的地址(即黑洞地址),从而永久地从流通中移除这些代币,这种行为被视为一种对网络的长期承诺和投资。燃烧代币的行为被记录在区块链上,作为一种证明,显示了该用户愿意牺牲自己的经济利益以换取网络内的权力。燃烧的代币越多,理论上在后续的区块生产或决策过程中的权重可能越大。

以下是POB机制的详细步骤及特点:

代币燃烧:用户选择一定数量的代币并将它们发送到一个特殊的、无法解密且无人能控制的地址(通常是预先设定的无效地址)。这个过程不可逆,意味着一旦代币被发送到这个地址,就永远无法再使用。

权重积累:每燃烧一个单位的代币,用户就会在POB系统中累积相应的权重或权益。这个权重可以用来竞争成为区块生产者,或者在某些情况下获取投票权、手续费减免等特权。

公平分配:燃烧代币的数量决定了用户在网络中的相对影响力,而非像PoW那样依赖于算力资源或PoS那样依赖于持有的代币总量。因此,POB有助于减少资源浪费,同时鼓励更广泛的社区参与和长期投资。

安全性与稳定性:通过牺牲实际价值的代币,POB增强了系统的安全性和稳定性,因为攻击者需要先付出高昂的成本(燃烧大量代币)才能尝试恶意操作。

激励机制:POB也作为一种经济激励手段,鼓励用户为了维护网络安全和稳定而自愿放弃部分代币。这有助于确保网络的可持续发展和用户的忠诚度。

在某个基于POB机制的DAO项目中,成员通过燃烧一定数量的代币来获取参与治理决策的资格。然而,为了保证重大决策的审慎和公正,项目的智能合约可能规定,任何涉及资金分配、修改规则等关键操作都需要通过多重签名机制来执行。

总结

总结来说,二重验证为加密货币资产提供了一种更高级别的安全保障,而比特币赎回脚本系统中的P2PK、P2PKH、P2SH交易类型,则从不同的维度优化了交易过程,既保证了安全性又提升了效率。深入理解和掌握这些概念和技术,有助于我们在数字货币世界中更好地保障资产安全,应对日益复杂的交易需求。未来,随着区块链技术的发展,我们期待看到更多创新的验证机制和交易形式的出现。

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

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

相关文章

使用rust实现九九乘法表

rust目前拥有接近c/c的运行速度以及更快的编码支持,所以是很值得学习得一门语言。rust的语法及设计理念与其他的语言也有许多的不同之处。比如其特有的所有权属性。可以让开发者快速的开发出高效的运行程序。对于内存的管理也有极好的管理方案。 在这里使用rust语言…

在Java中,Scanner类是用来获取用户输入的

在Java中,Scanner类是用来获取用户输入的。以下是一个简单的示例,展示如何使用Scanner类从控制台读取用户输入: java import java.util.Scanner; // 导入Scanner类 public class Main { public static void main(String[] args)…

基于jwt -用户离线检测的实现思路

其实思路很简单。就是,用户与系统交互的token。token的拦截时间 - token的创建时间 用户与系统交互的时间差值。只要这个时间差值为负数,就判定为离线。基于此,我们每次与系统交互,都需要重新创建token,从而不断刷新token的创建时间来给下次系统判定来使…

MyBatis复杂映射开发之多对多查询

多对多查询的模型 用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用。 多对多查询的需求:查询所有用户的同时查询出该用户对应的所有角色。 startuml !theme plain top to bottom direction skinparam linetype ortho cl…

C# 在exe中启动另外一个exe时的关闭方法

在C#中,如果你想要从一个exe程序中启动另一个exe程序,并希望在需要时能够关闭它。 一、启动外部exe程序: 使用System.Diagnostics.Process启动程序,代码如下: private void btnStart_Click(object sender, RoutedEve…

阿里云服务器使用教程_搭建网站教程_2024建站教程

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

自然语言处理(NLP)—— 语言学、结构的主要任务

1. 计算语言学的任务 1.1 自然语言处理任务——句法分析任务 1.1.1 词法(Syntatic tasks:Word level) 在自然语言处理中,词法分析主要涉及到词汇层面的处理,包括形态划分、分词、切分以及词性标注等任务。 1.1.1.1 形态划分&am…

XUbuntu22.04之显示实时网速(二百一十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

智能网联各地市政策盘点

本文旨在对2023年及2024年初各地市所出台的智能网联相关政策进行全面的梳理与总结。通过与此前发布的关于2023年和2024年初各部委、省、直辖市智能网联相关政策的盘点相互呼应,力求为读者呈现一个全面、系统的政策概览。 文 | 吴冬升 全文6000字,预计阅读…

轮询--一起学习吧之架构

一、定义 轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。这种方式是由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务&am…

html--3D爱心

文章目录 代码效果 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>爱心</title><style type"text/css">*{margin: 0px;border: 0px;}body{overflow: hidden;background-…

Docker-部署若依项目

文章目录 后端一、搭建局域网二、redis安装测试 三、MySQL安装四、后端项目放入位置及使用Dockerfile自定义镜像后端项目放入位置 前端配置检查各个端口是否启动nginx部署 首先得先把内部的文件给删除清空 docker images–查看有哪些文件 docker rmi -f ID–删除ID 后端 一、…

腾讯QQ推出AI聊天搭子;零一万物01AI宣布开源Yi-9B模型

&#x1f989; AI新闻 &#x1f680; 腾讯QQ推出AI聊天搭子&#xff0c;进军AI对话领域 摘要&#xff1a;腾讯QQ合作筑梦岛和混元助手&#xff0c;推出了AI对话功能“AI聊天搭子”&#xff0c;提供多种虚拟角色与用户实时互动&#xff0c;目前已开启测试。此外&#xff0c;抖…

STM32/GD32——I2C通信协议

芯片选型 Ciga Device — GD32F470系列 通讯规则 I2C协议&#xff08;或称IIC&#xff09;是由飞利浦&#xff08;现在的恩智浦半导体&#xff09;公司开发的一种通用的总线协议。它使用两根线&#xff08;时钟线和数据线&#xff09;来传输数据&#xff0c;支持多个设备共享…

智能设备 app 设计 —— 蓝蓝 UI 设计公司

今天给大家推荐是智能设备app设计&#xff0c;随着智能设备的逐渐普及随之操作app也越来越多&#xff0c;希望能给大家带来灵感 #日常灵感 #创意设计#UI提升#ui设计#app #设计案例分享|#设计 #产品设计#产品设计#设计灵感 #B端产品经理 #ui #产品 #美工 #交互 #产品经理 #开发 …

乐优商城(九)数据同步

1. 项目问题分析 现在项目中有三个独立的微服务&#xff1a; 商品微服务&#xff1a;原始数据保存在 MySQL 中&#xff0c;从 MySQL 中增删改查商品数据。搜索微服务&#xff1a;原始数据保存在 ES 的索引库中&#xff0c;从 ES 中查询商品数据。商品详情微服务&#xff1a;做…

python75-Python的函数参数,关键字(keyword)参数

在定义Python函数时可定义形参(形式参数的意思)这些形参的值要等到调用时才能确定下来,由函数的调用者负责为形参传入参数值。简单来说,就是谁调用函数,谁负责传入参数值。 关键字(keyword)参数 Python函数的参数名不是无意义的,Python 允许在调用函数时通过名字来传入参…

mysql 查看数据库、表的命令

查看所有的数据库 1.show databases; 2.select schema_name from information_schema.schemata\G \G 。以纵向报表的形式显示结果&#xff0c;方便查看。 查看mysql数据库的运行状态 status 选择数据库 use 库名 例 use TestDb 查看数据库中的表 show tables 查看表结构 de…

怎么在图片上直接编辑文字?3个方法教你轻松编辑

怎么在图片上直接编辑文字&#xff1f;随着技术的飞速发展&#xff0c;图片编辑已经成为我们日常生活和工作中不可或缺的一部分。在图片上直接编辑文字&#xff0c;不仅能够添加说明和标注&#xff0c;提高信息的传达效率&#xff0c;还能够增强图片的美观和设计感&#xff0c;…

qt练习案例

记录一下qt练习案例&#xff0c;方便学习qt知识点 基本部件 案例1 需求&#xff0c;做一个标签&#xff0c;显示"你好"知识点&#xff0c;QLabel画面 4. 参考&#xff0c;Qt 之 QLabel 案例2 需求&#xff0c;做一个标签&#xff0c;显示图片 知识点&#xff0c;…