区块链系统:签名

这篇具有很好参考价值的文章主要介绍了区块链系统:签名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        签名算法是使用私钥签名,公钥验证的方法,对一个消息的真伪进行确认。如果一个人持有私钥,他就可以使用私钥对任意的消息进行签名,即通过私钥sk对消息message进行签名,得到signature

signature = sign(message, sk);

        签名的目的是为了证明,该消息确实是由持有私钥sk的人发出的,任何其他人都可以对签名进行验证。验证方法是,由私钥持有人公开对应的公钥pk,其他人用公钥pk对消息message和签名signature进行验证:

isValid = verify(message, signature, pk);

如果验证通过,则可以证明该消息确实是由持有私钥sk的人发出的,并且未经过篡改。

数字签名算法在电子商务、在线支付这些领域有非常重要的作用,因为它能通过密码学理论证明:

  1. 签名不可伪造,因为私钥只有签名人自己知道,所以其他人无法伪造签名;
  2. 消息不可篡改,如果原始消息被人篡改了,对签名进行验证将失败;
  3. 签名不可抵赖,如果对签名进行验证通过了,签名人不能抵赖自己曾经发过这一条消息。

简单地说来,数字签名可以防伪造,防篡改,防抵赖

        对消息进行签名,实际上是对消息的哈希进行签名,这样可以使任意长度的消息在签名前先转换为固定长度的哈希数据。对哈希进行签名相当于保证了原始消息的不可伪造性。

        我们来看看使用ECDSA如何通过私钥对消息进行签名。关键代码是通过sign()方法签名,并获取一个ECSignature对象表示签名:

const bitcoin = require('bitcoinjs-lib');

let
message = 'a secret message!', // 原始消息
hash = bitcoin.crypto.sha256(message), // 消息哈希
wif = 'KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617',
keyPair = bitcoin.ECPair.fromWIF(wif);
// 用私钥签名:
let signature = keyPair.sign(hash).toDER(); // ECSignature对象
// 打印签名:
console.log('signature = ' + signature.toString('hex'));
// 打印公钥以便验证签名:
console.log('public key = ' + keyPair.getPublicKeyBuffer().toString('hex'));

ECSignature对象可序列化为十六进制表示的字符串。

在获得签名、原始消息和公钥的基础上,可以对签名进行验证。验证签名需要先构造一个不含私钥的ECPair,然后调用verify()方法验证签名:

const bitcoin = require('bitcoinjs-lib');
let signAsStr = '304402205d0b6e817e01e22ba6ab19c0'
              + 'ab9cdbb2dbcd0612c5b8f990431dd063'
              + '4f5a96530220188b989017ee7e830de5'
              + '81d4e0d46aa36bbe79537774d56cbe41'
              + '993b3fd66686'
let
    signAsBuffer = Buffer.from(signAsStr, 'hex'),
    signature = bitcoin.ECSignature.fromDER(signAsBuffer), // ECSignature对象
    message = 'a secret message!', // 原始消息
    hash = bitcoin.crypto.sha256(message), // 消息哈希
    pubKeyAsStr = '02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c',
    pubKeyAsBuffer = Buffer.from(pubKeyAsStr, 'hex'),
    pubKeyOnly = bitcoin.ECPair.fromPublicKeyBuffer(pubKeyAsBuffer); // 从public key构造ECPair
// 验证签名:
let result = pubKeyOnly.verify(hash, signature);
console.log('Verify result: ' + result);

注意上述代码只引入了公钥,并没有引入私钥。

修改signAsStrmessagepubKeyAsStr的任意一个变量的任意一个字节,再尝试验证签名,看看是否通过。

比特币对交易数据进行签名和对消息进行签名的原理是一样的,只是格式更加复杂。对交易签名确保了只有持有私钥的人才能够花费对应地址的资金。

小结

通过私钥可以对消息进行签名,签名可以保证消息防伪造,防篡改,防抵赖。文章来源地址https://www.toymoban.com/news/detail-741337.html

