Uploaded image for project: 'Satellite'
  1. Satellite
  2. SAT-38970

[SPIKE] Investigate what needs to be done for PQC KEX in Sat<->Host TLS

XMLWordPrintable

    • Icon: Task Task
    • Resolution: Unresolved
    • Icon: Undefined Undefined
    • None
    • None
    • None
    • False
    • None

      For our post-quantum cryptography effort, we need component owners to test whether their components need some changes for PQC key-exchange or they work out of the box.

      The goal of this testing is to answer this question:
      If I enable PQC through crypto-policies, on both server and client, will then ML-KEM key exchange (or hybrid thereof) actually be used in all the TLS connections that happen as part of this component?

      For setup-type components, the question changes to: Do all the workflows in this component setup the environment in which TLS connections will use ML-KEM key exchange (or hybrid thereof) if PQC is enabled through crypto-policies (even if it's enabled after the workflow is finished, host registered etc.)?{}

      Test on Satellite 6.18.

      This is how you enable PQC on the clean Satellite server on RHEL 9.6:

      # cat <<EOF >>/etc/yum.repos.d/rhel97.repo
      [rhel97-baseos]
      name = RHEL 9.7 BaseOS
      baseurl = https://<DOWNLOAD>/rhel-9/nightly/RHEL-9/latest-RHEL-9.7/compose/BaseOS/x86_64/os/
      metadata_expire = 1
      enabled = 1
      gpgcheck = 0
      
      [rhel97-appstream]
      name = RHEL 9.7 AppStream
      baseurl = https://<DOWNLOAD>/rhel-9/nightly/RHEL-9/latest-RHEL-9.7/compose/AppStream/x86_64/os/
      metadata_expire = 1
      enabled = 1
      gpgcheck = 0
      EOF
      #
      # satellite-maintain packages unlock
      # dnf update openssl crypto-policies curl
      # update-crypto-policies --set DEFAULT:PQ
      # reboot 

      On RHEL 10 clients, you can enable PQC using these steps: https://www.redhat.com/en/blog/post-quantum-cryptography-red-hat-enterprise-linux-10

      After enabling PQC, you can do whatever you're testing, capturing the communication so you can verify it used PQC KEX, which is MLKEM a.k.a. CRYSTALS-Kyber used in a hybrid schema X25519MLKEM768 a.k.a. group 4588. When you see this has been used, it's good. (When you disable everyting non-mlkem, even better; that would require a custom crypto-policy and it's said by the authors of crypto-policies that they themselves refuse to do it because it breaks things.)

      So, in the simplest case, you can just

      openssl s_client -connect <FQDN>:443 | grep -i mlkem 

      where you can conclude that the TLS connection has been initiated with MLKEM if you see:

      Negotiated TLS1.3 group: X25519MLKEM768

      Usually, things are harder though, simulating with openssl won't cut it. Then you can

      # dnf install wireshark-cli
      # tshark -f "tcp port 443" -i any -w /tmp/test.pcap 

      (now do the thing you are testing)
      Then stop capturing, copy that .pcap file to your local machine and open it in Wireshark. In the TLS packet with handshake, in the key share entry, you should see that X25519MLKEM768 (group 4588) has been used.

      What is "the thing"? Whatever you're testing. When I test Global Registration, I run registration. If I tested Hammer, I'd run some Hammer command.

      We are interested in all the possible TLS connections in a given component between the host and Satellite.
      We are not interested in any other connections than TLS.
      We are not interested in TLS connections between Satellite services or cloud.

      Expected outcome is one of:

      • PQC KEX supported out-of-the-box (when PQC KEX is enabled on both sides, it will simply work without any further actions){}
      • PQC KEX supported with minor changes: (config or template changes needed, specify what needs to change)
      • PQC KEX not supported (code changes needed)

      When you are done, please CLOSE the subtask and put the results in its description, together with analysis and description of what you did.

      If this is not applicable to your component (because there is no TLS communication between host and Satellite in that component), then PQC is considered suppported in that component (because supporting it is a no-op).

      (If you want to go above and beyond, you can also test PQC KEX in TLS connections to external services (CDN, RH Cloud), SSH connections, and TLS connections within the Satellite itself. Even more, you can test whether the component works with ML-DSA certificates. For this, I'm not writing a guide right now (because there are too many problems expected) so you'll be on your own. But it can save you time in the future because this testing will also be needed in the next stages.)

      For example of how you can do things, see the Remote Execution subtask. The method is up to you, you are the expert at your own component! For crypto-related issues, ask the PQC effort owner - lhellebr.

          1.
          PQC KEX TLS: Activation Keys Sub-task New Undefined Unassigned
          2.
          PQC KEX TLS: Fact Sub-task New Undefined Unassigned
          3.
          PQC KEX TLS: Host Group Sub-task New Undefined Unassigned
          4.
          PQC KEX TLS: Insights - Advisor Sub-task New Undefined Unassigned
          5.
          PQC KEX TLS: RH Cloud Sub-task New Undefined Unassigned
          6.
          PQC KEX TLS: Subscription Management Sub-task New Undefined Unassigned
          7.
          PQC KEX TLS: Candlepin Sub-task New Undefined Unassigned
          8.
          PQC KEX TLS: Host Collections Sub-task New Undefined Unassigned
          9.
          PQC KEX TLS: Hosts Sub-task New Undefined Unassigned
          10.
          PQC KEX TLS: Insights - Vulnerability Sub-task New Undefined Unassigned
          11.
          PQC KEX TLS: Registration Sub-task New Undefined Unassigned
          12.
          PQC KEX TLS: Virt-who Configure Plugin Sub-task New Undefined Unassigned
          13.
          PQC KEX TLS: Alternate Content Sources Sub-task New Undefined Unassigned
          14.
          PQC KEX TLS: Container Image Management Sub-task New Undefined Unassigned
          15.
          PQC KEX TLS: Content Views Sub-task New Undefined Unassigned
          16.
          PQC KEX TLS: Image Mode Sub-task New Undefined Unassigned
          17.
          PQC KEX TLS: Lifecycle Environments Sub-task New Undefined Unassigned
          18.
          PQC KEX TLS: Repositories Sub-task New Undefined Unassigned
          19.
          PQC KEX TLS: Capsule - Content Sub-task New Undefined Unassigned
          20.
          PQC KEX TLS: Content Credentials Sub-task New Undefined Unassigned
          21.
          PQC KEX TLS: Errata Management Sub-task New Undefined Unassigned
          22.
          PQC KEX TLS: Inter Satellite Sync Sub-task New Undefined Unassigned
          23.
          PQC KEX TLS: Pulp Sub-task New Undefined Unassigned
          24.
          PQC KEX TLS: Sync Plans Sub-task New Undefined Unassigned
          25.
          PQC KEX TLS: API Sub-task New Undefined Unassigned
          26.
          PQC KEX TLS: Ansible - Remote Execution Sub-task New Undefined Unassigned
          27.
          PQC KEX TLS: Authentication Sub-task New Undefined Unassigned
          28.
          PQC KEX TLS: Dashboard Sub-task New Undefined Unassigned
          29.
          PQC KEX TLS: HTTP Proxy Sub-task New Undefined Unassigned
          30.
          PQC KEX TLS: Leapp integration Sub-task New Undefined Unassigned
          31.
          PQC KEX TLS: Logging Sub-task New Undefined Unassigned
          32.
          PQC KEX TLS: Notifications Sub-task New Undefined Unassigned
          33.
          PQC KEX TLS: Parameters Sub-task New Undefined Unassigned
          34.
          PQC KEX TLS: SCAP Plugin Sub-task New Undefined Unassigned
          35.
          PQC KEX TLS: Settings Sub-task New Undefined Unassigned
          36.
          PQC KEX TLS: Templates Plugin Sub-task New Undefined Unassigned
          37.
          PQC KEX TLS: katello-tracer Sub-task New Undefined Unassigned
          38.
          PQC KEX TLS: Ansible - Configuration Management Sub-task New Undefined Unassigned
          39.
          PQC KEX TLS: Audit Log Sub-task New Undefined Unassigned
          40.
          PQC KEX TLS: Branding Sub-task New Undefined Unassigned
          41.
          PQC KEX TLS: Foreman Proxy Sub-task New Undefined Unassigned
          42.
          PQC KEX TLS: Hooks and Webhooks Sub-task New Undefined Unassigned
          43.
          PQC KEX TLS: Localization and Internationalization Sub-task New Undefined Unassigned
          44.
          PQC KEX TLS: Navigation Sub-task New Undefined Unassigned
          45.
          PQC KEX TLS: Organizations and Locations Sub-task New Undefined Unassigned
          46.
          PQC KEX TLS: Puppet Sub-task New Undefined Unassigned
          47.
          PQC KEX TLS: Reporting Sub-task New Undefined Unassigned
          48.
          PQC KEX TLS: Search Sub-task New Undefined Unassigned
          49.
          PQC KEX TLS: Tasks Plugin Sub-task New Undefined Unassigned
          50.
          PQC KEX TLS: Users and Roles Sub-task New Undefined Unassigned
          51.
          PQC KEX TLS: Ansible Collection Sub-task New Undefined Unassigned
          52.
          PQC KEX TLS: Bootdisk Plugin Sub-task New Undefined Unassigned
          53.
          PQC KEX TLS: Compute Resources - Azure Sub-task New Undefined Unassigned
          54.
          PQC KEX TLS: Compute Resources - EC2 Sub-task New Undefined Unassigned
          55.
          PQC KEX TLS: Compute Resources - OpenStack Sub-task New Undefined Unassigned
          56.
          PQC KEX TLS: Compute Resources - VMWare Sub-task New Undefined Unassigned
          57.
          PQC KEX TLS: Conversions appliance Sub-task New Undefined Unassigned
          58.
          PQC KEX TLS: Discovery Plugin Sub-task New Undefined Unassigned
          59.
          PQC KEX TLS: Infoblox integration Sub-task New Undefined Unassigned
          60.
          PQC KEX TLS: Networking Sub-task New Undefined Unassigned
          61.
          PQC KEX TLS: Provisioning Sub-task New Undefined Unassigned
          62.
          PQC KEX TLS: Satellite Clone Sub-task New Undefined Unassigned
          63.
          PQC KEX TLS: Upgrades Sub-task New Undefined Unassigned
          64.
          PQC KEX TLS: Backup and Restore Sub-task New Undefined Unassigned
          65.
          PQC KEX TLS: Compute Resources Sub-task New Undefined Unassigned
          66.
          PQC KEX TLS: Compute Resources - CNV Sub-task New Undefined Unassigned
          67.
          PQC KEX TLS: Compute Resources - GCE Sub-task New Undefined Unassigned
          68.
          PQC KEX TLS: Compute Resources - RHEV Sub-task New Undefined Unassigned
          69.
          PQC KEX TLS: Compute Resources - libvirt Sub-task New Undefined Unassigned
          70.
          PQC KEX TLS: Discovery Image Sub-task New Undefined Unassigned
          71.
          PQC KEX TLS: Hammer Sub-task New Undefined Unassigned
          72.
          PQC KEX TLS: Installation Sub-task New Undefined Unassigned
          73.
          PQC KEX TLS: Power and BMC Sub-task New Undefined Unassigned
          74.
          PQC KEX TLS: Provisioning Templates Sub-task New Undefined Unassigned
          75.
          PQC KEX TLS: Satellite Maintain Sub-task New Undefined Unassigned

              lhellebr@redhat.com Lukas Hellebrandt
              lhellebr@redhat.com Lukas Hellebrandt
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: