Understanding FIPS Self-Tests
The cryptographic module enforces security rules to ensure that a device running the Juniper Networks Junos Operating System (Junos OS) in FIPS mode of operation meets the security requirements of FIPS 140-3 Level 2. To validate the output of cryptographic algorithms approved for FIPS and test the integrity of some system modules, the device performs the following series of known answer test (KAT) self-tests:
-
md_kats—KAT for libmd and libc -
quicksec_7_0_kats—KAT for Quicksec_7_0 Toolkit cryptographic implementation -
openssl_kats—KAT for OpenSSL cryptographic implementation openssl-102_kats—KAT for OpenSSL v1.0.2 cryptographic implementation-
kernel_kats—KAT for kernel cryptographic routines -
srxpfe_kats—KAT for SRX packet forwarding engine
The KAT self-tests are performed automatically at startup and reboot when FIPS mode of operation is enabled on the device. Conditional self-tests are also performed automatically to verify digitally signed software packages, generated random numbers, RSA and DSA key pairs, and manually entered keys.
If the KATs are completed successfully, the system log (syslog) file is updated to display the tests that were executed.
If the device fails a KAT, the device writes the details to a system log file, enters FIPS error state (panic), and reboots.
The file show /var/log/messages command displays the system log.
Example: Configuring FIPS Self-Tests
This example shows how to configure FIPS self-tests to run periodically.
Hardware and Software Requirements
You must have administrative privileges to configure FIPS self-tests.
The device must be running the evaluated version of Junos OS in FIPS mode software.
Overview
The FIPS self-test consists of the following suites of known answer tests (KATs):
-
md_kats—KAT for libmd and libc -
quicksec_7_0_kats—KAT for Quicksec_7_0 Toolkit cryptographic implementation -
openssl_kats—KAT for OpenSSL cryptographic implementation -
kernel_kats—KAT for kernel cryptographic routines -
srxpfe_kats—KAT for SRX packet forwarding engine
In this example, the FIPS self-test is executed at 9:00 AM in New York City, USA, every Wednesday.
Instead of weekly tests, you can configure monthly tests by including the
month and day-of-month statements.
When a KAT self-test fails, a log message is written to the system log messages file with details of the test failure. Then the system panics and reboots.
Configuration
CLI Quick Configuration
To quickly configure this example, copy the
following commands into a text file, remove any line breaks, and then
paste the commands into the CLI at the [edit] hierarchy
level.
set system fips self-test periodic start-time 09:00 set system fips self-test periodic day-of-week 3
Procedure
Step-by-Step Procedure
To configure the FIPS self-test:
Configure the FIPS self-test to execute at 9:00 AM every Wednesday.
[edit system fips self-test] user@host# set periodic start-time 09:00 user@host# set periodic day-of-week 3
If you are done configuring the device, commit the configuration.
[edit system fips self-test] user@host# commit
Results
From configuration mode, confirm your configuration
by issuing the show system command. If the output does
not display the intended configuration, repeat the instructions in
this example to correct the configuration.
user@host# show system
fips {
self-test {
periodic {
start-time "09:00";
day-of-week 3;
}
}
}
Performing Power-On Self-Tests on the Device
Each time the cryptographic module is powered on, the module tests that the cryptographic algorithms still operate correctly and that sensitive data has not been damaged. Power-on self-tests are performed on demand by power cycling the module.
On powering on or resetting the device, the module performs the following self-tests. All KATs must be completed successfully prior to any other use of cryptography by the module. If one of the KATs fail, the module enters the Critical Failure error state.
The module displays the following status output for SRX1500, SRX4100, SRX4200, and SRX4600 devices while running the power-on self-tests:
Initializing Verified Exec: random: randomdev_wait_until_seeded unblock wait uhub1: 2 ports with 2 removable, self powered ugen1.2: <vendor 0x8087 product 0x0020> at usbus1 uhub2 on uhub1 uhub2: <vendor 0x8087 product 0x0020, class 9/0, rev 2.00/0.00, addr 2> on usbus1 uhub2: 6 ports with 6 removable, self powered random: Entropy start-up health tests performed on 1024 samples passed. random: unblocking device. random: HMAC-DRBG: instantiated with 1024 SW events, 0 HW Shannons FIPS veriexec ECDSA Verify Known Answer Test: Passed Verified os-kernel-prd-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Enforcing Verified Exec: Verified os-libs-12-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-libs-12-x86-64-20230120.775b907_builder_stable_12_222 Verified os-runtime-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-runtime-x86-64-20230120.775b907_builder_stable_12_222 ** /dev/gpt/config FILE SYSTEM CLEAN; SKIPPING CHECKS clean, 406109 free (5 frags, 50763 blocks, 0.0% fragmentation) ** /dev/gpt/var FILE SYSTEM CLEAN; SKIPPING CHECKS clean, 2919425 free (233 frags, 364899 blocks, 0.0% fragmentation) @ 1677848176 [2023-03-03 12:56:16 UTC] mount start @ 1677848176 [2023-03-03 12:56:16 UTC] junos 22.2R2-S2.3 Verified os-zoneinfo-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-zoneinfo-20230120.775b907_builder_stable_12_222 Verified os-libs-compat32-12-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-libs-compat32-12-x86-64-20230120.775b907_builder_stable_12_222 Verified os-compat32-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-compat32-x86-64-20230120.775b907_builder_stable_12_222 Verified py-extensions-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting py-extensions-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified py-base-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting py-base-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified os-vmguest-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-vmguest-x86-64-20230120.775b907_builder_stable_12_222 Verified os-crypto-x86-64-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting os-crypto-x86-64-20230120.775b907_builder_stable_12_222 Verified junos-net-prd-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-net-prd-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-libs-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-libs-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-libs-compat32-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-libs-compat32-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-runtime-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-runtime-x86-32-20230225.062510_builder_junos_222_r2_s2 Starting watchdog daemon ... Verified jail-runtime-x86-32-20230120 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Verified na-telemetry-x86-32-22.2R2-S2 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting na-telemetry-x86-32-22.2R2-S2.3 Verified junos-libs-compat32-srx-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-libs-compat32-srx-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-runtime-srx-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-runtime-srx-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-platform-srx-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-platform-srx-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-platform-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-platform-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-runtime-srxtvp-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-runtime-srxtvp-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-routing-mpls-oam-basic-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-routing-mpls-oam-basic-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-routing-lsys-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-routing-lsys-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-routing-controller-external-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-routing-controller-external-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-routing-compat32-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-routing-compat32-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-routing-aggregated-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-routing-aggregated-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-redis-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-redis-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-probe-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-probe-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-pppoe-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-pppoe-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-openconfig-x86-32-22.2R2-S2 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-openconfig-x86-32-22.2R2-S2.3 Verified junos-modules-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-modules-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-modules-srxtvp-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-modules-srxtvp-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-libs-srxtvp-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-libs-srxtvp-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-libs-srx-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-libs-srx-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-l2-rsi-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-l2-rsi-20230225.062510_builder_junos_222_r2_s2 Verified junos-dp-crypto-support-srx-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-dp-crypto-support-srx-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified junos-daemons-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-daemons-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-daemons-srx-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-daemons-srx-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified junos-appsecure-tvp-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting junos-appsecure-tvp-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified jsd-x86-32-22.2R2-S2 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jsd-x86-32-22.2R2-S2.3-jet-1 Verified jphone-home-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jphone-home-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified jmrt-base-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jmrt-base-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified jinsight-x86-32-22.2R2-S2 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jinsight-x86-32-22.2R2-S2.3 Verified jdocs-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jdocs-x86-32-20230225.062510_builder_junos_222_r2_s2 Verified fips-optest-x86-32-22.3I-20230219.0 signed by PackageDevelopmentECP256_2023 method ECDSA256+SHA256 Mounting fips-optest-x86-32-22.3I-20230219.0.0428 Verified fips-mode-x86-64-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting fips-mode-x86-64-20230225.062510_builder_junos_222_r2_s2 Verified dsa-x86-64-22.2R2-S2 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting dsa-x86-64-22.2R2-S2.3 @ 1677848215 [2023-03-03 12:56:55 UTC] mount done grep: /var/etc/jlaunchd.inc: No such file or directory grep: /var/etc/jlaunchd.inc: No such file or directory grep: /var/etc/jlaunchd.inc: No such file or directory grep: /var/etc/jlaunchd.inc: No such file or directory Removing /etc/malloc.conf Detected data disk Mounting shared partition /var/host .. Detected swap drive Enable swap *** Creating PVIDb..\n 1344+0 records in 1344+0 records out 698880 bytes transferred in 0.012915 secs (54113193 bytes/sec) Copied libschema-filter-dd.tlv to /opt/lib/dd/filter\n Executing the Junos host files signature script Verified manifest signed by PackageDevelopmentECP256_2023 method ECDSA256+SHA256 mkdir: /mfs/var/run: File exists *** Mounting Host disks ... Checking platform support for: srxtvp @ 1677848223 [2023-03-03 12:57:03 UTC] mountlate start Verified jweb-srxtvp-x86-32-20230225 signed by PackageProductionECP256_2023 method ECDSA256+SHA256 Mounting jweb-srxtvp-x86-32-20230225.062510_builder_junos_222_r2_s2 Setup /packages/mnt/jweb-srxtvp-b1157d53/jail/var/cache dir only for srxtvp mount_nullfs: /web-api: No such file or directory @ 1677848230 [2023-03-03 12:57:10 UTC] mountlate done kern.module_path: /packages/sets/active/boot/os-vmguest/;/packages/sets/active/boot/junos-modules/;/packages/sets/active/boot/netstack/;/packages/sets/active/boot/os-kernel/;/packages/sets/active/boot/os-crypto/;/packages/sets/active/boot/junos-net-platf Loading JUNOS chassis module chassis_init_hw_chassis_startup_time: chassis startup time 0.000000, shared: 0x7ffffffff300, base: 0x7ffffffff000, offset: 0x300 IPsec: Initialized Security Association Processing. Loading the SLB driver Loading the Protobuf-C module hgcommdev0: <HGCOMMDEV For Host VM communication> mem 0xfebf3000-0xfebf3fff at device 22.0 on pci0 hgcommdev0: hgcommdev: registers at 0xfffff800febf3000 pci-hgcomdev module loaded bcmsdk_5_9_x kld Loading BCMSDK module..... Junosprocfs mounted on /junosproc. VirtIO PCI 9P Transport adapter is not present VirtIO PCI 9P Transport adapter is not present @ 1677848233 [2023-03-03 12:57:13 UTC] mgd start Creating initial configuration: ... mgd: Running FIPS Self-tests mgd: Testing kernel KATS: mgd: NIST 800-90 HMAC DRBG Known Answer Test: Passed mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: SHA-2-384 Known Answer Test: Passed mgd: SHA-2-512 Known Answer Test: Passed mgd: AES128-CMAC Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: Testing MACSec KATS: mgd: AES128-CMAC Known Answer Test: Passed mgd: AES256-CMAC Known Answer Test: Passed mgd: AES-ECB Known Answer Test: Passed mgd: AES-KEYWRAP Known Answer Test: Passed mgd: KBKDF Known Answer Test: Passed mgd: Testing libmd KATS: mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: SHA-2-512 Known Answer Test: Passed mgd: Testing OpenSSL v1.0.2 KATS: mgd: FIPS ECDSA Known Answer Test: Passed mgd: FIPS ECDH Known Answer Test: Passed mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-224 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: HMAC-SHA2-384 Known Answer Test: Passed mgd: HMAC-SHA2-512 Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: AES-GCM Known Answer Test: Passed mgd: RSA-ENC Known Answer Test: Passed mgd: RSA-SIGN Known Answer Test: Passed mgd: KDF-IKE-V1 Known Answer Test: Passed mgd: KDF-SSH-SHA256 Known Answer Test: Passed mgd: KAS-ECC-EPHEM-UNIFIED-NOKC Known Answer Test: Passed mgd: KAS-FFC-EPHEM-NOKC Known Answer Test: Passed mgd: Testing OpenSSL KATS: mgd: FIPS ECDSA Known Answer Test: Passed mgd: FIPS ECDH Known Answer Test: Passed mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-224 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: HMAC-SHA2-384 Known Answer Test: Passed mgd: HMAC-SHA2-512 Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: AES-GCM Known Answer Test: Passed mgd: RSA-ENC Known Answer Test: Passed mgd: RSA-SIGN Known Answer Test: Passed mgd: KDF-IKE-V1 Known Answer Test: Passed mgd: KDF-SSH-SHA256 Known Answer Test: Passed mgd: KAS-ECC-EPHEM-UNIFIED-NOKC Known Answer Test: Passed mgd: KAS-FFC-EPHEM-NOKC Known Answer Test: Passed mgd: Testing QuickSec 7.0 KATS: mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-224 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: HMAC-SHA2-384 Known Answer Test: Passed mgd: HMAC-SHA2-512 Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: AES-GCM Known Answer Test: Passed mgd: SSH-RSA-ENC Known Answer Test: Passed mgd: SSH-RSA-SIGN Known Answer Test: Passed mgd: SSH-ECDSA-SIGN Known Answer Test: Passed mgd: KDF-IKE-V1 Known Answer Test: Passed mgd: KDF-IKE-V2 Known Answer Test: Passed mgd: Testing QuickSec KATS: mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-224 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: HMAC-SHA2-384 Known Answer Test: Passed mgd: HMAC-SHA2-512 Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: AES-GCM Known Answer Test: Passed mgd: SSH-RSA-ENC Known Answer Test: Passed mgd: SSH-RSA-SIGN Known Answer Test: Passed mgd: KDF-IKE-V1 Known Answer Test: Passed mgd: KDF-IKE-V2 Known Answer Test: Passed mgd: Testing SSH IPsec KATS: mgd: NIST 800-90 HMAC DRBG Known Answer Test: Passed mgd: DES3-CBC Known Answer Test: Passed mgd: HMAC-SHA1 Known Answer Test: Passed mgd: HMAC-SHA2-256 Known Answer Test: Passed mgd: AES-CBC Known Answer Test: Passed mgd: SSH-RSA-ENC Known Answer Test: Passed mgd: SSH-RSA-SIGN Known Answer Test: Passed mgd: KDF-IKE-V1 Known Answer Test: Passed mgd: Testing file integrity: mgd: File integrity Known Answer Test: Passed mgd: Testing crypto integrity: mgd: Crypto integrity Known Answer Test: Passed mgd: Expect an exec Authentication error... MAC/veriexec: no fingerprint (file=/sbin/kats/cannot-exec fsid=215 fileid=49356 gen=1 uid=0 pid=8346 ppid=8313 gppid=8310)mgd: /sbin/kats/run-tests: /sbin/kats/cannot-exec: Authentication error mgd: FIPS Self-tests Passed mgd: commit complete
The module implements cryptographic libraries and algorithms that are not utilized in the approved mode of operation.