到了这里,关于区块链系统:签名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Blind Signature盲签名与fabric区块链结合的应用

    盲签名的概念 首先由 David Chaum 于1982年提出,盲签名实现了签名者对发送者的消息进行签名,却不能知道签名者消息的具体内容。 相当于将文件放入信封,签名者在信封上对文件进行签名,而不知道具体的文件内容。 盲签名的实现方式 盲签名的实现方式有很多,比如基于

    2024年02月03日
    浏览(36)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第三套区块链系统部署与运维

    第三套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 根据题意: 3个独立组织以及6个节点,网络拓扑为星型网络,并且在联盟链中需实现2个数据隔离场景(group1、group2) 所以需要agencyA[两个节点,1,2群组],agencyB[两个节点,1群组],agencyC[两个节点,2群组] 1.使用给定工

    2024年02月05日
    浏览(69)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第二套区块链系统部署与运维

    第二套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 docker: 20.10.21 webase-deploy : 1.5.5 mysql: 8.0.34 使用 build_chain.sh 脚本文件进行搭建区块链 ,要求: 四节点,默认配置,单机,docker

    2024年02月08日
    浏览(111)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第五套区块链系统部署与运维

    第五套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 此题在官网有例子如图: 每个机构拥有两个节点,机构A属于中心,属于群组1,2,3, 机构B只属于群组1, 机构C 只属于群组3,机构D只属于群组2。 然后根据此图编写ipconf文件,使用文件形式搭建节点【题目没有指定

    2024年02月04日
    浏览(51)
  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第一套区块链系统部署与运维

    第一套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 题意: 要求搭建一条四节点的区块链系统,我们选择使用fisco作为此次测试的链子 我们使用build_chain.sh进行构建单机四节点,并且使用官方的默认端口【正式比赛大概率不会用默认端口,会有详细的说明使用什么端

    2024年02月08日
    浏览(66)
  • 【Python】查看当前 GPU一些资源信息 | 区块链 面试题:区块链技术中,如何防止“双花”攻击?| 共识机制,区块确认,交易签名,UTXO模型,51%攻击防护

      “当你低落时,就请穿上节日盛装。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博主🏅   🏆[5]

    2024年02月06日
    浏览(52)
  • OpenHarmony应用签名 - 系统应用签名(4.0-Release)

    开发环境:Windows 11 DevEco Studio 版本:DevEco Studio 4.0 Release(4.0.0.600) SDK 版本:4.0.10.15(Full SDK) 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 示例工程:Applications_SystemUI OpenHarmony开源社区提供了标准系统上的部分系统应用,如桌面、SystemUI、设置等,为开发者提

    2024年04月11日
    浏览(41)
  • 【区块链】区块链技术:应用、代码

    区块链是一种去中心化的分布式账本技术,它可以记录交易信息、数字资产等数据,并且保证数据的安全性和不可篡改性。区块链技术的核心是由多个区块组成的链式结构,每个区块包含了一定数量的交易信息和一些元数据,同时还包含了前一个区块的哈希值,这样就形成了

    2024年02月08日
    浏览(38)
  • 区块链技术与应用-----区块链概念

    一,智能社会与区块链技术 当前我们进入智能化社会发展时期,新兴的5G,量子计算,云计算,物联网,人工智能,区块链等新兴IT技术,将支撑人类迈入智能化社会。区块链作为智能化社会的关键技术之一,其核心价值是实现社会关系运行的智能化。 二,区块链的概念与体

    2024年02月07日
    浏览(43)
  • 区块链技术的应用行业应用

    区块链是一个信息技术领域的术语,该技术融合了涉及数学、密码学、互联网和计算机编程等众多领域的专业技术。简单来说,区块链是一个分布式的共享数据库,按照时间顺序将数据区块相连,组合成一种链式数据结构,并以密码学方式保证不可篡改和不可伪造。北京木奇

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包