Android y FIPS

6

Recientemente me encargaron un proyecto de investigación para escribir una "aplicación de mensajería segura" utilizando "protocolos aprobados por el gobierno" (el gobierno es EE. UU.). Entiendo que esto significa cifrado asimétrico y algoritmos criptográficos aprobados por el gobierno, AKA FIPS 140 (-1?) Y hashing (FIPS 180-x).

Algunos dispositivos Android como el Galaxy S4 y el HTC One se anuncian como certificados FIPS.

  1. ¿El código de nivel de aplicación puede aprovechar el certificado? Implementación en estos dispositivos? E.G., si uso el estándar API de Android / Java para abrir una conexión HTTPS o generar un SHA256 Hash, ¿esas llamadas se harían con un certificado FIPS? implementación?

    Si es así:

    • eso significaría que han reemplazado al proveedor de Android JCE predeterminado, ¿correcto?
    • ¿hay alguna manera de determinar que una JCE certificada por FIPS está disponible?

    Si no:

    • para hacer una aplicación certificable FIPS, como mínimo, necesitaría usar JNI para llamar a un certificado por FIPS Implementación de OpenSSL , o un proveedor alternativo de Java JCE, ¿correcto? (fuera de crear una implementación personalizada)
    • Suponiendo que se utilice una implementación OpenSSL certificada por FIPS, esto significaría que cualquier llamada de red segura (por ejemplo, HTTPS), tendría que hacerse ya sea en el código nativo (C) invocando la implementación OpenSSL, o usar JNI para invocar las bibliotecas OpenSSL ? Eso parece ser muy engorroso.
    • ¿Hay algún proveedor de JCE de Java puro certificado por FIPS que funcione con Android? De código abierto o con un costo razonablemente bajo. He visto la lista , pero es difícil diga qué es lo que un desarrollador puede obtener y usar en una aplicación, frente a un OEM. Los dos que saltan fuera son Jsafe de RSA y JCE de IBM. RSA es el único que parece estar certificado en Android, pero lo mejor que he podido descubrir es que cuesta más de $ 200,000, lo que sería demasiado caro para un pequeño proyecto de investigación. Pero suponiendo que esté disponible y funcione, tal vez podría seguir utilizando algo como Spongy Castle utilizando los mismos algoritmos, y con suerte simplemente cambiando el proveedor trabajaría (por ejemplo, si alguien quisiera pagar la factura)
pregunta Mark 16.01.2014 - 19:59
fuente

3 respuestas

6
  

¿El código de nivel de aplicación puede aprovechar la implementación certificada en estos dispositivos?

Sí. Como componente de un sistema seguro, puede realizar una reclamación como "estamos utilizando OpenSSL FIPS Object Module 1.2 (Validación n.º 1051 otorgada el 2008-11-17.) Para el cifrado".

  

eso significaría que han reemplazado al proveedor de Android JCE predeterminado, ¿correcto?

Correcto. Sun / Oracle no tiene un módulo validado FIPS.

  

¿hay alguna manera de determinar que una JCE certificada por FIPS está disponible?

Sí, IBM tiene un 'Módulo criptográfico IBM Java JCE 140-2' Es posible que desee consultar FIPS 140-1 y FIPS 140-2 Lista de proveedores

  

para hacer una aplicación certificable FIPS, como mínimo, necesitaría usar JNI para llamar a una implementación OpenSSL certificada por FIPS, o un proveedor alternativo de Java JCE, ¿correcto?

No. Como mínimo, debe presentar un argumento de seguridad formal convincente de que su aplicación tiene una teoría del funcionamiento seguro y que funcionará en modo seguro o que dejará de funcionar. Hay muchos requisitos específicos para la validación de FIPS y el simple hecho de usar un componente seguro ni siquiera le proporciona una fracción del camino para la validación. Sería como poner un motor Fararri en tu compacto y llamarlo un coche de carreras.

  

Suponiendo que se utilice una implementación OpenSSL certificada por FIPS, esto significaría que cualquier llamada de red segura (por ejemplo, HTTPS), debería hacerse en el código nativo (C) invocando la implementación OpenSSL, o usar JNI para invocar las bibliotecas OpenSSL ? Eso parece ser muy engorroso.

En realidad es mucho peor que eso. Para la aprobación de FIPS, debe mostrar que otra aplicación que se ejecuta en el mismo hardware no puede interferir con el funcionamiento seguro de su aplicación, lo que generalmente significa que el sistema operativo tiene controles de seguridad específicos y que el hardware es compatible con los controles de seguridad del sistema operativo. Sí, eso es correcto:

Su aplicación de Android de propósito general solo se validará para una pieza específica de hardware con una versión específica en el sistema operativo Android

