如何使用预先存储的哈希在智能卡上执行数字签名
Posted
技术标签:
【中文标题】如何使用预先存储的哈希在智能卡上执行数字签名【英文标题】:How to perform a digital signature on Smartcard with prestored hash 【发布时间】:2020-12-08 14:24:17 【问题描述】:我正在尝试使用智能卡执行数字签名,我的问题是当我尝试这些命令集时:
Select Application: 00A4040410E828BD080F*********
Verify Pin: 0020008506*******
Set SE for CRT HT: 002241AA03800110
Set SE for CRT DST: 002241b606800112840105
Store Hash: 002a90a00890008004AAAAAAAA // AAAAAAAA are Just a random 4 bytes for the card to compute then store
Sign: 002a9e9a00
我无法通过将安全环境设置为 CRT-DST 或 CRT-HT 来签名,前者返回 6a88(SE 问题),后者返回 6a95(未找到哈希)。 我正在关注 IAS_ECC_v1.0.1 到这本书,但不清楚在设置哈希然后签名的情况下使用哪个安全环境。我也尝试了 SHA-256 的命令,但结果相同。
我习惯于设置安全环境然后进行数字签名,但这是我第一次遇到预存哈希类型的卡。
【问题讨论】:
【参考方案1】:至少要澄清一些问题:您所描述的不是预计算的散列,而是中间散列值,通常应用于该方案中,其中卡至少对哈希计算有一些影响。它应该通过考虑给定的最后一个数据字节来更新给定的中间哈希。这是卡哈希所有输入数据(可能,但由于有限的 I/O 带宽很少有吸引力)和从外部提供最终哈希值(不受卡影响)之间的一种中间点。
这样的中间散列需要在 DO 90 中将中间散列值与一个 8 字节长的位计数器连接起来。对于 SHA-256,这意味着 40 字节(32 字节散列后跟位计数器)。结合 DO 80 给出最终数据。
您的示例(store hash 至少是一个误导性术语),将 DO 90 提供为空,但是与中间哈希的意图相矛盾。
【讨论】:
以上是关于如何使用预先存储的哈希在智能卡上执行数字签名的主要内容,如果未能解决你的问题,请参考以下文章