java - 卡支持的算法列表?

标签 java algorithm encryption smartcard javacard

我有一张java卡。我如何才能找到卡支持的算法并将其用于密码学?当我点击 jcmanager 中的认证按钮时会发生什么(例如)?我如何使用 APDU 进行身份验证?

这是我点击 Authenticate 时 jcmanager 的输出:

Open terminal ...
EstablishContext(): ...
Wait for card in a certain reader ...
Pick reader ...
**********************
Selecting Card Manager
***********************
-> 00 A4 04 00 08 A0 00 00 00 03 00 00 00
<- 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00
************
Init Update
*************
-> 80 50 00 00 08 D3 90 22 B2 C5 7C D4 DD
<- 00 00 11 60 01 00 7F 8B 0A F9 02 02 00 99 3E 01 33 1B 3F 8E 33 BA E4 AD 82 6E 3C C1 90 00
HostChallenge: D3 90 22 B2 C5 7C D4 DD
CardChallenge: 3E 01 33 1B 3F 8E
Card Calculated Card Cryptogram: 33 BA E4 AD 82 6E 3C C1
Derivation Data is 01 82 00 99 00 00 00 00 00 00 00 00 00 00 00 00
Host Cryptogram Data (to encrypt) 00 99 3E 01 33 1B 3F 8E D3 90 22 B2 C5 7C D4 DD 80 00 00 00 00 00 00 00
Card Cryptogram Data (to encrypt for verification) D3 90 22 B2 C5 7C D4 DD 00 99 3E 01 33 1B 3F 8E 80 00 00 00 00 00 00 00
S_ENC: CE 69 1B 1E C8 EC DB B0 0A 9B 18 4A 53 58 04 BB CE 69 1B 1E C8 EC DB B0
The Current session MAC key is F8 85 4D 94 19 BC 83 4C 99 BA E9 94 15 00 A6 B8
The Current session DEK key is 6D 72 48 D4 23 BF 3B 1C 7C 2F 1F BC 7C 04 E9 F6
Encrypted CardCryptoGram is 58 20 23 4E 14 8B FE AA F8 6D 14 20 3D 41 18 E4 33 BA E4 AD 82 6E 3C C1
Encrypted HostCryptoGram is 07 D0 B3 EB 0F 1B 7E 54 84 34 08 6C 5F D9 E5 55 4B 5F 0D F6 87 52 99 2E
-> 84 82 03 00 10 4B 5F 0D F6 87 52 99 2E 17 29 AA 68 12 98 CE 2D
<- 90 00
Authenticated

这样对吗:

我向卡发送一个随机的 8 字节数字: -> 80 50 00 00 08 D3 90 22 B2 C5 7C D4 DD

在我命令的回答中,card 给我一个随机数 + 我发送给 card 的加密随机数。接下来发生什么?我的卡和读卡器使用哪种算法加密和解密随机数(cardchallenge 和 host challenge)?

最佳答案

你完全把事情搞混了。
首先是全局平台。全局平台指定如何与卡管理器/安全域交互:例如如何与卡管理器进行身份验证,如何上传 cap 文件,如何安装 cap 文件,锁定卡解锁卡更改您上面提到的 key 等...
其次是 Java Card 小程序,您可以按照希望智能卡稍​​后运行的方式进行编码。

你的问题很不清楚。
你的意思是关于全局平台或 jor java 卡代码的加密算法? 首先识别您的卡并阅读相应的全局平台规范,有多种身份验证模式称为 scp01 scp02 ... 如果您指的是 javacard:JC 规范不是强制性的,因此制造商选择要实现的加密。找出你可以试错或与制造商交谈
为了向卡管理器进行身份验证,您应该始终使用一种工具(GPJ GPshell 或 JCOP 工具<--最后一个不是免费提供的)生成 APDU 并在其背后加密,而不是手动发送 APDU。
但是,如果您想了解详细信息,请阅读 Global Platform Specification 而不是在论坛上提问

关于java - 卡支持的算法列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800685/

相关文章:

PHP OpenSSL 非对称加密——真的有这么简单吗?

c# - 使用 bouncycaSTLe 在 C# 中使用 cryptodome 解密在 python 中加密的 RSA 数据给出错误 block 不正确

android - 在 iOS 上生成的 RSA key 不适用于 Android

java - 使用 Streaming API 和 Json Parser 进行 JSON 解析 - 混合模式

java - Maven 版本不工作 - "Maven executable not found"

java - Apache PDFBox : How can I specify the position of the texts I'm outputting

php - 基于设备保护 PHP API

java - JodaTime:如何在不同时区找到 future 时间

python - 图书的 CSV 解析

c - 两个位置之间的人口计数