Skip to content

Instantly share code, notes, and snippets.

@lwillek
Last active March 1, 2026 10:26
Show Gist options
  • Select an option

  • Save lwillek/eada9500c82d141b6e904af8266aba52 to your computer and use it in GitHub Desktop.

Select an option

Save lwillek/eada9500c82d141b6e904af8266aba52 to your computer and use it in GitHub Desktop.
Default KexAlgorithms / Ciphers for Debian --> post-quantum key agreement

Default KexAlgorithms / Ciphers for Debian

--> post-quantum key agreement

See also https://www.openssh.org/pq.html

OpenSSH has offered post-quantum key agreement (KexAlgorithms) by default since release 9.0 (April 2022), initially via the sntrup761x25519-sha512 algorithm. More recently, in OpenSSH 9.9, we have added a second post-quantum key agreement mlkem768x25519-sha256 and it was made the new default scheme in OpenSSH 10.0 (April 2025).


Debian 10, 11, 12, 13

Default KexAlgorithms / Ciphers for Debian 10

Debian 10 does not offer post-quantum security.

10.13
OpenSSH_7.9p1 Debian-10+deb10u4, OpenSSL 1.1.1n  15 Mar 2022

ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1

Default KexAlgorithms / Ciphers for Debian 11

Debian 11 does not offer post-quantum security.

11.11
OpenSSH_8.4p1 Debian-5+deb11u5, OpenSSL 1.1.1w  11 Sep 2023

gssapikexalgorithms gss-group14-sha256-,gss-group16-sha512-,gss-nistp256-sha256-,gss-curve25519-sha256-,gss-group14-sha1-,gss-gex-sha1-
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256

Default KexAlgorithms / Ciphers for Debian 12

The first Debian Release with a post-quantum key agreement.

12.13
OpenSSH_9.2p1 Debian-2+deb12u7, OpenSSL 3.0.18 30 Sep 2025

gssapikexalgorithms gss-group14-sha256-,gss-group16-sha512-,gss-nistp256-sha256-,gss-curve25519-sha256-,gss-group14-sha1-,gss-gex-sha1-
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
kexalgorithms sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256

Default KexAlgorithms / Ciphers for Debian 13

The second Debian Release with a second post-quantum key agreement added.

13.3
OpenSSH_10.0p2 Debian-7, OpenSSL 3.5.4 30 Sep 2025

gssapikexalgorithms gss-group14-sha256-,gss-group16-sha512-,gss-nistp256-sha256-,gss-curve25519-sha256-,gss-group14-sha1-,gss-gex-sha1-
ciphers chacha20-poly1305@openssh.com,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr
kexalgorithms mlkem768x25519-sha256,sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521

How this information in this gist was gathered

The script debian_10.sh used:

#!/usr/bin/env bash
set -euo pipefail

# Clean up any existing debian:10 image (optional but ensures a fresh start)
docker rmi -f debian:10 2>/dev/null || true

# Run the container and perform all the steps inside it
docker run -it --rm \
    --platform linux/amd64 \
    debian:10 \
    bash -c '
      set -euo pipefail

      # ----- Switch APT to the archival mirrors
      cat > /etc/apt/sources.list << EOF
deb http://archive.debian.org/debian buster main contrib non-free
deb http://archive.debian.org/debian-security buster/updates main contrib non-free
deb http://archive.debian.org/debian buster-updates main contrib non-free
EOF
      # Disable the expired‑metadata check
      echo "Acquire::Check-Valid-Until \"false\";" >/etc/apt/apt.conf.d/99no-check-valid-until

      # ----- Update package index, install OpenSSH
      apt-get update &>/dev/null
      DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends vim openssh-server &>/dev/null

      # ----- Create the privilege‑separation runtime directory ------------------
      mkdir -p /run/sshd && chmod 0755 /run/sshd

      # ----- Show the default KexAlgorithms / Ciphers
      echo "=== Default KexAlgorithms / Ciphers for Debian 10 ==="
      cat /etc/debian_version
      ssh -V
      sshd -T | grep -Ei "kexalgorithms|ciphers"

      # ----- Drop into an interactive shell ----------
      echo ""
      echo "=== You are now inside the container. Feel free to explore. ==="
      exec /bin/bash
      '
docker rmi -f debian:10 2>/dev/null || true

The script debian_11_12_13.sh used:

#!/usr/bin/env bash
set -euo pipefail

# Choose the Debian version
# DEBIAN_VER="11"
# DEBIAN_VER="12"
# DEBIAN_VER="13"

read -rp "Enter the Debian version you want to use (11, 12, or 13): " DEBIAN_VER
if [[ ! "$DEBIAN_VER" =~ ^(11|12|13)$ ]]; then
    echo "Invalid version. Please run the script again and choose 11, 12, or 13."
    exit 1
fi

IMAGE_TAG="debian:${DEBIAN_VER}"

# Clean up any existing image (optional but ensures a fresh start)
docker rmi -f "$IMAGE_TAG" 2>/dev/null || true

# Run the container and perform all the steps inside it
docker run -it --rm \
  --platform linux/amd64 \
  "$IMAGE_TAG" \
  bash -c 'set -euo pipefail

    # ----- Update package index, install OpenSSH
    apt-get update &>/dev/null
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends vim openssh-server &>/dev/null

    # ----- Create the privilege-separation runtime directory
    mkdir -p /run/sshd && chmod 0755 /run/sshd

    # ----- Show the default KexAlgorithms / Ciphers
    echo "=== Default KexAlgorithms / Ciphers for Debian '"'"${DEBIAN_VER}"'"' ==="
    cat /etc/debian_version
    ssh -V
    sshd -T | grep -Ei "kexalgorithms|ciphers"

    # ----- Drop into an interactive shell ----------
    echo ""
    echo "=== You are now inside the container. Feel free to explore. ==="
    exec /bin/bash
  '

# Optional clean‑up of the image after you exit the container
docker rmi -f "$IMAGE_TAG" 2>/dev/null || true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment