问题标签 [contactless-smartcard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3220 浏览

android - Android isoDep.transceive on Generate AC 命令总是返回 6D00 unsupported

我正在尝试模拟 PoS、销售点 :)、系统并使用在 2013 Nexus 7(无安全元件)v4.4.2 上运行的 Google 钱包完成交易。

我的 PoS 原型也在 2013 Nexus 7 v4.4.2 上运行。

我能够从 2PAY_SYS_DDF01 请求中获得 NFC 响应。我可以选择 MasterCard 应用程序 ID。我能够获得处理选项。当我阅读记录时,看起来 Google 钱包并没有返回所有必需的 EMV 字段。最后,当我请求 Generate AC 命令时,它总是返回 6D00 unsupported。

有问题的代码区域:

我正在关注 Tim Beckers 的视频 https://www.youtube.com/watch?v=qqobg1-HrfY 大约。46 分钟和 Tim Beckers 代码示例: https ://github.com/a2800276/29c3/blob/master/smartshell.rb

更新:

对 GPO 命令 ( 80 a8 00 00 02 83 00 00) 的响应是

更新:

我试过了:

希望至少得到一个错误,指出错误的不可预测的数字,但我得到了 6700 不正确的长度返回。

早些时候,我收到了对 Read Record 00 B2 01 0C 00 的响应,该响应的一部分是卡身份验证相关数据 [9F69]:数据(二进制):XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX fDDA 版本号: 9F(卡)莫测数:6A 04 9F 7E

所以我尝试了那个不可预测的数字

但我仍然得到 6700 错误的长度

更新:

对 READ RECORD (Record = 1, SFI = 1) 命令 (00 B2 01 0C 00) 的响应是:

0 投票
1 回答
1486 浏览

smartcard - 如何读写未知的智能卡?

我购买了一些我认为是金雅拓产品的智能卡。

现在我有了这四个 ATR(使用 ACR38 和 ACR122U 阅读器):

我搜索了互联网,但没有找到关于这些 ATR 的任何信息(在 gemalto.com 和其他任何地方都没有)。

我怎样才能读和写这张卡?

我可以使用两个智能卡读卡器来读写这些卡,还是必须购买新型号?

0 投票
0 回答
2763 浏览

android - NFC HID MIFARE 读卡器

我有一张 HID MIFARE DESFire 卡,我正在尝试通过 android 读取。据我所知,该卡是 ISO 14443,但我似乎没有做任何事情。我可以阅读我认为是 UID 的内容。

该卡看起来好像没有格式化,但我不确定这是否是 HID 加密的一部分。无论哪种方式,我都无法阅读它,我也尝试过格式化它,但这不起作用。

如何声明加密并通过解密代码读取有效负载。一些 NFC 应用程序声明该卡不是 NDEF 格式。

任何帮助都非常感谢,因为我遇到了困难。

这是标签信息。我正在使用 Galaxy S4。

0 投票
3 回答
8740 浏览

nfc - 根据 ATR 确定卡类型

是否可以使用 ATR 来确定我是否有 ISO14443A 或 ISO14443B 类型的卡?如果是,如何?

0 投票
1 回答
5467 浏览

nfc - 在请求 EMV 卡的 GPO 命令时出现解析器错误

我对 VISA 卡的 GET PROCESSING OPTIONS (GPO) 命令有一些问题。

以下是我对 VISA 申请的 SELECT 命令的回复:

我从中提取了以下 PDOL:9F66049F02069F37049F1A02

我不确定 tag 9F66

我的 GPO 命令如下所示:

但我得到一个解析器错误作为响应:

0 投票
1 回答
457 浏览

android - 通过 Android isoDep.transceive 成功“计算加密校验和”后,Google 钱包状态为“未知”

我仍在尝试模拟销售点 (POS) 系统并使用 Google 钱包完成交易。我在堆栈溢出方面得到了很好的答案。请参阅Android isoDep.transceive on Generate AC command always return 6D00 unsupported

