【问题标题】:Verify RSA signature with public key in PEM format in Haskell在 Haskell 中使用 PEM 格式的公钥验证 RSA 签名
【发布时间】:2019-02-02 02:13:19
【问题描述】:

如果我有有效负载、签名和公钥(全部为字节串或类似格式),我如何验证签名?

我在 Hackage 上看到的所有 PublicKey 类型似乎都纯粹通过数字来表示键,例如:

PublicKey    

public_size :: Int  -- size of key in bytes

public_n :: Integer -- public p*q

public_e :: Integer -- public exponant e

如何从 PEM 文件中获取 PublicKey,或者直接从 PEM 文件中执行验证?

[根据没有尝试解决方案的反馈进行编辑] - 我四处寻找解决方案,但在 hoogle 上根本找不到任何满足我期望的任何类型签名的东西,例如 ByteString -> PublicKey。我不想从头开始重新实现它,因为我现在所做的只是调用一个执行所有验证的 python 脚本。如果我不需要调用 python 就好了,但似乎找不到任何现有代码。

【问题讨论】:

  • 我看到这被否决了 - 很抱歉,很高兴从任何反馈中改进问题!
  • 你看过OpenSSL吗?

标签: haskell cryptography


【解决方案1】:

如果一个库公开了像public_n :: Integer 这样的接口,这意味着它是一个说明 RSA 操作的库,而不是一个用于密码学的库。密码库将具有类似sign :: Key -> ByteString -> ByteString 的接口。任何加密库都应该能够解析 PEM 格式的密钥。

OpenSSL 是一个流行的密码学库。它并不总是理想的或易于使用的,但它很普遍,而且你不会使用它古怪的 C 接口,因为你使用的是 Haskell。所以你可以使用HsOpenSSL,这是一个基于 OpenSSL 的 Haskell 绑定。 (注意:我从未使用过 HsOpenSSL,但它看起来很明智。)使用 OpenSSL.PEM.readPrivateKey 读取 PEM 格式的密钥,OpenSSL.EVP.Digest.digestLBS 计算您要签名的消息的摘要,并使用 OpenSSL.EVP.Sign.signBS 签署摘要.

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2022-01-01
    • 2012-03-06
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多