AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1719117
Accepted
Zaz
Zaz
Asked: 2022-05-03 15:11:14 +0800 CST2022-05-03 15:11:14 +0800 CST 2022-05-03 15:11:14 +0800 CST

给定十六进制的公钥,我如何获得 .asc 文件?

  • 772

给定十六进制或基数 64 的公钥,我如何生成用于 PGP 程序的 .asc 文件?

例如,假设我有某人的 RSA 公钥,以十六进制表示:

04 40 ad 77 10 45 08 f2 3a ae 1d 1d 95 22 2f b3 f5 e5 2f da db 8c 39 3a 03 15 fb 4b 36 28 46 de 7b 00 f4 73 11 ae b9 ac 00 aa 19 34 6d fb 7c 56 b1 93 c0 1b 86 7c d0 a2 0b 4d 22 a9 d2 4d b0 f6 34 c4

我怎样才能把这个数字变成一个标准的公钥文件(例如.asc)?

据我了解,RSA 接收明文(任何数据)和接收者的公钥(长数字)并输出密文。所以我不应该需要比这个数字更多的东西来发送加密消息。


我正在尝试使用 VCard 上的 X.509 密钥发送加密的电子邮件。

我还没有找到可以做到这一点并gpg --import显示的程序no valid OpenPGP data found

gnupg encryption
  • 1 1 个回答
  • 991 Views

1 个回答

  • Voted
  1. Best Answer
    user1686
    2022-05-03T22:07:21+08:002022-05-03T22:07:21+08:00

    据我了解,RSA 接收明文(任何数据)和接收者的公钥(长数字)并输出密文。所以我不应该需要比这个数字更多的东西来发送加密消息。

    从技术上讲是的,如果您“手动”完成所有操作,并且您希望收件人手动取消所有操作。但即便如此,也已经存在几个问题。

    首先,RSA 只接受非常短的明文。您不能使用它来加密整封电子邮件。(这取决于密钥大小和使用的填充,您必须使用它来确保 RSA 加密的安全,但是)一般用法是永远不会使用 RSA 直接加密真实数据——人们总是会使用它处于“混合模式”,其中 AES(或类似的)加密明文,而 RSA 仅加密 AES 密钥。

    因此,在实践中,您需要就使用什么 RSA 填充、使用什么对称密码、使用哪种分组密码模式(如果适用)、使用哪种 MAC 方案、应用操作的顺序(例如加密-然后-MAC)等。

    使用“标准公钥文件”之类的.asc(持有 OpenPGP 证书)或.pem/ .crt(持有 X.509 证书)的原因之一是这些系统已经弄清楚了这些事情。当您有一个 .asc 文件并将其提供给 GnuPG 等 PGP 软件时,它不会使用原始 RSA,它已经设计为使用混合模式。


    我正在尝试使用 VCard 上的 X.509 密钥发送加密的电子邮件。

    第二件事是您已经有一个标准的公钥文件——您在 vCard(即一个文件)中有一个完美的 X.509 证书.crt,可以使用 S/MIME 或 CMS 标准进行加密。无需提取其公钥并创建一个全新的文件——很有可能,您的邮件应用程序可以直接从 vCard 导入 X.509 证书,甚至自动使用它进行加密。

    (流行的 GnuPG 套件附带一个gpgsm工具,它采用 X.509 证书并像gpgPGP 一样进行 S/MIME 加密/解密。)

    与此相关:如果您收到了 X.509 证书,这强烈暗示收件人希望您以 S/MIME 格式加密消息。假设您无论如何都提取了 RSA 公钥(模数),然后使用一些工具将其放入 .asc 文件(即 OpenPGP 证书)中,然后继续发送以 PGP 格式加密的电子邮件消息。收件人将无法解密它,要么是因为他们的电子邮件软件一开始就无法识别 PGP/MIME(许多应用程序只识别 S/MIME),要么是因为它知道它无法将 PGP 消息与无论如何,一个 X.509 私钥对(即使是同时使用 PGP 和 S/MIME 的人也几乎普遍对两者都有不同的密钥对)。

    (好吧,从技术上讲,他们可以通过与您相同的程序来解密它,将他们的 X.509 证书和私钥转换为 OpenPGP 等价物——但他们为什么要这样做,我真的不知道。再说一次,这是他们需要知道的事情——即就像要使用的密码一样,这是另一个需要商定的参数。)


    我怎样才能把这个数字变成一个标准的公钥文件(例如.asc)?

    为了完整起见,是否可以获取现有的原始 RSA 公钥并将其包装在 PGP 或 X.509 证书中?是的,几乎,但不完全是。这里还有更多的问题。

    首先,对于 PGP,没有多少工具可以以这种方式使用。(令人惊讶的是,PGP 是两者中更复杂的格式,所以我不会尝试手动操作。)如果必须这样做,那么我可能会从 Sequoia 库开始。

    反过来,创建 X.509 证书在技术上是一项更容易的任务,因为格式“只是”ASN.1,所以我会使用 Ruby 的 Net::OpenSSL 或 Python 的 python-certbuilder 或类似的东西。这实际上是一项常见的任务,因为 CA 首先就是这样颁发证书的——他们已经需要在签署之前将原始 pubkey 从 .csr 复制到新的证书中。

    这就引出了第二个问题。如果您正在制作 X.509 证书,则必须签署该证书,您的 S/MIME 程序才能接受它。它不能是“自签名”的,因为您没有私钥,因此您需要为此目的制作自己的内部 S/MIME CA 证书。

    如果你正在制作 PGP 证书,它会有点困难,因为它的子数据包必须由相同的密钥进行自签名(也就是“子密钥绑定签名”),这正是为了防止有人将假用户 ID 附加到你的证书,或分发捆绑了虚假子密钥的真实证书。如果没有相应的私钥,您将无法成功制作.asc现代 PGP 工具可以接受的文件。

    (如果你有私钥会更容易:你可以将 X.509 密钥对(.p12 或 .pfx 文件)导入 gpgsm,它恰好与 gpg 共享其私钥存储 - 然后使用 gpg “生成”专家模式下的新 PGP 密钥,并在出现提示时选择使用现有密钥对的选项。然后程序将为您做所有事情。)

    因此,您可以生成的唯一相关标准格式是“半原始”PKCS#1 或 PKCS#8 公钥,即openssl rsa和openssl pkey工具处理的那种——它没有元数据,只有实际的 RSA 模数和指数。现在这种格式在某些情况下仍然有用(你甚至不需要手动创建这样的文件——如果被问到,OpenSSL 可以直接从 X.509 证书中提取它),例如,也许你可以手动使用它openssl cms调用来创建 S/MIME 电子邮件,但是……您可以使用整个 X.509 证书来做同样的事情。

    • 2

相关问题

  • OpenSSL 支持 ed25519,加密内容?

  • LUKS 模式下 dm-crypt / cryptsetup 的默认加密密钥大小是多少?

  • 备份机密文件的最安全方法,可能没有云存储?

  • 挂载 encfs 目录后看不到文件

  • 为什么 Keybase 不在我的 GitHub 证明中包含我的公共 PGP 密钥指纹?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve