2013-06-14 8 views
7

Ich arbeite an einem sicherheitsrelevanten Projekt und muss sicherstellen, dass es der FIPS-Konformität entspricht.FIPS-Konformität für mein Android-Projekt

Meiner Meinung nach ist FIPS-Konformität die Einhaltung sowohl auf Hardware- als auch auf Softwareebene. Momentan gibt es 2 Samsung Android-Geräte, die FIPS-kompatibel sind, dh sie haben die Einhaltung der Hardware- und Software-Ebene. Ich habe einige Fragen wie folgt: -

1) Wenn ich möchte, dass meine Android App FIPS-konformen machen, wenn ich die einzige Kryptomodul in meinem Projekt verwendet haben FIPS-konformen, ist es genug?

Das vom Android SDK bereitgestellte Crypto-Modul ist die BouncyCastle-Bibliothek, die nicht FIPS-kompatibel ist.

Ich bin mit FIPS-konformen OpenSSL-Bibliothek in meinem Projekt als pro Stackoverflow link

Ich habe meine Projektbibliothek mit der OpenSSL-Bibliothek gebaut dh libssl.a und libcrypto.a FIPS-Modul konfiguriert werden.

2) Laut dem FIPS OpenSSL-Modul für Android documentation wurde das Modul auf verschiedenen Android-Geräten der armv7-Architektur getestet. Kommt es hier nicht auf FIPS-konforme Android-Hardware an?

3) Der AES-Algorithmus unterliegt der FIPS-Konformität. Bedeutet dies, dass wenn ich den AES-Algorithmus in Java-Code anstelle der FIPS-konformen OpenSSL-Bibliothek verwende, ist dies nicht die FIPS-Konformität.

Wenn AES FIPS-konform ist, was hat es mit der Implementierung von AES in Java oder C# zu tun? Müssen beide die CMVP passieren?

Bitte erleuchten Sie mich.

Antwort

11

Meiner Meinung nach ist FIPS-Konformität die Einhaltung sowohl auf Hardware- als auch auf Softwareebene.

FIPS 140-2 ist ein großes Dokument rund um die Hardware. Die Leute, die die Anforderungen formulierten, waren Elektroingenieure, die Hardware bauten. Zum Beispiel führt Dr. Randy Easter das Cryptographic Module Validation Program (CMVP) durch. Hier ist sein kurzer Lebenslauf: http://www.nist.gov/itl/csd/easter-randy.cfm. Er ist sicher ein Doppel-E;)

Als NIST und das CMVP die Anforderungen an die Software zurückstellten, hämmerten sie einen quadratischen Stift in ein rundes Loch. Sie werden viele Dinge finden, die im Zusammenhang mit Software absolut keinen Sinn machen. Zum Beispiel speichern OpenSSL (und andere FIPS-validierte Bibliotheken) den HMAC (symmetrischen) Schlüssel, um die Integrität der Software in der Software selbst zu verifizieren. (Es ist sehr unterschiedlich, wenn der Schlüssel in rom, mit den Sicherungen, auf manipulationssicheren Leiterplatten und in manipulationssicheren Gehäusen gebrannt wird).

Der Vollständigkeit halber finden Sie die zugelassenen Methoden der Integritätsprüfung in der Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Validation Program. Sie enthalten wirklich eine CMAC und HMAC.


... Android App FIPS-konformen ...

Das Wichtigste zuerst :)

Nach dem Cryptographic Module Validation Program (CMVP), gibt es zwei Arten von Kryptographie: validiert und nicht validiert. "Konform" bedeutet nichts (auch nicht "konform", "genehmigt", "gleichwertig" usw.).

Ihre App verwendet validierte Kryptografie oder keine validierte Kryptografie. Wenn Sie angeben, dass Ihre App "konforme" Kryptografie verwendet, dann ist dies nicht mit validierter Kryptographie. Hier ist ein typischer Marketingfehler: http://webdrive.com/support/webdrive/v11/fips_compliance.htm.

Ich weiß, DHS zog eine Reihe von Switches aus Federal, weil die Marketing-Abteilung des Switch-Herstellers nannte sie "FIPS-konform" statt "FIPS Validated".


1) Wenn ich möchte, dass meine Android App FIPS-konformen machen, wenn ich das einzige Kryptomodul in meinem Projekt kompatible FIPS verwendet haben, ist es genug?

