我将我的 Android 手机更新到 4.0.4,我注意到系统文件夹中出现了一个新文件nfcee access.xml。据我了解,该文件的想法是保留签名列表,并仅允许访问 SE 和相关意图,以访问使用此签名之一签名的包。到目前为止,这个列表中当然是谷歌钱包的签名。
有谁知道将来进入这个列表的过程是怎样的?是否需要直接向 Google 请求许可?
如果你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.mk
makefile 以访问 SE API:
LOCAL_JAVA_LIBRARIES := com.android.nfc_extras
中的功能com.android.nfc_extras
允许启用和禁用 SE,向它发送命令并从它接收响应(类似于IsoDep.transceive()
)。
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
需要注意的是:如果您可以将您的应用程序放在 nfcee_access 列表中,您可以执行以下操作:
如果您将手机植根,则可以完成所有这些操作。无需破解 nfcee_access 列表即可,您只需拦截到 nfc-chip 的所有流量即可。
即使使用有根电话,您也不能做的事情:
警告:当且仅当您拥有访问嵌入式 SE 的知识和安全访问密钥时,您几乎可以做任何事情。但是,如果您有这些信息,您就不会询问堆栈溢出问题。:-)
这个知识是一个保守的秘密,除非你是像谷歌、万事达卡、签证、美国运通等这样的大公司,否则没有人会告诉你这个秘密。
答案是否定的,您不能对安全元件做任何事情。只有 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 斯坦