GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie überprüfe ich die FIPS 140-2-Unterstützung in OpenSSL?

Um zu überprüfen, ob openssl im fips-Modus arbeitet, geben Sie Folgendes ein:

$ openssl md5 somefile

Das obige sollte fehlschlagen, da MD5 kein von fips genehmigter Hash-Standard ist.

$ openssl sha1 somefile

Das Obige würde funktionieren, da SHA1 der von fips genehmigte Hash-Standard ist.

Beispiel :

# openssl md5 message.txt
Error setting digest md5
140062425388872:error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips:digest.c:251:

# openssl sha1 message.txt 
SHA1(messagetext.txt)= 9f5080758dbf71537cc44a4d8cb67564f2ad938a

Referenz


OpenSSL selbst ist nicht FIPS 140-2-validiert und wird es laut seinen Betreuern niemals sein. Es verfügt jedoch über ein FIPS 140-2-validiertes Modul namens FIPS Object Module, das libcrypto teilweise ersetzt Wird in Vanilla OpenSSL verwendet. Weitere Informationen, einschließlich des Benutzerhandbuchs, finden Sie hier. Kurz gesagt:

OpenSSL selbst ist nicht validiert und wird es auch nie sein. Stattdessen wurde eine speziell sorgfältig definierte Softwarekomponente namens OpenSSL FIPS ObjectModule erstellt. Dieses Modul wurde für die Kompatibilität mit OpenSSL entwickelt, sodass Produkte, die die OpenSSL-API verwenden, mit minimalem Aufwand auf validierte Kryptografie umgestellt werden können.


Wie überprüfe ich, ob OpenSSL FIPS-validierte Kryptografie bereitstellt oder nicht?

Es hängt davon ab, wie und wann Sie überprüfen möchten. Es hängt auch von der Anwendung ab.

FIPS könnte verfügbar sein, aber nicht verwendet werden. Eine Anwendung muss also die validierte Kryptografie über FIPS_mode_set aktivieren , und der Aufruf muss gelingen.

Wenn Sie überprüfen möchten, ob die FIPS-fähige Bibliothek, z. B. OpenSSL 1.0.1e, für die Verwendung des FIPS-Objektmoduls konfiguriert wurde, haben Sie folgende Möglichkeiten:

$ cat /usr/local/ssl/include/openssl/opensslconf.h  | grep -A 2 -i fips
#ifndef OPENSSL_FIPS
# define OPENSSL_FIPS
#endif

OPENSSL_FIPS teilt Ihnen mit, dass die FIPS-fähige Bibliothek für die Verwendung des FIPS-Objektmoduls konfiguriert wurde. Die FIPS-validierte Kryptografie ist also verfügbar.

OPENSSL_FIPS bedeutet jedoch nicht, dass die Anwendung die FIPS-validierte Kryptografie verwendet. Die Anwendung muss FIPS_mode_set aufrufen , und die Funktion muss Erfolg zurückgeben.

Zur Laufzeit können Sie die Zeichenfolge drucken, die dem Folgenden zugeordnet ist (sie stammt aus dem Code, den ich speziell dafür verwende):

ostringstream oss;
oss << OPENSSL_VERSION_TEXT;
LogVersion(oss.str().c_str());

Der Code erzeugt einen Protokolleintrag ähnlich dem folgenden:

Version: OpenSSL 1.0.1f-fips 6 Jan 2014

Mit ein paar Tricks können Sie das Modul auditieren. Im Folgenden wird beispielsweise auf einige Symbole getestet, die müssen vorhanden sein, wenn die ausführbare Datei wirklich FIPS ist.

In diesem Fall teste ich das OpenSSL FIPS Capable Shared Object. Wenn die Anwendung auf libcrypto.a verweist , dann können Sie das Programm statt des gemeinsam genutzten OpenSSL-Objekts prüfen.

$ nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_*
00000000000c7f60 T ERR_load_FIPS_strings
00000000000c2250 T FIPS_add_error_data
00000000000c3900 T FIPS_add_lock
0000000000082820 T FIPS_bn_bin2bn
0000000000082980 T FIPS_bn_bn2bin
0000000000082760 T FIPS_bn_clear
0000000000082350 T FIPS_bn_clear_free
00000000000823d0 T FIPS_bn_free
0000000000087c90 T FIPS_bn_generate_prime_ex
0000000000082790 T FIPS_bn_get_word
0000000000082d20 T FIPS_bn_is_bit_set
0000000000087c80 T FIPS_bn_is_prime_ex
0000000000087750 T FIPS_bn_is_prime_fasttest_ex
...

Sie haben auch die Symbole von fips_premain.c :

$ nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_text_*
00000000000c4520 T FIPS_text_end
000000000007b340 T FIPS_text_start
$ nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_rodata*
00000000001e1e20 R FIPS_rodata_end
00000000001d8ce0 R FIPS_rodata_start
$ nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_signature*
00000000004696c0 B FIPS_signature
$ nm /usr/local/ssl/lib/libcrypto.so | grep -i fips_incore*
000000000007b5a0 T FIPS_incore_fingerprint

Das ist jetzt wirklich hinterhältig. Sie können überprüfen, ob das Modul die Selbsttests enthält. Beispiel:fips_drbg_selftest.h enthält die folgenden Bytes in seinen Selbsttests:

0x2e,0xbf,0x98,0xf9,0x85,0x27,0x8b,0xff,0x36,0xb9,0x40,0x0b,
0xc0,0xa1,0xa0,0x13,0x20,0x06,0xcc,0xe6,0x2a,0x03,0x77,0x7d,
0xee,0xde,0xcc,0x34,0xe3,0xcd,0x77,0xea,0xd0,0x3e,0xbe,0xdd,
0xf6,0x15,0xfb,0xa7,0xd7,0x8e,0xd0,0x2e,0x2f,0x82,0x4c,0xc7,
0x87,0xb1,0x6f,0xc5,0xf8,0x5c,0x78,0xde,0x77,0x9b,0x15,0x9a,
0xb9,0x3c,0x38

Und Sie können überprüfen, ob der Entwickler incore ausgeführt hat oder macho_incore auf ihrer ausführbaren Datei, um den FIPS-Fingerabdruck einzubetten, indem die 20 Bytes des Symbols FIPS_signature ausgegeben werden . Wenn es 20 Byte Nullen sind (der Standard von fips_premain.c ), dann wurde der Fingerabdruck nicht eingebettet und FIPS_mode_set wird versagen. Daher ist es in diesem Fall nicht möglich, FIPS-validierte Kryptografie zu verwenden.

Aktualisieren :Ich habe eine Präsentation zu diesem Thema in das OpenSSL-Wiki hochgeladen. Es heißt Building Applications using OpenSSL Validated Cryptography:Notes from the Field for Developers and Auditors. Sie sollten sich das Material etwa ab Folie 18 ansehen.

Ich habe das Slide-Deck für OWASP gebaut, aber es gab kein Interesse daran, es zu bekommen. Ich weiß, dass Stack Overflow Links wie den im OpenSSL-Wiki missbilligt, aber ich weiß nicht, wie ich hier eine Präsentation mit mehr als 35 Folien bereitstellen soll.


Kernel-Option "fips=1 " sollte aktiviert sein. Mehr dazu hier.

Um zu sehen, ob das geladen ist:

sudo sysctl -a|grep fips

Linux
  1. So überprüfen Sie die Redhat-Version

  2. So überprüfen Sie die Zeitzone in Linux

  3. Wie überprüfe ich mit OpenSSL, ob das SSL-Zertifikat SHA1 oder SHA2 ist?

  4. So überprüfen Sie den Linux-Anmeldeverlauf

  5. So überprüfen Sie die CentOS-Version

So überprüfen Sie die Kali Linux-Version

So überprüfen Sie die Linux-Version

So überprüfen Sie die Python-Version

So überprüfen Sie die Java-Version

Wie überprüfe ich die OpenGL-Version?

So überprüfen Sie den Auslagerungsbereich unter Linux