Nein. Es gibt zwei Teile zu dieser Nummer. Erstens ist prozedural, und es ist in der Sicherheitsrichtlinie des Moduls festgelegt. Zum Beispiel hat OpenSSL eine Prozedur, um es aus Quellen zu erstellen, und Sie können nicht von den Prozeduren abweichen.

Die zweite ist die Nutzung (mangels eines besseren Begriffs), und Sie müssen die Betriebsanforderungen von FIPS 140-2 erfüllen. Beispielsweise können Sie Schlüssel und ivs nicht erneut verwenden, wenn Sie Nachrichten senden, die unter AES verschlüsselt sind.

Etwas, das in beide fällt: Sie müssen FIPS_mode_set aufrufen, und es muss nicht Null zurückgeben. Das Versäumnis, FIPS_mode_set aufzurufen, ist ein Verfahrensfehler und bedeutet, dass Sie keine validierte Kryptographie verwenden. Ein Fehler von FIPS_mode_set ist ein Betriebsfehler und bedeutet, dass Sie keine validierte Kryptographie verwenden.

Wenn Sie OpenSSL verwenden, sollten Sie auch "vendor affirmed" in Ihr Datenblatt aufnehmen und das 1747-Zertifikat angeben. Ich glaube, das ist eine Anforderung der Sicherheitsrichtlinie, und die Nichtbereitstellung bedeutet, dass Ihre Kryptografie nicht validiert ist!


Crypto-Modul von Android SDK ist die BouncyCastle Bibliothek und es ist nicht FIPS-kompatibel.

Ich benutze keine Hüpfburg, daher kenne ich den Status nicht. Wenn die Bibliothek validiert wurde, wird vom CMVP ein Zertifikat ausgestellt. Sie können sie unter Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules suchen.


ich FIPS verwende in meinem Projekt-konforme OpenSSL-Bibliothek per Link versuchen Stackoverflow

Sie sollten auch Wikis OpenSSL: FIPS Library and Android.

Der Vollständigkeit halber können Sie das Buildsystem von Android für OpenSSL nicht verwenden und dann die FIPS-validierte Kryptographie anfordern.Es unterscheidet sich vollständig von den in der Sicherheitsrichtlinie veröffentlichten Verfahren, sodass die Validierung ungültig wird.


Nach dem FIPS OpenSSL-Modul für Android Dokumentation, wurde das Modul auf verschiedene Android-Geräte von ARMv7 Architektur getestet.

Dies ist ein schwieriger Bereich zu entwirren. Steve Marquess versuchte es unter zu beantworten.

Hier ist mein (möglicherweise inkorrektes) Verständnis: Sobald eine Plattform validiert ist, werden geringfügige Änderungen an der Plattform vom Cryptographic Module Validation Program (CMVP) toleriert. Ich vermeide gerade, was eine "Plattform" ist, aber es schließt Motherboard, Prozessor, Anweisungssatz und andere betriebliche Einflüsse ein. Im Allgemeinen enthält es keine Umgebungseinflüsse wie Laufzeitbibliotheken.

Zum Beispiel kann Apple kleinere Änderungen am Motherboard für ein iPad mit A6-Prozessor vornehmen (vielleicht ändert sich der Formfaktor oder liefert eine verbesserte integrierte Kamera). Es kann sogar geringfügige Änderungen am A6-Prozessor selbst vornehmen (möglicherweise erhöht sich die Cache-Größe). Sie können es nennen, was sie wollen (ein IpAd 3, iPad 4 oder was auch immer kitzelt die Fan Boi). Ein A7-Prozessor auf dem gleichen Motherboard würde jedoch eine andere Validierung benötigen, da es eine größere Revision ist. Dasselbe gilt für Befehlssätze: armv7 und armv7s erfordert separate Validierungen.

Als ein anderes Beispiel, betrachten Sie ARMv7-Prozessoren. Snapdragon-Prozessor, der ARMv7 verwendet, ist eine andere Plattform als ein klassischer ARM7EJ-S von ARM Holdings Corporation. Beide benötigten separate Validierungen. Und ein NEON ist ARMv7, und es wurde eine separate Validierung (ich denke, es wurden einige Multimedia-Anweisungen oben auf ARMv7 hinzugefügt).

Und das CMVP kann jederzeit seine Meinung ändern und aufhören, die kleinen Plattformänderungen zu tolerieren.


Will Android Hardware nicht FIPS hier Materie

konform zu sein

Nein, solange die Plattform (inklusive Hardware) wurde zuvor validiert. Wenn die Plattform wurde bisher nicht bestätigt, sein dann ein Problem;)


