2013-04-22 25 views
-3

我们正在使用自定义智能卡,通过COM(通过USB)接口读取和写入数据。正在使用交易智能卡写作的好主意?

每当我们添加或更新记录时,需要在卡上进行一些管理以确保更新其他信息(主要是指针)。卡上的信息基本上是一个64k字节的数组。在单个添加或更新时,数据在字节数组中的各个点处被读取和写入。

我想强制执行一个方法来完成原子化的整个更新。如果我们处于写入过程中,并且智能卡被拔出,数据很容易被破坏,尤其是因为实际上它只是一个连续的字节数组,所以一个字节不合适会混淆整个数组的有效性。我想尽可能少地发生这种情况。

我查看了TransactionScope,但是这主要看起来是用于数据库事务。像这样的机制对我的问题有用吗?或者我应该考虑其他方法来强制我的软件块以有效的方式读取和写入?

我们使用的智能卡是由政府机构提供给我们的,因此不会更改。它有一个内存芯片,就像你在你的SIM卡上看到的一样,你的电话也有很多银行卡(相对于磁条)。 该卡使用ISO-7816-15规格设计。卡和卡的接口最初是由另一个程序员设计的,他基本上对我说:我只处理进入的字节和字节,我不做任何验证。这对我来说似乎很奇怪,因为我认为他的责任是不让卡片变得如此容易损坏。显然它是我的。

我会研究更多的技术规格,虽然这导致我走出了我的舒适区,除非我绝对需要,我不想惹他的代码。也许这张卡有比目前做的更好的方法。

有一个简单的READ命令,它只支持一次读取231个连续的字节。当我问他为什么这么做,为什么我不能一次性得到整个字节数组时,他说这就是所有的卡都支持的。所以阅读整个文件真的很尴尬。它变得更糟,因为一旦它“满”,它应该跳到数组的开头。 :S

+0

写一个事务性文件系统(2阶段提交)(如果设备SDK不具有一个)... – 2013-04-22 08:08:18

+0

为什么-4?我尽力解释问题所在。 – Davio 2013-04-22 08:30:57

回答

0

您表示您使用的是基于文件的智能卡,如ISO 7816-15定义查找文件“目录结构”和对象,如卡上的密钥。智能卡是可以以某种方式编程的处理器卡(直到它们被熔合,并且只有当你有权访问正确的键时)。

基于文件的卡片基于ISO 7816-4,如果您想用智能卡做任何事情,卡片应该是您库存的一部分。在哪些文件应该是什么样的定义。听起来就像你正在处理支持循环EF的卡,这是一种不太常见的基本文件(EF)结构。

在ISO 7816-4中,还有确定文件大小的方法。通常,使用由FID APDU指令从格式正确的SELECT FILE返回的FCI(文件控制信息)信息来返回此信息。要将所有数据作为事务读取,只需读出所有信息并在返回指示和错误的ISO 7816-4状态字或发生传输错误时返回某种异常。

现在写数据有点麻烦,因为你需要智能卡的支持来完成这样的事情。许多卡支持这种功能,主要表现为“卡撕裂”支持,因为一旦卡突然从读卡器中取出,所有的电源都会从处理器中丢失(!)。

您可以在一个方法内组合两个上述(聚合APDU调用)来创建一个事务。无论如何,缓存内存中的所有数据应该很容易,我们在这里并不是在谈论千兆字节的数据。

+0

就你而言,你可能已经注意到你对智能卡的了解并不足以处理它们,甚至不足以与你的同事进行有意义的交流。我会非常建议你购买一些关于这个主题的书。 – 2013-04-25 21:13:40

+0

那么,很想看一些书,但时间压力是一个问题在这里。很多软件都是由“专家”制作的,但他只处理路上的字节和字节,甚至不进行任何形式的验证,因此完全取决于我。我只是希望能更好地理解他的角色,因为他不再为这个项目工作。 – Davio 2013-04-26 13:48:48

+0

嗯,没关系,只要你以某种方式向公司表明他们在专业方面没有真正的表现。在继续之前,必须在某处理解/记录事务支持。也许他们可以在这种情况下与之前的开发人员取得联系。但这不是我想的直接问题。 – 2013-04-26 14:16:53

0

如果你有一个真正的智能卡(相对于存储卡,但我不能从“自定义智能卡”中得到),寻址它的内存为一个字节数组是非常异常工作分裂在主机应用程序(一切)和智能卡应用程序之间(几乎没有)。 这也使得智能卡变得更加困难,因为文件校验和是一种标准机制,但是如果您必须将64kByte数组集成到校验和中,这可能需要很长时间。跨越多个语句的事务是不寻常的,但是可能的(比较ISO 7816第7部分,它也在卡SQL附近,也就是CSQL);您的卡是否支持非CSQL序列,必须在文档中查找。

我的建议是:

  • 尽量多用卡功能,在单卡命令尽可能覆盖不同的,但连接的信息。 (这也有助于在需要时细粒度访问条件)。

  • 查看手册并可能使用另一家制造商提供的支持多种对账单交易的卡。

+0

感谢您的回答,我将把我的答案纳入我原来的问题。 – Davio 2013-04-23 07:02:41