如何使用区块链制作数字签名文件?

5
我希望创建一个网站,需要用户登录,上传文档并使用blockchain单一签名或多个签名)进行签名,就像signaturablocksign一样。我已经看过这两个网站,并且大概了解它们的工作原理。但是我没有理解技术细节。
所以作为中级Python开发人员,我有一些问题,请回答:
  1. 从上传文档到我的网站到成功由所有方签署后下载的整体流程(技术上)。

  2. 如何生成私钥和公钥,我是否将它们与用户信息一起存储?

  3. 如何与api的区块链进行交互。我已经查看了API,但没有理解其中的内容。

2个回答

3

哎呀,对于一个新手来说在区块链上设定自己一个艰巨的目标。不过,这还是很可行的。我会按代码流的顺序回答你的问题。

如何生成私钥和公钥?我是否会将它们存储在用户信息旁边?

你不应该生成私钥。如果必要的话,至少使用客户端代码来生成它们。至于存储,你也不应该将它们存储。让用户在客户端存储,最好是在带有类似于Metamask API的专用钱包中。

不幸的是,你的帖子意味着你指的是比特币区块链,我不知道任何具有类似于比特币的API的相似钱包...如果必须,使用最安全的存储和加密,但无论你做什么,都不要将私钥发送到服务器。

从上传文档到我的网站到成功签署所有方之前的整个流程(技术上)。

好的,让我们一步一步地跟随示例文件签署流程。

  1. A将文档上传至您的网站。
  2. B使用他的私钥签署文档。
  3. B上传已签署的文档至您的网站。
  4. 您的网站对已签署的文档进行哈希处理。
  5. 您的网站使用签署的文档哈希作为元数据广播交易。

现在假设A想验证B是否签署了该文档。

  1. A下载B的已签署文档副本。
  2. A对已签署文档进行哈希处理,并将其与您提供的哈希进行比较。
  3. A检查区块链以查找包含文档哈希的交易。

如果这三个步骤都成功,那么A现在可以确定B在交易被纳入区块时签署了该文档。

如何与区块链API互动。我已经阅读了API,但对我来说没有意义。

常规的blockchain.com API不适用于此用例。您无法对交易内容进行足够精细的控制,这是嵌入文档哈希所需的。

我建议您使用类似python-bitcoinlibbitcoinlib-js的库来创建交易,并使用RPC与节点交互以与区块链进行交互。


1
区块链上的文档存储可能会影响其性能,因此从可扩展性的角度来看并不总是推荐的。因此,将文档存储在像IPFS(星际文件系统)这样的去中心化分布式文件系统中,然后将引用传递到像以太坊这样的区块链平台中可能是一个更好的主意。在以太坊中,您可以设计和开发具有权威证明共识算法的多重签名钱包,并调用一系列智能合约,这些智能合约可以帮助您以安全且可扩展的方式编写、编辑、版本控制、发布、归档和过期文档。希望对您有所帮助。如果您需要进一步了解此方法的详细信息,请告诉我。

是的,我知道整个文档不会被发送到区块链,只有哈希将作为数据发送。你能提供一些链接或教程帮助我理解这个吗? - Mahammad Adil Azeem
1
当然。我将分享一些关于如何使用以太坊实现此功能的教程。基本上,您需要将每个步骤建模为操作/交易。在这里,登录应用程序是一个操作。文档上传是另一个操作。文档验证可以是一个交易或分布式过程,其中文档存储在各种审批者可以查看的位置。您可以在前一步中捕获有关此文档的元数据。您可以使用元数据本身生成有关此文档的公钥。 - Gokul Alex
你能分享一下 @GokulAlex 的教程吗? - user305883
1
@AdilMalik,请在此处找到以太坊-IPFS基于文档存储示例的参考实现 >> https://github.com/howardwu/IPFS-Ethereum-Storage - Gokul Alex
1
@user305883 请参考以下 Medium 文章,构建基于以太坊 IPFS 集成的文档存储 Dapp。https://itnext.io/build-a-simple-ethereum-interplanetary-file-system-ipfs-react-js-dapp-23ff4914ce4e - Gokul Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接