diff --git a/xml/book_security.xml b/xml/book_security.xml index a67cce4351..2fa18325ac 100644 --- a/xml/book_security.xml +++ b/xml/book_security.xml @@ -60,6 +60,7 @@ + diff --git a/xml/security_cryptopolicy.xml b/xml/security_cryptopolicy.xml new file mode 100644 index 0000000000..08934ce555 --- /dev/null +++ b/xml/security_cryptopolicy.xml @@ -0,0 +1,328 @@ + + + %entities; +]> + + + Using system-wide cryptographic policies + + + + TODO + + + + + yes + + + + The <command>crypto-policies</command> concept + + + The crypto-policies RPM package provides predefined + configuration files with cryptographic policies for cryptographic + back-ends, such as SSL/TLS libraries. This package allows to set the + cryptographic security level for all applications that use a + cryptographic back-end supported by the policies. + + + + Crypto-policies apply to the configuration of the core cryptographic + subsystems. They cover the supported secure communications protocols on + the base operating system, such as TLS, IKE, IPSec, DNSSec and Kerberos + protocols. Crypto-policies allow to handle the deprecation of algorithms + or protocols system-wide and in a transparent manner. + + + + Predefined cryptographic policies + + + The crypto-policies package comes with the following + predefined policies that can be applied system-wide: + + + + + BSI + + + A security policy based on recommendations by the German government + agency BSI (Bundesamt fuer Sicherheit in der Informationstechnik, + translated as agency for security in software + technology). The policy is based on the technical + recommendation ruleset TR 02102. The BSI TR + 02102 standard is updated in regular intervals. This policy does + not allow the use of SHA-1 in signature algorithms (except DNSSEC + and RPM). The policy also provides some (not complete) preparation + for post-quantum encryption support in form of 256-bit symmetric + encryption requirement. The RSA parameters are accepted if larger + than 2047 bits, and Diffie-Hellman parameters are accepted if + larger than 3071 bits. This policy provides at least 128-bit + security, excepting the transition of RSA. + + + + + DEFAULT + + + A reasonable default policy for today's standards. It allows the + TLS 1.2, and TLS 1.3 protocols, as well as IKEv2 and SSH2. The + Diffie-Hellman parameters are accepted if they are at least 2048 + bits long. The level provides at least 112-bit security with the + exception of allowing SHA-1 signatures in DNSSec where they are + still prevalent. + + + + + FIPS + + + A level that conforms to the FIPS 140-2 requirements. This policy + is used internally by the fips-mode-setup tool + which can switch the system into FIPS 140-2 compliance mode. The + level provides at least 112-bit security. + + + + + FUTURE + + + A conservative security level that is believed to withstand any + near-term future attacks. This level does not allow the use of + SHA-1 in signature algorithms. The level also provides some (not + complete) preparation for post-quantum encryption support in form + of 256-bit symmetric encryption requirement. The RSA and + Diffie-Hellman parameters are accepted if larger than 3071 bits. + The level provides at least 128-bit security. + + + + + LEGACY + + + This policy ensures maximum compatibility with legacy systems. It + is less secure and it includes support for TLS 1.0, TLS 1.1, and + SSH2 protocols or later. The algorithms DSA, 3DES, and RC4 are + allowed, while RSA and Diffie-Hellman parameters are accepted if + larger than 1023 bits. The level provides at least 64-bit security. + + + + + + + Policies can change over time together with the security of the + cryptographic components. For the latest details on the individual + policies, therefore see the man page of + crypto-policies. All predefined policies are located + in + /usr/share/crypto-policies/policies/NAME.pol + and are read-only. + + + + Switching to a different crypto-policy + + + Use the update-crypto-policies command to view and set + the policy which is applied system-wide to the cryptographic back-ends. + The policy which has been set with this command is used by these + back-ends by default unless the application user configures them + otherwise. + + + + + + To check the crypto-policy that is currently in use: + +&prompt.root;update-crypto-policies --show + + + + To switch to a different policy level, use the + option: + + taroth 2023-07-04: do we need a word of caution here for LEGACY and FIPS? + and can we tell that switching to 'LEGACY' enables compatibility with a specific + older SLE version, like SLE 12 SP5 or so? + + + LEGACY crypto-policy is less secure + + Switching to a LEGACY crypto-policy makes your system and + applications less secure. + + + + + + After switching to a different policy reboot the machine to apply the + changes to the applications: + +&prompt.root;reboot + + + + Enabling FIPS mode via script + + For the FIPS crypto-policy, &suse; also provides a script with which you + can comfortably enable the FIPS mode. See + for details. + + + + + Customizing existing crypto-policies + + + You can modify aspects of any predefined policy by removing or adding + algorithms or protocols. This way, you create a subpolicy (or policy + modifier module), stored in text files that include the modifications. + After creation, one or multiple subpolicies can be applied on the command + line to one of the predefined policies. For details, see + . + + + + You can find example subpolicies in + /usr/share/crypto-policies/policies/modules. + However, your own subpolicies need to be stored in + /etc/crypto-policies/policies/modules (unless they + are packaged). Name the subpolicy file + MODULE.pmod, where + MODULE is the name of the subpolicy. The file + name needs to be spelled in uppercase letters and without spaces. + + + + Removing support for RSA and PSK key exchanges + + The following example shows you how to create a subpolicy which removes + support for RSA and PSK key exchanges from the + DEFAULT policy. Both key exchanges do not provide + forward secrecy, which means they cannot make sure that session keys + are not compromised in case long-term secrets used in the key exchange + session are compromised. + + + + + In /etc/crypto-policies/policies/modules/ + create a new file, named NO-RSA-PSK.pmod. + +&prompt.root;touch /etc/crypto-policies/policies/modules/NO-RSA-PSK.pmod + + + + Add the following line to the file and save it afterwards: + +key_exchange = -RSA -PSK + + Now you can apply the newly created subpolicy to one of the + predefined policies. + + + + + Assuming the current system-wide policy is + DEFAULT and you want to apply the newly created + subpolicy to DEFAULT: + +&prompt.root;update-crypto-policies --set DEFAULT:NO-RSA-PSK + + + + Double-check if the subpolicy has been added to + DEFAULT: + +&prompt.root;update-crypto-policies --show +DEFAULT:NO-RSA-PSK + + + + Reboot the machine to apply the system-wide policy adjustment to + the applications: + +&prompt.root;reboot + + + + + + Creating a new policy from scratch + + + Instead of customizing an existing crypto-policy with a subpolicy you can + also decide to write a new policy from scratch. You can use any of the + predefined policies in + /usr/share/crypto-policies/policies/ as a starting + point. However, your own policy file needs to be stored in + /etc/crypto-policies/policies/. Name your file + MY_POLICY.pol, where + MY_POLICY is the name of the policy. Make sure + the policy file is owned by &rootuser; and is not writable by + non-privileged users. + + + + Creating a new policy and applying it + + The following example shows you how to create a new policy based on the + DEFAULT policy. + + + + + Copy the DEFAULT policy to + /etc/crypto-policies/policies/ and rename it: + +&prompt.root;cp /usr/share/crypto-policies/policies/DEFAULT.pol /etc/crypto-policies/policies/MY_POLICY.pol + + + + Edit the policy as desired and save it. + + + + + Switch the system to the new policy: + +&prompt.root;update-crypto-policies --set MY_POLICY + + + + Reboot the machine to apply the new policy to the applications and + running services: + +&prompt.root;reboot + + + + Double-check if the policy is active: + +&prompt.root;update-crypto-policies --show +MY_POLICY + + + + +