2011-06-30 13 views
7

Estoy intentando decidir el mejor enfoque para exponer el contenido cifrado almacenado en el teléfono a aplicaciones de terceros. El contenido es confidencial y necesita protección, por lo que solo ciertas aplicaciones pueden acceder a esto. Los enfoques que estoy investigando son IPC y proveedor de contenido. A continuación se muestra lo que creo que son algunos de los pros y contras de ambos para mi situación.Diferencias entre Android IPC y ContentProvider

IPC -

  • tipos de respuesta flexible a Pro cliente. Diferentes códigos de error y los niveles de acceso restringido pueden ser devueltos

IPC - de Con

  • más complicada de implementar que el Proveedor de Contenido

  • tendría que escribir propia manera de garantizar el acceso satisfacer. Proveedor

contenido - de

  • Fácil Pro para implementar

  • Fácil de asegurar el acceso al hacer el permiso definición del proveedor: ProtectionLevel = firma

contenido Proveedor - de

  • Para proteger el acceso Con, firma clave del proveedor de contenidos debe ser compartida con la aplicación de 3 ª parte que no es ideal.

  • Flexibilidad limitada en los tipos de resultados devueltos. El proveedor de contenido devuelve solo un objeto Cursor para las columnas que se consultaron.


¿Hay grandes diferencias en el rendimiento y la batería?
¿Se puede ejecutar de forma asíncrona?
¿Algún otro comentario/sugerencia a la lista?

Respuesta

4

Fácil de asegurar el acceso al hacer el permiso definición del proveedor: ProtectionLevel = firma

que sólo funciona si usted es la única firma con el proveedor de contenido.

Para garantizar el acceso, la firma de clave del proveedor de contenido se debe compartir con una aplicación de terceros que no es ideal.

Describiría esto más como "puede cumplir con la definición médica de 'locura'".Sus terceros podrán modificar sus datos "seguros", forjar aplicaciones publicadas por usted, filtrar su clave de firma a autores de malware, etc.

El proveedor de contenido devuelve solo un objeto Cursor para las columnas que fueron consultados

Puede utilizar la API del proveedor de contenido basado en archivos además de, o en su lugar, la API del proveedor de contenido basado en Cursor. Vea métodos como openInputStream() en ContentResolver.

¿Hay alguna diferencia importante en el rendimiento y la batería?

No especialmente.

¿Se puede ejecutar de forma asíncrona?

Ambos pueden, aunque personalmente me resulta un poco más fácil con los servicios.

Cualesquiera otros comentarios/sugerencias a la lista?

Los permisos funcionan igual de bien con los servicios y proveedores de contenido, pero deseo recalcar que nunca debe compartir su clave de firma con terceros, excepto tal vez a punta de pistola.

+0

Gracias por sus comentarios commonsware! – Dom

+0

Quizás debería preguntar en otra pregunta, pero ¿hay alguna otra alternativa que deba considerar para exponer mi contenido? ¿Podría usar una forma simple de comunicación basada en el Intento? Si es así, ¿cómo haría esto? Y cualquier pros/contras a esta técnica? – Dom

+0

@Dom: Sí, podría tener un servicio que reciba comandos a través de 'onStartCommand()' y envíe los resultados a través de un 'Messenger' o algo así como un' Intent' extra en el comando. No cambia las características de seguridad. – CommonsWare

0

No puedo responder a su pregunta completa, pero puedo dirigirme a la parte para compartir la clave. Su APK está firmado con la parte pública de su par de claves pública/privada. Puede ser posible adjuntar su clave pública a otra aplicación para simular ser su aplicación, pero alguien debería tener su clave privada para cargar una aplicación a su nombre mediante el uso de su clave pública.

Un certificado de clave pública, también conocido como un certificado digital o un certificado identidad, contiene la clave pública de un claves pública/privada par, así como algunos otros metadatos que identifica el propietario del clave (por ejemplo, nombre y ubicación). El propietario del certificado tiene la clave privada correspondiente.

Cuando firma un APK, la herramienta de firma adjunta el certificado de clave pública al APK. El certificado de clave pública sirve como una "huella dactilar" que asocia de manera exclusiva el APK a usted y a su clave privada correspondiente . Esto ayuda a Android a garantizar que cualquier actualización futura de su APK sea auténtica y provenga del autor original.

(desde https://developer.android.com/studio/publish/app-signing.html)

Además, es mi entendimiento de la forma en que está redactado que las otras aplicaciones comparten sus llaves con su aplicación y no al revés. La protección de nivel de firma tampoco es necesaria si puede utilizar una de las otras configuraciones. De acuerdo con https://developer.android.com/guide/topics/manifest/permission-element.html#plevel, puede elegir configurar la aplicación en uno de los 4 niveles de protección diferentes. La mayoría de las aplicaciones no contienen datos que sean lo suficientemente sensibles como para requerir la configuración "peligrosa", por lo que lo normal es que funcione para la mayoría de las aplicaciones.

Además, la firma de su aplicación (clave pública) ya está expuesta a través de los métodos disponibles en la clase PackageManager. Busqué extensamente las páginas de desarrollador de Android y leí una respuesta muy útil a otra publicación para encontrar esto. Parece que cualquier aplicación puede obtener la clave pública de su aplicación a través del método descrito aquí Android content provider protection level & different keys por CommonsWare.