多重签名

多重签名1
  在数字签名应用中,有时需要多个用户对同一个文件进行签名和认证。比如,一个公司发布的声明中涉及财务部、开发部、销售部、售后服务部等部门,需要的到这些部门签名认可,那么,就需要这些部门对这个声明文件进行签名。能够实现多个用户对同一文件进行签名的数字签名方案称作多重数字签名方案。
  多重签名就是多个用户对同一个消息进行数字签名。
  多重签名,可以简单的理解为一个数字资产的多个签名。签名标定的是数字资产所属和权限,多重签名预示着数字资产可由多人支配和管理。在加密货币领域,如果要动用一个加密货币地址的资金,通常需要该地址的所有人使用他的私钥(由用户专属保护)进行签名。那么,多重签名,就是动用这笔资金需要多个私钥签名,通常这笔资金或数字资产会保存在一个多重签名的地址或帐号里(就比特币而言,多重签名地址通常以3开头)。
多重签名2
  Alice和Bob怎么对同一个数字文件签名呢?不用单向散列函数,有两种选择:
  第一种选择是Alice和Bob分别对文件的副本签名,结果签名的消息是原文的两倍;
  第二种就是Alice首先签名,然后Bob对Alice的签名再进行签名。这是可行的,但是在不验证Bob签名的情况下就验证Alice的签名是不可能的。
  采用单向散列函数,很容易实现多重签名:
  (1)Alice对文件的散列签名。
  (2)Bob对文件的散列签名。
  (3)Bob将他的签名交给Alice。
  (4)Alice把文件、她的签名和Bob的签名发给Carol。
  (5)Carol验证Alice和Bob的签名。
  Alice和Bob能同时或顺序地完成第(1)步和第(2)步;在第(5)步中Carol可以只验证其中一人的签名而不用验证另一人的签名。

  关于 MultiSig(多重签名),从原理角度上讲,多重签名本身并不复杂,简单来说,一句话就够了:“用 m 把钥匙生成一个多重签名的地址,需要其中的 n 把钥匙才能花费这个地址上的比特币,m >= n,这就是 n/m 的多重签名”
  在实际的操作过程中,一个多重签名地址可以关联n个私钥,在需要转账等操作时,只要其中的m个私钥签名就可以把资金转移了,其中m要小于等于n,也就是说m/n小于1,可以是2/3, 3/5等等,是要在建立这个多重签名地址的时候确定好的。
相关图片

  多重签名给了加密货币腾飞的翅膀,让它单一单项支付的能力更具吸引力,让加密货币技术应用到各行各业成为可能。这里简单的罗列几个应用场景,供探索和思考:

  • 电子商务。比较常见的是2/3的模式。上面电子商务网站的例子,就是最典型的场景之一,目前已经有成功的案例了。延伸一下,这类应用本质就是中介,所以还可用在各类中介机构性质的服务上。
  • 财产分割。比如夫妻双方共有财产,可以使用1/2的模式,一个账户谁都可以使用,跟各自拥有帐号一样,好处是系统忠实记录了每个人的花销,闹掰的时候很容易清算。扩展到公司合伙经营,可以使用1/n模式,n个人合伙人,都可以直接支配共有资金,具体清算时,一目了然。
  • 资金监管。其实,这是多重签名的最直接作用,一笔钱需要多个人签名才能使用,任何一个人都无法直接动用资金,这在生活中太常见了,只要灵活设置多重签名的比重模式,就能解决生活中很多问题。比如,接着上面夫妻的例子,夫妻要储备一笔资金,供孩子上大学使用,在这之前谁都不能动,那么把模式改为2/2,不仅限制了夫妻双方,也给黑客攻击增加了难度。

  多重签名的设计,让各种业务去中心化充满无限可能。

http://www.frankyang.cn/2017/09/30/multisignature/

转载于:https://my.oschina.net/yangjiannr/blog/1546347

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 TRON 网络中,多重签名是一种常见的安全机制,它要求至少两个或以上的账户共同签署交易才能执行。TronWeb 是一种用于与 TRON 区块链交互的 JavaScript 库,可以帮助开发者实现多重签名。 下面是实现多重签名的基本步骤: 1. 创建多个账户:首先,需要创建多个 TRON 账户,并将这些账户添加到多重签名列表中。 2. 设置多重签名参数:在创建交易时,需要指定多重签名参数。这些参数包括最小签名数、签名权重和签名账户列表。 3. 签署交易:当交易创建后,需要让所有签名账户进行签名,直到达到最小签名数。 4. 广播交易:一旦达到最小签名数,交易将被广播到 TRON 网络中执行。 在 TronWeb 中,可以使用 `TronWeb.trx.multiSign()` 方法实现多重签名,该方法接受以下参数: - `transaction`:要签名的交易 - `privateKeys`:签名账户的私钥数组 - `callback`:签名完成后的回调函数 以下是一个示例代码,展示了如何使用 TronWeb 实现多重签名: ``` const TronWeb = require('tronweb'); const tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io', solidityNode: 'https://api.trongrid.io', eventServer: 'https://api.trongrid.io', privateKey: 'YOUR_PRIVATE_KEY' }); // 创建多个账户 const account1 = tronWeb.createAccount(); const account2 = tronWeb.createAccount(); const account3 = tronWeb.createAccount(); // 将账户添加到多重签名列表中 const multisigAddress = tronWeb.address.fromMultiPubKeys( [account1.publicKey, account2.publicKey, account3.publicKey], 2 // 最小签名数 ); // 创建交易 const transaction = await tronWeb.transactionBuilder.sendTrx( 'TO_ADDRESS', 1000000 ); // 设置多重签名参数 transaction.setMultisig(multisigAddress, 2); // 签署交易 const signedTransaction = await tronWeb.trx.multiSign( transaction, [account1.privateKey, account2.privateKey], (err, res) => { if (err) { console.error(err); } else { console.log(res); } } ); // 广播交易 const result = await tronWeb.trx.sendRawTransaction(signedTransaction); console.log(result); ``` 注意,这只是一个简单的示例,实际应用中需要进行更多的安全检查和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值