需要有关加密算法的建议

Ste*_*ane 7 c# security cryptography smartcard

为这个问题的论文性质道歉.我一直在努力解决这个问题,并试图用我具体的问题总结我对所需内容的理解.

这个有关从欧洲DTCO公司卡读取数据的问题中,我得到的建议涉及到下面屏幕截图中的算法(来自本文件的附录11 ),但我不清楚如何执行这两个突出显示的步骤.

  1. 我看到Sign是包含证书的数组的一部分,但用公钥打开它意味着什么?我可以通过从卡中读取CA_Certificate并使用CAR 发出管理安全环境 APDU (参见算法的第一步)来成功执行该步骤.但是通过这种方式选择了公钥,我在开放的Sign步骤中使用了哪些公钥.MSE选择一个,但我没有; 我只有来自ERCA的欧洲公钥,但是我在卡中选择了相同的密钥吗?我没有任何私钥,但我需要它们.

  2. 在检查Hash(C')= H'的步骤中,我应该如何计算哈希?进行加密/解密/散列似乎有很多不同的方式(格式正确吗?)我很困惑.

在此输入图像描述

我真正需要能够读取我需要的数据是使用EXTERNAL AUTHENTICATE进行身份验证,紧接在返回8字节质询的GET CHALLENGE之后.我认为我需要用它来计算EXTERNAL AUTHENTICATE的密码.我在下面找到了示例代码(请参阅完整帖子),虽然它看起来像是某种类似C语言的脚本语言(我正在使用C#),但对于不同类型的智能卡,它似乎与我必须使用的非常类似.

//
// Authenticate against CardOS card
//

var card = new Card(_scsh3.reader);
var crypto = new Crypto();

var key = new Key();
key.setComponent(Key.DES,
    new ByteString("01010101010101010101010101010101", HEX));

// Get challenge
var challenge = card.sendApdu(0x00, 0x84, 0x00, 0x00, 8, [0x9000]);

// Crypto.DES_MAC_EMV is a CBC generated Retail-MAC
var cipher = crypto.sign(key, Crypto.DES_MAC_EMV, challenge);

card.sendApdu(0x00, 0x82, 0x00, 0x81, cipher);

print("Card returns " + card.SW.toString(16) + " - " + card.SWMSG);
Run Code Online (Sandbox Code Playgroud)

差异是

  1. 附加的P2参数表明已经完成了管理安全环境,可能是使用了来自Card_Certificate 的CAR ',这对我来说不起作用,尽管它与来自CA_Certificate 的CAR '有关.

  2. Lc为0x80而不是示例代码中的0x81.

  3. 我计算在这里使用的任何密码都必须是128个字节长,而不清楚样本中的密码长度.

gui*_*dot 3

这个答案也有点长,因为有一个误解需要解释一下。上面的文本摘录涉及通过非对称密钥对进行身份验证。由于除了拥有公钥的私人对应物之外无法证明任何东西,因此需要额外的凭证。证书的颁发者通常声称已验证您的身份,并且这由证书的签名记录(仅当颁发者的公钥在互联网上众所周知或因为它已存储在卡上时签名才有用)。通常,智能卡在“验证证书”模式下提供“执行安全操作”命令,其目的是:验证颁发者的签名,解压证书中包含的或与其一起交付的公钥,并保存它以反转私钥。预计关键操作很快就会发生。

您的代码片段通过对称密钥(也称为秘密密钥)处理身份验证。假设这个秘密只有授权人员才知道。您视为 LC 的 0x81 实际上是 P2,意思是“请使用本地密钥#1”来验证使用此密钥的 MAC 计算。事实上,采用 8 字节随机数作为计算(零售或其他)MAC 的输入通常(即应用标准填充方案)会产生 16 字节结果。顺便说一句,示例中的 DES 密钥很糟糕。每个字节的最低有效位是奇偶校验位,因此密钥仅由零字节组成。

除了以某种方式进行身份验证的目的之外,这两种方案没有任何共同点。

有关详细信息,请参阅 ISO 7816-8(用于执行安全操作)、ISO 7816-4(用于外部验证、获取质询和大多数其他智能卡命令)。这些内容很难在不花钱的情况下获得——旧版本可以在 www 上找到——而且读起来很枯燥且难以理解。更多解释可在Rankl/Effing“Handbuch der Chipkarten”中找到,但据报道英文翻译“Smart Card Handbook”有时有些特殊。对于证书内容,我推荐 Schneier,Applied Cryptography,其中还有数百个进一步的参考资料。