问题标签 [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.
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) 的响应是:
smartcard - 如何读写未知的智能卡?
我购买了一些我认为是金雅拓产品的智能卡。
现在我有了这四个 ATR(使用 ACR38 和 ACR122U 阅读器):
我搜索了互联网,但没有找到关于这些 ATR 的任何信息(在 gemalto.com 和其他任何地方都没有)。
我怎样才能读和写这张卡?
我可以使用两个智能卡读卡器来读写这些卡,还是必须购买新型号?
nfc - 根据 ATR 确定卡类型
是否可以使用 ATR 来确定我是否有 ISO14443A 或 ISO14443B 类型的卡?如果是,如何?
nfc - 在请求 EMV 卡的 GPO 命令时出现解析器错误
我对 VISA 卡的 GET PROCESSING OPTIONS (GPO) 命令有一些问题。
以下是我对 VISA 申请的 SELECT 命令的回复:
我从中提取了以下 PDOL:9F66049F02069F37049F1A02
我不确定 tag 9F66
。
我的 GPO 命令如下所示:
但我得到一个解析器错误作为响应:
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 似乎需要更多信息。
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 组成。我一直在阅读文档,但找不到将实际密钥更改为新密钥所需的参数。
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 异或数据吗?
access-control - MIFARE Classic:如何找到好的访问字节值
我的目标是只有 KEY A 身份验证并禁用 Key B(用于存储数据的空间)。
我阅读了这些文件:
- http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
- http://dangerousthings.com/wp-content/uploads/2012/08/NFC-Access-Control-for-Mifare-S50.pdf
我了解如何计算这三个字节的十六进制值。
但我不明白如何选择好的数据块和访问字节规则:
- 数据块规则
在这里,我只想保留密钥 A(R & Write 数据)并停用密钥 B。我选择了第一条规则:C1=0 C2= C3=0。这是正确的吗?
- 访问字节规则
我只想使用密钥 A,以便能够更改密钥 A 的值(写入)- 访问位:读/写密钥 A。所以我选择了 C1=0 C2=0 和 C3=1。这个对吗?
最终结果是 Byte 6 = F8, byte 7 = 77 and Byte 8 = 80
当我将这些值写入 MIFARE 卡时,这是不正确的。
你能帮我找到好的价值吗?
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 是好的。
我不知道我的写入数据命令中的问题在哪里。可能是静脉注射,但我不知道为什么。