PGP 遇上比特币

2023-11-30 17:01
文章标签 遇上 比特 pgp

本文主要是介绍PGP 遇上比特币,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

重复使用 PGP 密钥作为比特币密钥

介绍

在数字安全领域,密码学在确保数据的完整性和真实性方面发挥着至关重要的作用。 一种广泛使用的加密技术是使用 Pretty Good Privacy (PGP1)。 PGP 为安全通信(例如电子邮件、文件传输和数据存储)提供加密和身份验证。

PGP 可以使用与比特币相同的椭圆曲线,称为 secp256k1,因此可以与比特币兼容并利用。 现有的 PGP 椭圆密钥密钥对可以重复用作比特币密钥对,因此我们可以

  • 将比特币发送到从 PGP 公钥派生的地址。 只有用 PGP 私钥花费比特币。

  • 对可信任的来自 PGP 用户的消息进行签名。

在本文中,我们将深入研究可信预言机使用 secp256k1 椭圆曲线生成 PGP 签名的示例,该签名使用 sCrypt 在链上进行验证和使用。

生成 PGP 签名

第一步是确保您的机器安装了 GnuPG。 这是一个使用非常广泛的程序,您的系统上可能已经安装了它。

生成私钥

运行以下命令:

gpg --full-gen-key --expert

这将运行一个交互式提示来生成您的密钥。 当它要求您选择 ECC 密钥进行签名时,使用“secp256k1”作为曲线。

完成后,您的系统上将存储一个新密钥。 要列出所有密钥,请运行以下命令:

gpg --list-keys --with-fingerprint

创建签名

由于我们将在比特币中验证的签名需要采用原始形式 (r, s),因此我们准备了一个工具,可以从 GnuPG 生成的文件中提取此数据。 使用以下命令从 GitHub 克隆它:

git clone https://github.com/sCrypt-Inc/parse-pgp-sig && cd parse-pgp-sig

该工具是原始工具的一个分支,由 Mark Blundeberg 编写。

现在,让我们对存储在“testmsg”文件中的消息进行签名。 首先,编辑“makesig.sh”中的密钥 ID 以使用您在上一步中创建的密钥的 ID。 然后运行以下命令:

./makesig.sh

这将创建一个名为“testmsg.sig”的文件,其中包含签名。 因为我们还需要公钥,所以我们必须将其导出,如下所示:

gpg --output pubkey.gpg --export <KEY_ID>

最后,运行以下命令:

./parsesig.py

这将以正确的格式打印所需的所有数据,以用于验证。 输出应如下所示:

pubkey.gpg loaded, key ID AF73C8F7B546F94B39317588BC4509E6210D4B78
Public key point coordinates:
x = 48421684640566418104679532805542050894296452248858999768503364580534732096841
y = 27832515582888013475460648727797934257300201948678282835754427898215825506626
Message: b'Hello world!\n'
Message hex: 48656c6c6f20776f726c64210a04001308001d162104af73c8f7b546f94b39317588bc4509e6210d4b7805026453693704ff00000023
Sig:
r: 64359296802826103123327210017080540130282890114880640962625134547151700407256
s: 8795100933587794005356181940782496292717652651227485898667966611241902738847
Signature validity on message: True

在比特币中验证签名

这是一个简单的 sCrypt 智能合约,它可以验证我们刚刚创建的签名。


export class Verify extends SmartContract {@prop()msg: ByteStringconstructor(msg: ByteString) {super(...arguments)this.msg = msg}@method()public unlock(sig: Signature, pubKey: Point) {// Hash message.const hashInt = byteString2Int(reverseByteString(sha256(this.msg), 32) + toByteString('00'))// Verify signature.assert(SECP256K1.verifySig(hashInt, sig, pubKey),'Sig invalid')}
}

正如我们所观察到的,已部署的合约将原始消息存储为合约属性。 一旦有人调用“unlock”公共方法,它就会对该消息进行哈希处理并将其转换为整数,然后使用我们的“SECP256K1”库继续验证签名。 您可以从我们的 scrypt-ts-lib 包中导入该库。

使用上面的数据,我们将初始化并调用合约,如下所示:


await Verify.compile()
instance = new Verify(toByteString('48656c6c6f20776f726c64210a04001308001d162104af73c8f7b546f94b39317588bc4509e6210d4b7805026453693704ff00000023'))...const sig: Signature = {r: 64359296802826103123327210017080540130282890114880640962625134547151700407256n,s: 8795100933587794005356181940782496292717652651227485898667966611241902738847n,
}const pubKey: Point = {x: 48421684640566418104679532805542050894296452248858999768503364580534732096841n,y: 27832515582888013475460648727797934257300201948678282835754427898215825506626n,
}const { tx: callTx, atInputIndex } = await instance.methods.unlock(sig,pubKey,{fromUTXO: getDummyUTXO(),} as MethodCallOptions<Verify>
)const result = callTx.verifyScript(atInputIndex)

一旦我们验证了该消息,我们就可以在我们的合约中使用它,并确信它来自给定的 PGP 用户。


参考:

