Android IPC和ContentProvider的区别

时间:2011-06-30 11:43:58

标签: android ipc android-contentprovider

我正在尝试确定将手机上存储的加密内容暴露给第三方应用的最佳方法。内容非常敏感,需要加以保护,因此只有特定应用才能访问此内容。我正在研究的方法是IPC和内容提供商。以下是我认为是我的情况的一些赞成和反对意见。

IPC - 专业

  • 灵活的客户响应类型。可以返回不同的错误代码和受限访问级别

IPC - Con's

  • 实施起来比内容提供商

  • 更复杂
  • 必须以自己的方式保护对内容的访问权限。

内容提供商 - 专业人士

  • 易于实施

  • 通过提供商定义权限轻松保护访问权限:protectionLevel = signature

内容提供商 - Con的

  • 为了保护访问权限,Content Provider的密钥签名必须与第三方应用程序共享,这是不理想的。

  • 返回的结果类型的灵活性有限。 Content Provider仅返回查询列的Cursor对象。


性能和电池有什么重大差异吗? 可以异步执行吗?
对列表的任何其他意见/建议?

2 个答案:

答案 0 :(得分:4)

  

通过提供者定义权限轻松保护访问权限:protectionLevel = signature

只有在您是唯一使用内容提供商的公司时才有效。

  

为了保护访问权限,Content Provider的密钥签名必须与第三方应用程序共享,这是不理想的。

我会更多地将其描述为“可能符合'精神错乱'的医学定义”。您的第三方将能够修改您的“安全”数据,伪造您已发布的应用程序,将您的签名密钥泄露给恶意软件作者等。

  

Content Provider仅返回查询列的Cursor对象。

除了基于Cursor的内容提供程序API之外,您还可以使用基于文件的内容提供程序API。请参阅openInputStream()上的ContentResolver等方法。

  

在性能和电池方面有什么重大差异吗?

不是特别。

  

可以异步执行吗?

两者都可以,但我个人觉得服务更容易。

  

对列表有任何其他意见/建议吗?

权限与服务和内容提供商同样有效,但我希望再次强调,您不应该与第三方共享您的签名密钥,除非是在枪口下。

答案 1 :(得分:0)

我无法回答您的完整问题,但我可以解决密钥共享问题。 您的APK是使用公钥/私钥对的公共部分签名的。可以将您的公钥附加到另一个应用程序以伪装成您的应用程序,但有人需要使用您的私钥通过您的公钥上传您的名称中的应用程序。

  

公钥证书,也称为数字证书或   身份证书,包含公钥/私钥的公钥   对,以及标识密钥所有者的一些其他元数据   (例如,名称和位置)。证书的所有者持有   相应的私钥。

     

签署APK时,签名工具会将公钥证书附加到APK。公钥证书就像一个   “指纹”将APK与您和您的唯一关联   相应的私钥。这有助于Android确保任何未来   您的APK更新是真实的,来自原作者。

(来自https://developer.android.com/studio/publish/app-signing.html

此外,据我所知,其他应用程序如何与您的应用程序共享其密钥,而不是相反。如果您可以使用其他设置之一,则也不需要签名级别保护。根据{{​​3}},您可以选择将应用程序设置为4种不同的保护级别之一。大多数应用程序不包含足够敏感且需要“危险”设置的数据,因此正常情况可能适用于大多数应用程序。

此外,您的应用程序的签名(公钥)已通过PackageManager类中提供的方法公开。我仔细查看了Android开发人员页面,并通过另一篇文章阅读了非常有用的答案来查找此内容。看来任何应用都可以通过CommonsWare {/ 3}}中描述的方法获取应用的公钥。