11

我将我的 Android 手机更新到 4.0.4,我注意到系统文件夹中出现了一个新文件nfcee access.xml。据我了解,该文件的想法是保留签名列表,并仅允许访问 SE 和相关意图,以访问使用此签名之一签名的包。到目前为止,这个列表中当然是谷歌钱包的签名。

有谁知道将来进入这个列表的过程是怎样的?是否需要直接向 Google 请求许可?

4

4 回答 4

18

如果你root你的手机,你可以修改文件。该文件包含允许访问安全元件 (SE) 的签名和包名称的列表。签名是十六进制编码的 X.509 证书。要创建一个,只需<debug />在文件中包含标签,它将打印到 logcat 被拒绝 SE 访问的应用程序的十六进制编码签名,以便轻松剪切并粘贴到此文件中。

要创建可以访问 SE 的应用,您需要将此权限添加到清单中:

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

要实际访问 SE,您需要通过导入来访问隐藏的 API com.android.nfc_extras

import com.android.nfc_extras.NfcAdapterExtras;
import com.android.nfc_extras.NfcAdapterExtras.CardEmulationRoute;
import com.android.nfc_extras.NfcExecutionEnvironment;

实现这一点的最简单方法是在 Android 源代码树中编译您的应用程序,方法是将其放入packages/apps并从那里构建它。您需要将以下行添加到Android.mkmakefile 以访问 SE API:

LOCAL_JAVA_LIBRARIES := com.android.nfc_extras

中的功能com.android.nfc_extras允许启用和禁用 SE,向它发送命令并从它接收响应(类似于IsoDep.transceive())。

于 2012-05-08T20:51:06.403 回答
6

This is interesting indeed. If entering your certificate and package name in this file is all that is needed, you shouldn't need to talk to Google, just get whoever is building the ROM (yourself if custom ROM, or a particular carrier) to include it. The bigger problem though is, who do you need to talk to to get the CardManager keys. If it is the carrier, you can also get them to pre-install your applet, so you might not need the keys at runtime (unless you want to use a secure channel to your applet).

Update: Here's a summary of SE support in Android and some more info on how to use the embedded one. In short, it does work, but you can only query stuff of course. It runs JavaCard and is GP 2.1.1 compatible, uses 3DES keys for the secure channel.

http://nelenkov.blogspot.com/2012/08/accessing-embedded-secure-element-in.html

http://nelenkov.blogspot.com/2012/08/android-secure-element-execution.html

BTW, here's the currently allowed cert on my GN 4.0.4. A package is not specified, so any app signed with it will get access to the SE:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            a8:cd:17:c9:3d:a5:d9:90
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=California, L=Mountain View, O=Google Inc., OU=Android, CN=Google NFC
        Validity
            Not Before: Mar 24 01:06:53 2011 GMT
            Not After : Aug  9 01:06:53 2038 GMT
        Subject: C=US, ST=California, L=Mountain View, O=Google Inc., OU=Android, CN=Google NFC
于 2012-05-08T08:22:02.373 回答
2

需要注意的是:如果您可以将您的应用程序放在 nfcee_access 列表中,您可以执行以下操作:

  • 启用 UICC(SIM 卡)并启用嵌入式安全元件(如果存在)
  • 打开与嵌入式安全元件的通信通道并交换数据
  • 如果UICC 想要向您发送数据(您将只是接收者),则从 UICC(SIM 卡)接收交易数据。

如果您将手机植根,则可以完成所有这些操作。无需破解 nfcee_access 列表即可,您只需拦截到 nfc-chip 的所有流量即可。

即使使用有根电话,您也不能做的事情:

  • 在 UICC/eSE 上安装小程序
  • 记录/监控/影响嵌入式安全元件/UICC 和外部阅读器(例如黑客支付系统)之间的数据传输。

警告:当且仅当您拥有访问嵌入式 SE 的知识和安全访问密钥时,您几乎可以做任何事情。但是,如果您有这些信息,您就不会询问堆栈溢出问题。:-)

这个知识是一个保守的秘密,除非你是像谷歌、万事达卡、签证、美国运通等这样的大公司,否则没有人会告诉你这个秘密。

于 2012-05-08T21:48:09.603 回答
0

答案是否定的,您不能对安全元件做任何事情。只有 SE 所有者或发行人可以允许访问 SE - 即它是 Google 本身,或者可能是 First Data (http://www.firstdata.com/en_us/products/merchants/mobile-commerce/trusted-service-manager -solution.html),但我认为这家公司只对谷歌钱包本身负责,而不对 SE 管理负责——这可能由 SK C&C 完成——我不知道......

也采取这种方式 - 使用嵌入式安全元件的先决条件是您提供优质服务并且您是 Google 合作伙伴或其他手机制造商合作伙伴(除非您来自 Facebook 或类似公司,节省您的时间并且不要尝试)。这并不容易,而且 99.99% 的服务都不存在。

关于安全元件,您现在可以等到 SWP 和 SIM 卡变得更流行和可接受的解决方案,因为您可能更容易在国家层面与 MNO 签订合同,或者希望使用 NFC-WI 和 SD 卡解决方案,或者使用贴纸或外部iPhone 的 iCarte 等配件。

BR 斯坦

于 2012-05-08T08:25:44.110 回答