【问题标题】:Locking/unlocking a smartcard & security implications锁定/解锁智能卡和安全隐患
【发布时间】:2020-11-23 13:27:29
【问题描述】:

我已经开始使用 javacard 为智能卡开发小程序。 编译小程序时,必须通过全球平台规范 (https://globalplatform.org/wp-content/uploads/2018/05/GPC_CardSpecification_v2.3.1_PublicRelease_CC.pdf) 中定义的安全协议将其加载到 javacard。

特别是,将小程序加载到卡上需要知道用于在主机计算机和智能卡之间建立安全通道的加密密钥。空白卡通常带有默认键,例如“404142434445464748494A4B4C4D4E4F”。要“锁定”卡并确保其不会被篡改,必须将这些密钥更改为只有发行人知道的内容。

我的问题如下: 使用默认测试密钥发卡有什么风险?

以下是我能想到的威胁列表:

  • 用户可以删除小程序并将卡重新用于其他目的
  • 恶意软件可以卸载小程序(拒绝服务)
  • 恶意软件可能会删除小程序并安装后门小程序,以在未来使用时窃取用户凭据。

还有其他威胁吗?特别是,是否可以恢复存储在已安装在卡上的小程序中的敏感数据(例如加密密钥)?

我想了解将智能卡与安全通道的默认密钥一起使用的确切安全含义。

【问题讨论】:

  • 奇怪的问题,考虑到通过更改键来避免这种情况是多么容易;鉴于可能会安装任何小程序,我看到大量威胁,窃取其他小程序数据不在其中,因为这些应该是私有的。
  • @guidot 确实,智能卡应该始终被锁定,但如果小程序代码是打开的并且任何用户都可以加载它(并且省略锁定卡),目标是清楚地了解对用户的安全影响。

标签: security applet smartcard javacard globalplatform


【解决方案1】:

applet 的数据应该受到根据 Java Card Runtime Specification (JCRE) 第 6 章:“Applet 隔离和对象共享”实施的“防火墙”的保护:

基于 Java Card 技术的防火墙(Java Card firewall)提供保护 针对最常见的安全问题:开发人员的错误和 设计可能允许敏感数据“泄露”到另一个小程序的疏忽。小程序可能能够从可公开访问的位置获取对象引用。但是,如果对象由受其自身防火墙保护的小程序所有,则请求小程序必须满足某些访问规则才能使用引用访问该对象。

防火墙还提供对错误代码的保护。如果代码不正确 加载到卡上,防火墙仍然保护对象不被此代码访问。

要允许共享共享类必须实现javacard.framework.Shareable 接口(6.2.6 可共享接口详细信息)。

请注意,如果您允许运行不受信任的小程序,攻击面会大大增强。无法满足安全约束的可能性肯定会增加。这些密钥被认为对 Java Card 安全至关重要,因此应始终替换默认密钥。如果您订购大量卡片,通常可以将默认密钥替换为客户特定的密钥。

请注意,在撰写本文时,Oracle 网站已部分关闭,我无法访问文档。本文摘自我个人计算机上存储的 3.0.1 规范。

【讨论】:

  • 一个人订购了一组带有众所周知的默认密钥的卡片。是否可以保证它在运输过程中没有被篡改?
  • 不,我不这么认为,这是缺点之一;大多数安全性取决于 GP 密钥集。我会确保用于实际生产的卡片具有单独的密钥集。如果这完全是客户特定的密钥集可能取决于订单大小,但最好将这个问题交给您的供应商(如果有足够的激励,他们可能会替换普通的 GP 密钥集)。
猜你喜欢
  • 2013-03-30
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多