【问题标题】:How to store offline transaction data in Java CardJava Card中如何存储离线交易数据
【发布时间】:2013-12-20 08:33:03
【问题描述】:

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

【问题讨论】:

  • 请至少尝试格式化您的问题 Sajith4U。这样你会得到更多更好的答案。

标签: algorithm transactions offline javacard


【解决方案1】:

对于离线交易,您需要将数据存储在持久内存中。此外,对这个持久内存的更新应该是原子的。这意味着如果交易正在进行中并且存在卡撕裂,则该交易应被取消。为此,Java Card 在JCSystem 中有(恰当地命名)beginTransactionabortTransaction 方法。

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

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

【讨论】:

  • 感谢 owlstead.i 了解 ISO 7816-4 文件系统以及如何在 java 卡中应用。但我想知道是否有任何机制用于在智能卡中存储离线数据。 EMV卡使用什么机制??
  • 一般支付卡不包含余额信息。一切都存储在银行的服务器中。这些卡仅用于识别和(交易)身份验证。关于 EMV 卡中的机制:阅读标准。
  • 谢谢。但是离线交易支付我们无法访问服务器。所以在这种情况下我们如何通过卡支付金额。通常visa pay-wave会为支付保留一些余额(如50美元)。所以我想知道如何为离线交易存储余额。
【解决方案2】:

JavaCard 与您 PC 上的 Java 略有不同。您在小程序中所做的一切都是持久的。仅当您在 RAM 中明确分配变量时,内容才会在卡重置(或断电)时丢失。

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

【讨论】:

    【解决方案3】:
    1. 为离线余额创建一个持久数组

      例如。余额 = 新字节[length_of_balance];

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

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

    3. 收到新金额时,

      一个。将余额加载到 temp_balance

      b.累积新的金额到 temp_balance

      c。使用 Util.arrayCopy 将 temp_balance 复制到 balance

    希望对你有帮助~

    【讨论】:

    • 谢谢。我也是这么想的。但我想知道的是,其他离线交易支付系统紧随其后(visa pay-wave)。 java卡中存储数据的标准方法是什么??
    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多