Por ejemplo, 'Android Ice Cream Sandwich 4.0 que se ejecuta en Galaxy S2 y Galaxy S3 '

  

¿Hay algún proveedor de JCE de Java puro certificado por FIPS que funcione con Android? De código abierto o con un costo razonablemente bajo.

Es poco probable que encuentre a bajo costo.

  

Tal vez podría continuar usando algo como Spongy Castle usando los mismos algoritmos, y con suerte simplemente cambiando el proveedor funcionaría (por ejemplo, si alguien quisiera pagar la factura).

No, ya que el proveedor criptográfico es parte integral del argumento de seguridad. El verdadero trabajo es hacer el argumento de seguridad, no crear la aplicación.

    
respondido por el this.josh 17.01.2014 - 06:07
fuente
2

No confundamos conceptos. Hay algoritmos aprobados y implementaciones aprobados.

Para usar un "algoritmo aprobado" (o protocolo), use, digamos, SHA-256. Esta es una función matemáticamente definida. Hay un SHA-256; siempre que el código que use implemente SHA-256 según el estándar, entonces está usando un "algoritmo aprobado".

Una implementación aprobada es un sistema que NIST ha verificado formalmente que es "correcto" para cierta definición de corrección. Dicha verificación es larga, costosa, e involucra una gran cantidad de auditorías y documentos (estamos hablando de docenas de miles de páginas y docenas de miles de dólares aquí). Los proyectos de código abierto, por regla general, no tienen tiempo, fondos ni envidia para hacer eso; esto sucede solo con el patrocinio específico de alguna corporación que requiere el sello de certificación para vender algún producto a un gobierno inflexible.

¿Estás seguro de que quieres una implementación aprobada? Esto parece extraño, porque las implementaciones aprobadas no tienen mucho sentido, excepto como parte de una aplicación general que está igualmente certificada, y usted lo sabría.

    
respondido por el Tom Leek 16.01.2014 - 21:41
fuente
2

Si necesita “protocolos aprobados por el gobierno”, entonces el requisito es que use algoritmos y protocolos que estén codificados por un gobierno y aprobados para su uso por este gobierno. Salirse arriesgando y suponiendo que dicho gobierno es el gobierno de los EE. UU., Eso significa que debe usar los algoritmos especificados por las publicaciones actuales NIST . p>

La mayoría de los bloques de construcción criptográficos principales están especificados por NIST en FIPS o publicaciones NIST y aprobados para productos del gobierno de EE. UU. Una lista útil de algoritmos son aquellos para los que NIST ejecuta un programa de validación ; esto incluye:

La mayoría de los productos bien diseñados que utilizan la criptografía usan estos algoritmos, por lo que los "algoritmos aprobados por el gobierno" son un requisito común incluso de las entidades no gubernamentales. En realidad, no dice mucho más que "usar buenos algoritmos de cifrado que todos conocen como tales".

Los gobiernos especifican con menos frecuencia los protocolos de comunicación, por lo que es posible que desee aclarar cómo se aplica ese requisito a los protocolos. El estándar de facto para protocolos a través de Internet es RFC .

NIST ejecuta un programa de validación del módulo criptográfico . Un certificado FIPS 140 es un sello emitido por el gobierno de EE. UU. Que certifica que un laboratorio acreditado ha probado la implementación y la encontró conforme El nivel 1 de FIPS 140 (que es el nivel 1 de FIPS 140-2, siendo el -2 la versión de la norma) requiere poco más que calcular algunos valores de muestra y verificar que sean correctos; Los niveles más altos (que no encontrará en un dispositivo Android) tienen algunos requisitos de seguridad.

A menos que sus requisitos especifiquen que debe usar una implementación aprobada por el gobierno de estos algoritmos, no necesita buscar ningún certificado en particular en la implementación. Obtener un certificado cuesta tiempo y dinero, por lo que, como regla general, los proveedores de productos del mercado masivo pasan por la molestia. Puede ver la lista completa de productos validados (o más precisamente < a href="http://csrc.nist.gov/groups/STM/cmvp/validation.html#03"> modules ) en el sitio web del NIST.

La razón principal para obtener un certificado FIPS es vender al gobierno de los EE. UU. Para un proyecto de investigación, es muy improbable que necesites tener uno, a menos que el objetivo del proyecto sea construir un sistema que contenga un dispositivo Android que esté certificado por FIPS. Dado el fraseo de su solicitud, es probable que todo lo que necesita es usar los algoritmos correctos (que de todos modos querría hacer).

    
respondido por el Gilles 16.01.2014 - 22:10
fuente

Lea otras preguntas en las etiquetas