首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算智能卡上的数字签名?

如何计算智能卡上的数字签名?
EN

Stack Overflow用户
提问于 2020-07-13 12:19:34
回答 2查看 497关注 0票数 1

所以我对智能卡很陌生,我试图计算一些随机字节的签名。卡上的操作系统是cardos v4.3。我能够使用PKCS#15格式和ISO 7816标准。

我计算签名的工作流程如下:

  1. 选择SigG应用程序APDU= 00 A4 01 0C02 FF00。status = 90 00

  1. 验证Sig。当前DF APDU= 00 20 00 81 08 31 32 33 34 35 36 37 38 00状态= 90 00

  1. 试图用PSO_CDS APDU= 00 2A 9E 9A 08 01 02 03 04 04 06 07 08 .28(十六进制) 00状态= 6A88

智能卡正在重新设置中。

我是不是缺少了一个命令,或者一个我需要满足的先决条件,或者其他的东西?在使用openssl进行计算的哈希签名时,一般的工作流是什么?

我知道对于PSO_CDS来说,必须有一个当前的安全环境,其中必须指定一个有效的PSO_PrivateKey,但是我不知道如何将它合并到命令流中。

我计划创建一个c++函数,它将得到一个散列,用智能卡计算签名,然后返回签名。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-21 08:28:56

所以,我能够计算出一个签名。因为PSO_CDS不适合我,所以我就这样做了:

选择Application/DF.

  1. 创建了一个管理安全环境集(mse ),其中我指定了CON组件(这是应用程序中的PSO私钥),它脱离了当前的安全环境。

Application.中的

  1. 用pin对象验证了引脚。

  1. 用PSO_DEC计算签名。当使用PSO_DEC时,您需要提供一个扩展的apdu,因为命令字段必须包含一个填充的256 Byte哈希值,并且在普通的apdu中,只能在我的卡上有一个最多255个字节的命令字段。
票数 0
EN

Stack Overflow用户

发布于 2020-07-14 07:33:22

问题是,卡不知道,该用哪一把钥匙。这是因为正确观察到目前缺乏有意义的安全环境。由于(简称: PSO)没有指定要使用的密钥的标准化方法,因此必须通过向安全环境提供该信息(例如通过(见下文))来更早地设置它。

提供密钥引用的最简单方法是,在与您的键相同的DF中创建ID 1的持久安全环境,因为这是在DF的SELECT (FILE)期间自动加载(或还原)的,否则您必须手动或在SET模式(此会话为易失性的模式)中发送(简称MSE)。(无论使用哪种安全环境,它都必须在数字签名模板中包含对私钥的引用。)无论您是在选择DF之后直接执行MSE恢复,还是在PIN验证之前,还是在两者之间的任何时刻,都是您的选择,但在发送PSO命令时,它必须是活动的。

40个字节似乎不是一个典型的散列值的长度,所以要注意正确地设置算法以包括散列。

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

https://stackoverflow.com/questions/62875718

复制
相关文章

相似问题

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