Android e FIPS

6

Recentemente mi è stato affidato un progetto di ricerca per scrivere una "applicazione di messaggistica sicura" utilizzando "protocolli approvati dal governo" (il governo è gli Stati Uniti). Prendo questo per indicare la crittografia asimmetrica e gli algoritmi crittografici approvati dal governo, AKA FIPS 140 (-1?) E hashing (FIPS 180-x).

Alcuni dispositivi Android come Galaxy S4 e HTC One sono pubblicizzati come certificati FIPS.

  1. Il codice a livello di applicazione ottiene il vantaggio della certificazione implementazione su questi dispositivi? E.G., se uso lo standard API Android / Java per aprire una connessione HTTPS o generare un SHA256 hash, quelle chiamate dovrebbero essere fatte con una certificazione FIPS implementazione?

    In caso affermativo:

    • significherebbe che hanno sostituito il provider JCE Android predefinito, corretto?
    • esiste un modo per determinare che un JCE certificato FIPS sia disponibile?

    In caso contrario:

    • per poter creare un'app certificabile FIPS, al minimo è necessario utilizzare JNI per chiamare una certificazione FIPS Implementazione OpenSSL o un fornitore JCE java puro alternativo, corretto? (al di fuori della creazione di un'implementazione personalizzata)
    • supponendo di utilizzare un'implementazione OpenSSL certificata FIPS, ciò significherebbe che qualsiasi chiamata di rete sicura (HTTPS per esempio), dovrebbe essere eseguita nel codice nativo (C) richiamando l'implementazione OpenSSL, o utilizzare JNI per richiamare le librerie OpenSSL ? Sembrerebbe molto ingombrante.
    • Esistono provider JCE puramente java certificati FIPS che funzioneranno con Android? Open Source o a costi ragionevolmente bassi preferiti. Ho esaminato l'elenco , ma è difficile dì cosa può fare uno sviluppatore e utilizzarlo in un'app, rispetto a un OEM. I due che saltano fuori sono Jsafe di RSA e JCE di IBM. RSA è l'unico che sembra essere certificato su Android, ma la cosa migliore è che sono riuscito a scoprire che è in aumento di $ 200.000, il che sarebbe troppo costoso per un piccolo progetto di ricerca. Ma supponendo che sia là fuori e funzioni, potrei forse procedere usando qualcosa come Spongy Castle usando gli stessi algoritmi, e spero solo cambiando il fornitore avrebbe funzionato (ad es. se qualcuno voleva pagare il conto).
posta Mark 16.01.2014 - 19:59
fonte

3 risposte

6

Does application level code get to take advantage of the certified implementation on these devices?

Sì. Come componente di un sistema sicuro puoi presentare un reclamo come "stiamo usando il modulo 1.2 di OpenSSL FIPS Module (Validation # 1051 award 2008-11-17.) Per la crittografia".

that would mean they've replaced the default android JCE provider, correct?

Una corretta. Sun / Oracle non ha un modulo convalidato FIPS.

is there any way to determine that a FIPS certified JCE is available?

Sì, IBM ha un "modulo di crittografia IBM Java JCE 140-2". Puoi dare un'occhiata a Elenco fornitori FIPS 140-1 e FIPS 140-2

in order to make a FIPS certifiable app, at the minimum one would need to use JNI to call out to a FIPS certified OpenSSL implementation, or an alternative pure java JCE provider, correct?

No. Come minimo, devi formulare una convincente argomentazione sulla sicurezza formale secondo cui la tua applicazione ha una teoria del funzionamento sicuro e che funzionerà in modalità protetta o cesserà di funzionare. Esistono molti requisiti specifici per la convalida FIPS e semplicemente l'utilizzo di un componente sicuro non ti dà nemmeno una frazione del modo di convalidare. Sarebbe come mettere un motore Fararri nella tua compatta e chiamarla una macchina da corsa.

assuming using a FIPS certified OpenSSL implementation, this would mean that any secure networking calls (HTTPS for example), would have to be done either in native code (C) invoking the OpenSSL implementation, or use JNI to invoke the OpenSSL libraries? That would seem to be very cumbersome.

In realtà è molto peggio di così. Per l'approvazione FIPS è necessario dimostrare che un'altra applicazione in esecuzione sullo stesso hardware non può interferire con il funzionamento sicuro dell'applicazione, il che di solito significa che il sistema operativo ha controlli di sicurezza specifici e che l'hardware supporta i controlli di sicurezza del sistema operativo. Sì, è giusto:

L'applicazione Android per scopi generali verrà convalidata solo per un determinato componente hardware con una versione specifica sul sistema operativo Android

