如何在Java Card中存储脱机事务数据

时间:2013-12-20 08:33:04

标签: algorithm transactions offline javacard

我是Java Card开发的新手。我已经创建了一个用于在线支付的Java Card applet。但是我找不到如何进行离线交易的方法。我需要知道如何在Java Card中存储离线数据(例如余额)。有没有办法使用文件结构来存储数据?

3 个答案:

答案 0 :(得分:1)

JavaCard与PC上的Java略有不同。你在applet中所做的一切都是持久的。只有在RAM中明确分配变量时,才会在卡复位(或断电)时丢失内容。

因此每个字段变量例如在您的applet类中可用于存储您的离线数据。

答案 1 :(得分:1)

对于离线事务,您需要将数据存储在 persistent 内存中。此外,对此持久性内存的更新应为 atomic 。这意味着如果交易正在进行并且存在卡撕裂,则交易应该无效。为此,Java Card在JCSystem中有(适当命名的)beginTransactionabortTransaction方法。

如果普通EEPROM或闪存的安全级别足以处理敏感数据(如交易和余额),则会进行一些讨论。与事务一起更新(安全)校验和不会有什么坏处,这样高级攻击者就无法改变存储在智能卡上的数据。存储此校验和必须是原子事务的一部分。

Java Card不提供任何基于文件的结构。很久以前就有一个提议的API,但目前对ISO 7816-4 文件系统的支持以它的AID选择小程序结束。协议的其余部分是您的责任。请注意,您不应使用UPDATE BINARY(和朋友)之外的任何内容更新基本文件的内容。通常,文件的内容应该是静态的或由off卡实体生成。使用例如记录和GET DATA会更合适 - 但你也必须自己编程。

答案 2 :(得分:1)

  1. 为脱机余额创建持久数组

    离。 balance = new byte [length_of_balance];

  2. 创建一个瞬态数组来计算离线余额

    离。 temp_balance = JCSystem.makeTransientByteArray(length_of_balance,CLEAR_ON_DESELECT);

  3. 收到新金额时

    一个。将余额加载到temp_balance

    湾累积新的金额到temp_balance

    ℃。使用Util.arrayCopy

  4. 复制temp_balance以进行平衡

    希望这会有所帮助〜