  • https://gist.github.com/markblundeberg/af59d7cd234cbdb14dcf9e00f0ea2c17

[1] Hal Finney 是一位早期的比特币贡献者,他从比特币的创造者中本聪那里收到了第一笔比特币交易,他在 PGP 公司工作,在那里他开发了一些最早的 PGP 代码。

这篇关于PGP 遇上比特币的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437815

相关文章

338. Counting Bits 比特位计数

https://leetcode-cn.com/problems/counting-bits/description/ Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary represent

问题1.用PGP解密出keybox.xml,过程中报“Can‘t check signature: No public key”如图,这个正常吗?如何解决?

问题1.我要写Google attenstation key到设备。就需要keybox.xml生成keybox.kdb文件。而测试机构给我们的是加密的文件,需要用PGP解密出keybox.xml,过程中报“Can’t check signature: No public key”如图,这个正常吗?如何解决? 在处理 GPG 解密时遇到的错误 “Can’t check signature: No

比特币-系统架构师(十四)

1、传统的软件生命周期划分为:软件定义、软件开发、软件运行、软件维护。 2、以下关于区块链所用系统重挖矿行为描述中,错误的是()。 A旷工挖矿取得区块链计账权,同时获得代币 B挖矿本质是尝试计算一个hash碰撞 C挖矿本质是一种工作量证明机制 D防止比特币双花攻击 解析: 比特币通过“挖矿”来生成新的比特币,实质是计算机解决一项复杂的数学问题,来保证比特币网络分布式记账的一致

当 Alphalens 遇上 DolphinDB:单因子分析利器再升级

多因子投研一直都是量化投资领域当中的重要基石,Alphalens 和 DolphinDB,作为知名的单因子分析框架和基于高性能时序数据库的时序计算平台,无疑是备受瞩目的两大因子投研利器。当二者相结合,将碰撞出怎样令人期待的火花? 1. Alphalens 和 DolphinDB 的简介 Alphalens 是 Quantopian 用 Python 开发的一个因子分析(评价)工具包。我们用 D

全新量子计算技术!在硅中可以生成大规模量子比特

内容来源:量子前哨(ID:Qforepost) 文丨沛贤/浪味仙  排版丨沛贤 深度好文:1600字丨6分钟阅读 摘要:研究人员利用气体环境在硅中形成被称为“色心”的可编程缺陷,首次利用飞秒激光,实现了在掺氢硅中按需精准创建量子比特,有助于实现更安全、更高效的量子互联网。 图片:考沙利亚-朱里亚(Kaushalya Jhuria)在实验室测试用于在硅片中制造量子

香港Web3时代:比特币可以成为「收益性资产」吗?

原文标题:《CAN BITCOIN BE A PRODUCTIVE ASSET?》撰文:Pascal Hügli编译:Chris,Techub News本文来源香港Web3媒体 Techub News 比特币正在经历一场大的变化,人们对其性质有不同的看法。有些人将其视为日常交易的货币,另一些人则将其看作是现代等同于黄金的储值工具,还有一些人认为它是一个去中心化的全球平台,用于保护和验证发生在区块

探索比特币多面体

目录 前言 一、比特币挖矿 1.挖矿设备的演化 2.矿池 二、比特币脚本 1.交易结构 2.交易的输入 3.交易的输出 4.P2PK      输入输出脚本的形式      实际执行情况 5.P2PKH           输入输出脚本的形式      实际执行情况 6.P2SH      输入输出脚本的形式 7.进一步说明 8.多重签名 9.脚本执行 10

中国首台!紧随美国,重磅发布100比特中性原子量子计算机

2024年6月11日上午,“武汉量子论坛—2024”隆重开幕,国家自然科学基金委员会主任窦贤康院士,武汉大学校长张平文院士,以及叶朝辉、徐红星、祝世宁等院士出席大会。在会议上,中科酷原重磅发布国内首台原子量子计算机——汉原1号,并携真机亮相。 图:武汉量子论坛—2024 来源:中科酷原 图:汉原1号真机 来源:中科酷原 汉原1号采用机柜式设计,由物理机柜和两个

新研究使VQE算法成功扩展到12个量子比特,误差抑制在两个数量级

量子计算化学已成为量子计算的一个潜在应用领域。 混合量子-经典计算方法,如变分量子本征求解器,已被设计为解决量子化学问题有希望的解决方案。但该计算方法面对着因理论复杂性和实验不完善所带来的挑战,在实现可靠和准确结果方面被限制。因此,求解电子结构的实验工作,仍然局限于不可扩展或经典可模拟的假设,或者局限于几个具有较大误差的量子比特。 6月11日,中国科学技术大学郭少俊、钱浩然、龚明、朱晓

比特币对接文档

比特币对接 地址分类 p2sk(``)p2skh(主网地址是以"1"开头,例如:16dN3XhaTejyZFy4hWompK2x8de2T46wA8; 测试网是以"m"或"n"开头, 例如:mvZjn2485hwxjVPJoLAZVyJKUDn8aGpBy5)p2sh (主网地址是以"3"开头,例如:33ZzFZZJcvtnLBWRdne6F9SpD9Rc7sjSDX; 测试网以"2"开头,例