3) AES-Algorithmus ist unter FIPS-Kompatibilität. Bedeutet dies bedeuten, dass, wenn ich AES-Algorithmus in Java-Code statt der Verwendung von FIPS-konforme OpenSSL-Bibliothek verwenden, ist es nicht FIPS-Konformität.

Korrekt. Der Java-Code ist nicht FIPS-validiert, daher kann Ihre App keine FIPS-validierte Kryptografie verwenden.

Der Vollständigkeit halber gibt es auch ein Kryptographie-Algorithmus-Validierungsprogramm (CAVP). Das CAVP wird die AES-Implementierung durch Ausstellen eines Zertifikats abzeichnen. Beispielsweise wurden OpenSSLs AES-Implementierung Zertifikate 1884, 2116, 2234, 2342, 2394 und 2484 ausgestellt.

Schließlich, nachdem andere NIST-Abteilungen (wie das CAVP) die Überprüfung Ihres Moduls abgeschlossen haben, wird das CMVP abzeichnen auf dem Modul (als Ganzes) und ein Zertifikat ausstellen. Zum Beispiel hat NIST das Zertifikat 1747 für OpenSSL ausgestellt.


Wenn AES unter FIPS-Kompatibilität ist, was hat es mit Java oder C# -Implementierung von AES zu tun. Müssen beide über das CMVP passieren?

Da Sie FIPS verwenden OpenSSL Validierte, dann müssen Sie:

  • Unter Android und Java, JNI verwenden und in ein gemeinsames Objekt aufrufen. Das gemeinsam genutzte Objekt muss OpenSSLs FIPS-validierte Kryptographie bereitstellen.
  • Verwenden Sie unter C# P/Invoke oder Inerop und rufen Sie eine dynamische Linkbibliothek auf. Die Dynamic Link Library muss OpenSSLs FIPS-validierte Kryptografie bereitstellen.

ich meine Projektbibliothek mit der OpenSSL-Bibliothek dh libssl.a und libcrypto.a konfiguriert mit FIPS-Modul aufgebaut haben.

Sie können nicht fipsld und incore über statische Bibliotheken laufen, so dass es klingt wie etwas nicht stimmt. Sie können nur für ausführbare Dateien und freigegebene Objekte ausgeführt werden. fipsld und incore arbeiten zusammen und betten die Signatur des FIPS-bezogenen Codes und der Daten in Ihre ausführbare Datei, Ihre gemeinsam genutzte Bibliothek oder App ein. Der FIPS-bezogene Code und die Daten stammen aus (1) fipscanister.o und (2) fips_premain.c.

Um den Kreis zu schließen, kompiliert fipsldfips_premain.c und Links in fipscanister.o zu Ihrer ausführbaren Datei, gemeinsames Objekt oder App. Dann schreibt incore die Signatur in Ihre ausführbare Datei, Ihr gemeinsames Objekt oder Ihre App. Wenn Sie FIPS_mode_set aufrufen, die Integrität des FIPS-bezogenen Codes werden Daten über einen HMAC verifiziert, und dann werden die FIPS-bezogenen Selbsttests ausgeführt. Wenn alles erfolgreich ist, gibt FIPS_mode_set ungleich Null zurück und Sie verwenden FIPS-validierte Kryptografie.

Als Referenz bietet OpenSSL eine Wiki-Seite hier: FIPS Library and Android. Es beschreibt, wie CC und FIPSCC_LD so fipsld und incore "funktioniert einfach", wenn make in Ihrem Projekt.

Es gibt keine äquivalente iOS-Seite. Aber Sie finden die Anleitung in der OpenSSL FIPS User Guide 2.0, Anhang E.

+0

Great stuff .. irgendeinen Einblick, warum Google nicht die fips-Version von libcrypto (oder ihre eigenen) im Android Open Source-Projekt verwenden? – Blaze

+1

Blaze - nein, keine Ahnung. Sie könnten eine Validierung für ihre Referenzhardware (früher das Samsung Nexus 4, derzeit das LG Nexus 5) sponsern, aber jede Plattform würde ihre eigene Validierung benötigen. Das wäre Sache des OEM. – jww

+0

Warum benötigt jede Plattform ihre eigene Validierung? Wie Sie sagen - "Sobald eine Plattform validiert ist, werden geringfügige Änderungen an der Plattform vom Cryptographic Module Validation Program (CMVP) toleriert." Es ist diese Logik, die die openssl Leute sagen, dass sie gut sind, für jede armv7 android Plattform zu gehen. – Blaze

Verwandte Themen