【问题标题】:Is there a way to get user private and public key in hyperledger fabric for data encryption purposes有没有办法在超级账本结构中获取用户私钥和公钥以进行数据加密
【发布时间】:2020-04-05 20:05:29
【问题描述】:

我最近开始学习超级账本结构,我正在开发一个简单的私有区块链来管理数字数据,这些数据将使用用户公钥加密,只能使用用户私钥解密,所以我的问题是,是有一种方法可以在超级账本结构中获取用户私钥和公钥以进行数据加密

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    虽然 MSP ECDSA 密钥用于签名,但您可以使用它们通过 ECDH 进行加密。基本上,您可以从公钥 A 和私钥 B 中导出与从公钥 B 和私钥 A 中相同的共享密钥,以便将该共享密钥用作对称 AES 密钥进行加密。

    openssl 的示例:https://jameshfisher.com/2017/04/14/openssl-ecc/。您不需要创建密钥对,因为您已经拥有它们。您可以使用 ellipticcrypto 库在 javascript 中实现它。

    您管理自己的私钥和公钥(注册后在您客户的钱包中),但您必须安排可靠的方式来分发对方的公钥。如果公钥嵌入在有效证书中,您可以轻松验证该公钥,但分发方式掌握在您手中。

    【讨论】:

    • 谢谢kekomal,我会试试这个
    • 不客气。除了 ECDH,你还有 ECIES 加密模式,它只依赖于对方的公钥,但我没有在 nodejs 中使用 Fabric 的 P-256 曲线对其进行测试。
    • 看看这个*.com/questions/45134946/…,我目前也面临这个问题,我尝试使用elliptic库,我不能使用node-RSA,因为它还不支持
    • 这就是为什么我告诉你使用 ECDH (Elliptic Curve Diffie Hellman) 来加密。您的错误是尝试将 node-RSA 与 ECDSA 密钥一起使用,我没有告诉您。使用ellipticcrypto。和jsrsasign 用你的钥匙“玩”。
    • 从您的钱包中读取身份。使用jsrsasign 从您的身份中提取密钥,使用elliptic 的“p256”曲线导出您的共享密钥,并使用crypto 使用导出的共享密钥进行加密。
    【解决方案2】:

    是的,fabric 使用公钥基础设施。 Fabric 中的每笔交易都由用户的私钥签名。在链码级别,您可以从用户的电子证书中获取用户的公钥。

    Fabric 文档中有关身份的更多信息 https://hyperledger-fabric.readthedocs.io/en/release-2.0/identity/identity.html

    CID golang 包以获取链码级别的电子证书https://github.com/hyperledger/fabric-chaincode-go/tree/master/pkg/cid

    【讨论】:

    • 嘿,普里塔姆。我尝试自己从钱包中手动获取密钥,我认为这是错误的,即使它有效,但我必须了解密钥不是 RSA,因为我试图使用 node-RSA 使用我得到的密钥加密数据来自用户钱包。但是 kekomal 提出了一个非常好的观点,我会尝试一下并给你们反馈
    • 使用了椭圆曲线,所以不能使用 RSA 。您可以从此 site 中查看有关证书的更多信息,从 signcert 复制/粘贴证书。
    最近更新 更多