Ad esempio 'Android Ice Cream Sandwich 4.0 in esecuzione su Galaxy S2 e Galaxy S3 '

Are there any FIPS certified pure-java JCE providers that will work with Android? Open Source or reasonably low cost preferred.

Difficile da trovare a basso costo.

I could perhaps proceed using something like Spongy Castle using the same algorithms, and hopefully just changing out the provider would work (e.g., if somebody wanted to foot the bill.)

No, poiché il provider di crittografia è parte integrante dell'argomento di sicurezza. Il vero lavoro sta facendo l'argomento sicurezza, non creando l'applicazione.

    
risposta data 17.01.2014 - 06:07
fonte
2

Non confondiamo i concetti. Esistono algoritmi approvati e approvate implementazioni .

Per usare un "algoritmo approvato" (o protocollo), si usa, per esempio, SHA-256. Questa è una funzione definita matematicamente. C'è uno SHA-256; finché il codice che usi implementa SHA-256 secondo lo standard, allora stai utilizzando un "algoritmo approvato".

Un'implementazione approvata è un sistema che è stato formalmente verificato, dal NIST, che è "corretto" per alcune definizioni di correttezza. Tale verifica è lunga, costosa e comporta molti audit e carta (stiamo parlando di decine di migliaia di pagine e dozzine di migliaia di dollari qui). I progetti di open source, di regola, non hanno tempo, denaro o invidia per farlo; questo accade solo su sponsor specifici di alcune società che richiedono il marchio di certificazione per vendere un prodotto a un governo inflessibile.

Sei sicuro di volere un'implementazione approvata? Questo sembra strano, perché le implementazioni approvate non hanno molto senso se non come parte di un'applicazione complessiva che è ugualmente certificata - e tu lo sapresti.

    
risposta data 16.01.2014 - 21:41
fonte
2

Se hai bisogno di "protocolli approvati dal governo", allora il requisito è che tu usi algoritmi e protocolli che sono codificati da un governo e approvati per l'uso da questo governo. Andando su un arto e assumendo che tale governo è il governo degli Stati Uniti, ciò significa che è necessario utilizzare algoritmi specificati dalle attuali NIST pubblicazioni.

La maggior parte dei principali elementi costitutivi crittografici sono specificati dal NIST nelle FIPS o nelle pubblicazioni NIST e approvati per i prodotti governativi degli Stati Uniti. Un pratico elenco di algoritmi è quello per cui NIST esegue un programma di convalida ; questo include:

La maggior parte dei prodotti ben progettati che utilizzano la crittografia utilizzano questi algoritmi, quindi "gli algoritmi approvati dal governo" sono un requisito comune anche da entità non governative. In realtà non dice molto di più di "usare buoni algoritmi crittografici che tutti conoscono come tali".

I protocolli di comunicazione sono meno spesso specificati dai governi, quindi potresti voler chiarire in che modo tale requisito si applica ai protocolli. Lo standard de facto per i protocolli su Internet è RFC .

NIST esegue un programma di convalida dei moduli crittografici . Un certificato FIPS 140 è un timbro emesso dal governo degli Stati Uniti che certifica che un laboratorio accreditato ha testato l'implementazione e l'ha trovata conforme. FIPS 140 livello 1 (ovvero FIPS 140-2 livello 1, il -2 è la versione dello standard) richiede poco più che calcolare alcuni valori campione e verificare che siano corretti; i livelli più alti (che non troverai su un dispositivo Android) hanno alcuni requisiti di sicurezza.

Se i requisiti specificati non specificano che è necessario utilizzare un'implementazione approvata dal governo di questi algoritmi, non è necessario cercare alcun certificato particolare sull'implementazione. Ottenere un certificato costa tempo e denaro, quindi in linea di massima i venditori di prodotti del mercato di massa passano attraverso la seccatura. Puoi consultare l' elenco completo dei prodotti convalidati (o più precisamente < a href="http://csrc.nist.gov/groups/STM/cmvp/validation.html#03"> moduli ) sul sito web del NIST.

Il motivo principale per ottenere un certificato FIPS è vendere al governo degli Stati Uniti. Per un progetto di ricerca, è molto improbabile che sia necessario averne uno, a meno che l'obiettivo del progetto non sia quello di creare un sistema che contenga un dispositivo Android a sua volta certificato FIPS. Dato il fraseggio della tua richiesta, è probabile che tutto ciò di cui hai bisogno è usare gli algoritmi giusti (che vorresti comunque fare).

    
risposta data 16.01.2014 - 22:10
fonte

Leggi altre domande sui tag