即使 POS 和谷歌钱包的每一步通信都是成功的,但我无法通过谷歌钱包,上面写着“状态未知,请与收银员核实付款是否成功”。

我只需要谷歌钱包来声明“状态待定”,就像在麦当劳(在美国)一样。我实际上不在乎整个交易是否会处理并清除我的银行。

我是事务处理的新手,似乎我错过了一个基本步骤。任何想法将不胜感激。

以下是成功的步骤。

“PayPass – M/Chip 交易处理”规范规定“在完成 COMPUTE CRYPTOGRAPHIC CHECKSUM 响应后,PayPass 卡可以从 PayPass 读卡器中取出。”

所以我假设 POS 到 Google Wallet 的通信已经完成,但 Google Wallet 似乎需要更多信息。

0 投票
1 回答
10400 浏览

rfid - 使用 APDU C# 设置自己的身份验证密钥 MiFare Classic

我正在使用 CardWerk 的 SMARTCARD API。

如何(byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF使用 APDU 更改默认键 ( )?

APDU 由 CLASS、INSTRUCTION、P1、P2 组成。我一直在阅读文档,但找不到将实际密钥更改为新密钥所需的参数。

0 投票
1 回答
3006 浏览

encryption - NFC 通信 - Mifare DESFire EV1 - AES

我正在使用 HID Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我想在标准数据文件中写入 16 个字节。我正在使用 WinSCard DLL (C++) 将 Native DESFire 命令包装在 ISO 7816 APDU 消息结构中。应用程序选择和身份验证已成功完成,但写入数据命令有问题。该文件的通信设置设置为 AES,完全加密。

我从 Native 命令计算 CRC:

然后我使用会话密钥和设置为 00 的 IV 进行加密:

APDU 发送:

作为回应,我得到一个“1E”状态码,表示 CRC 或填充错误。我不知道问题出在哪里,AES加密算法似乎很好,因为我设法读取数据。

它可能是 CRC 或 IV。我必须用 CMAC 异或数据吗?

0 投票
1 回答
2271 浏览

access-control - MIFARE Classic:如何找到好的访问字节值

我的目标是只有 KEY A 身份验证并禁用 Key B(用于存储数据的空间)。

我阅读了这些文件:

我了解如何计算这三个字节的十六进制值。

但我不明白如何选择好的数据块和访问字节规则

  1. 数据块规则

在这里,我只想保留密钥 A(R & Write 数据)并停用密钥 B。我选择了第一条规则:C1=0 C2= C3=0。这是正确的吗?

  1. 访问字节规则

我只想使用密钥 A,以便能够更改密钥 A 的值(写入)- 访问位:读/写密钥 A。所以我选择了 C1=0 C2=0 和 C3=1。这个对吗?

最终结果是 Byte 6 = F8, byte 7 = 77 and Byte 8 = 80

当我将这些值写入 MIFARE 卡时,这是不正确的。

你能帮我找到好的价值吗?

0 投票
0 回答
1531 浏览

encryption - NFC 通信 - Mifare DESFire EV1 - AES - 初始化向量

我正在使用 HID Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我想在标准数据文件中写入 16 个字节。我正在使用 WinSCard DLL (C++) 将 Native DESFire 命令包装在 ISO 7816 APDU 消息结构中。

我设法在现有文件中写入数据:

我从 Native 命令计算 CRC:

然后我使用会话密钥和设置为 00 的 IV 进行加密:

APDU 发送:

但是当我尝试写入之前创建的文件时遇到问题。

在使用应用程序主密钥进行 AES 身份验证后,我计算了两个子密钥(K1 和 K2)。我将 IV 设置为 0x00...00。然后我创建两个文件:

文件 0

文件 1

然后我使用 IV 将数据写入文件 0 中进行加密。我收到“1E”错误。

我设法读取现有文件中的数据:

我使用 IV 来解密我收到的数据,我得到了很好的字节值。所以我认为子键 K2 是好的。

我不知道我的写入数据命令中的问题在哪里。可能是静脉注射,但我不知道为什么。