【发布时间】:2015-06-09 22:22:34
【问题描述】:
我想编写我的小程序,使其 APDU 命令和状态字在我的卡和读卡器之间的传输通道中不清晰。我的意思是我不想将 APDU 命令和响应以纯文本形式发送给第三方。
我想我有两个选择:
- 在卡上选择我的小程序后,对于所有其他命令,对 APDU 命令的数据部分执行加密功能,然后在卡上对其进行解密,然后对其进行分析。请注意,我无法使用此方法对整个命令进行加密,因为结果可能与另一个
SELECTAPDU 命令冲突,并且卡的 SD 错误地将其识别为SELECT命令。对吗?
它的图表:
- 使用 SD 安全通道:据我所知,安全通道意味着:整个 APDU 命令 和响应 以加密形式传输(即它们在源(安全域/读卡器)中加密并在目标(安全域/读卡器)中解密。对吗?据我所知,SD 在此机制中执行加密方法角色以及之间的通信我的小程序和 SD 很简单(下图),对吧?
它的图表:
还有其他方法吗?
看来第一种方案还不够好,因为:
- 我必须自己实现! :)
- 我们无法对第三方隐藏命令和响应的所有部分。(我们只能隐藏数据)
我说的对吗?
现在,假设我想确保我的小程序仅适用于使用安全通道传输的 APDU 命令。我想我又有两个选择:
将卡置于
SECURED状态。由于在这种状态下用户无法使用纯文本 APDU 命令与卡进行通信(对吗?),因此他必须使用安全通道将命令发送到我的小程序。正确的?如果不正确,是否有任何方法可以强制 SD 仅使用 Secure Channel?将卡保持在它的任何生命周期中(例如 OP_READY),但是,在收到任何 APDU 命令时,检查 CLA 部分以查看它是否是安全的传送与否! (有可能吗?来自安全通道的 APDU 命令的
CLA部分和其他命令有什么区别吗?我说的对吗?)
还有其他方法吗?
最后是主要问题:
如何使用 SD 与我的小程序进行安全通信?由于我认为我必须使用 GlobalPlatform 类(我是吗?),所以我查看了它的 API-s。我在一个名为org.globalplatform.GPSystem 的包中找到了一个名为getSecureChannel 的方法。我的方式正确吗?我必须使用这种方法吗?
我知道这可能太长无法回答,但我相信它不仅为我,也为其他未来的观众澄清了很多问题。
我很感激任何机构为我阐明了这个问题。
还有一个示例小程序更值得一看。
【问题讨论】:
-
1.这个问题太多了。 2.有些问题不属于SO 3.这些问题是标准问题,已经解决了很多次 4.你为什么不尝试解决你的问题而不是在SO上问所有问题?
-
@PaulBastian 1- 你是对的,但我认为所有这些问题都是针对一个问题。 2-这些与我的 SO 问题有关。 3-请问您可以参考这些问题和答案吗? 4-当然我试图自己解决它们,但我做不到。此外,我认为这个问题对未来的观众也有帮助,不是吗?
-
@Abraham 你知道如何将 org.globalplatform 导入我的项目吗?我认为它没有安装在我的系统上。从哪里可以找到并下载它?
-
@M.Jalali 你可以下载JAVA COS IDE。它是免费的,并且默认包含这些库。 Download Link
-
@M.Jalali 你也可以从Global Platform card specification page下载合适的版本