首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Yubico OpenPGP智能卡的PGP数据加密

用于Yubico OpenPGP智能卡的PGP数据加密
EN

Stack Overflow用户
提问于 2015-11-21 08:36:18
回答 1查看 1.3K关注 0票数 13

我试图在Java应用程序中实现基于Yubikey NEO OpenPGP智能卡applet的PGP加密。这似乎是一门黑暗的艺术,在谷歌上搜索并不容易,但我到目前为止取得的成果如下:

  1. 初始化卡,使用gpg工具生成密钥。一般都能用。我拥有.asc格式的公钥,并设法将其加载到org.bouncycastle.openpgp中。
  2. 使用javax.smartcardio API连接到using中的智能卡。
  3. 选择OpenPGP小程序 val pgpAID =字节(0xD2,0x76,0x00,0x01,0x24,0x01) val应答= cardChannel.transmit(CommandAPDU(0x00,0xA4,0x04,0x00,pgpAID))
  4. 成功地将正确的PIN显示到卡上 val = "123456“返回字节( 0x00,0x20,0x00,0x82,pin.length) + pin.toByteArray(Charsets.UTF_8)
  5. 发送一个准成功的decipher命令(见下文) 字节(0x00,0x2a,0x80,0x86,data.size) +数据+字节(0x00) 当data = "xxxx".toByteArray()时,结果是SW=9000 (= success),但不返回数据。这是一个幼稚的测试,因为第52页的OpenPGP小程序文档提到 在加密之前,命令输入(填充指示符字节除外)应按照PKCS#1格式进行格式化。

我不知道如何加密数据并将其转换成PKCS#1格式.

我还试着通过Yubico OpenPGP卡实现测试阅读,但它只提供了另一个“失败”的例子(第196行)。我试着运行它,但是结果不同:测试期望SW=0050 (表示异常?)我得到的是SW=6f00 (据本文件说,没有精确诊断)。

我用整个代码创建了一个GitHub存储库。它是用科特林写的,但应该很容易读懂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-22 20:28:18

您的问题有点混乱,但我确信您希望使用与智能卡上RSA私钥相对应的RSA公钥创建PGP加密消息,然后使用智能卡上的RSA私钥来(帮助)解密它们。PGP (与其他所有内容一样)使用混合加密,因此相关部分中的PGP加密消息包括:

  • 使用随机生成的工作密钥用适当的对称算法(如TDES或AES )加密的实际消息,称为K。
  • 工作密钥K加上一些由RSA使用接收者的公钥加密的元数据和最初的PKCS#1标准定义的填充(现在正式称为RSAES-PKCS1-v1_5 ),但仍然被广泛地称为PKCS1。

您不需要执行加密步骤,因为实现该标准的任何软件都可以这样做,包括GnuPG或Bouncy城堡的bcpg库。如果您想自己做这件事,也许是为了使用伪造的K测试数据,而不是真正的消息,那么您需要做填充和RSA模块幂运算;在Java中,至少在Oracle或openjdk中,标准密码提供者可以使用用.getInstance("RSA/ECB/PKCS1Padding")获得的.getInstance("RSA/ECB/PKCS1Padding")以通常的方式获得的数据。

"PKCS1“加密填充(适用于RSA)是在该文档的第52页底部和第53页顶部描述的,它的内容与当前OpenPGP规范 (和更早时)的格式相同,当前OpenPGP规范指的是并且实际上与近流PKCS#1规范 (和更早的版本)相同,所有这些都说是:

  • 一字节00
  • 一个字节02
  • 足够的字节(非零随机),使结果具有正确的长度和安全性。
  • 一字节00
  • 用于PGP加密的“明文”实际上是按PGP规范中指定的格式格式化的工作对称密钥K。

注意开头的一段

在AES算法中

似乎是针对另一个选项,而不是PGP AFAICS,在上一页中描述为

通过选项(在扩展功能中宣布),该卡支持使用存储在特殊DO (D5)中的AES密钥对纯文本进行解密。这是有用的,如果没有证书或公钥存在,外部世界有一个共同的秘密与卡。

所以忽略它吧。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33841380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档