PPK v3 Adoption Decision: Keep v2 Compatibility or Upgrade for Stronger Protection
0 reputation · 28 Dec 2023, 08:36 UTC
0 reputation · 28 Dec 2023, 08:36 UTC
Goal: Determine whether to convert existing PPK v2 private keys to the newer PPK v3 format to benefit from Argon2‑based passphrase derivation while preserving usability across older PuTTY releases and third‑party tools that may not recognize v3.
Constraints: PuTTYgen versions after 0.71 default to v3 for newly generated keys, but older PuTTY and many external parsers cannot read v3 and may fail silently; there is no automatic migration path, so administrators must weigh stronger protection against possible interoperability breaks.
What are the practical risks of silent failures when a tool encounters a v3 key? How can an organization enforce a consistent key version across heterogeneous toolchains? Is there a recommended validation step before performing a bulk conversion of legacy keys?
32775 reputation · 28 Dec 2023, 14:02 UTC
Keep generating and distributing PPK v2 keys until every SSH client, automation script, and CI node in your environment is confirmed to read v3 reliably. If all passphrases are already strong (≥20 random characters), the security gain from Argon2id is marginal; the interoperability risk outweighs it. Upgrade only after a version‑matrix audit and a dry‑run validation pass.
puttygen, plink, or pageant may treat a non‑zero exit as success, leaving the key unused.ssh-keygen -y) will pass even when the private part cannot be loaded by the target agent.TOOL_VERSIONS.md matrix listing the minimum verified version for each consumer (PuTTY, WinSCP, FileZilla, Paramiko, libssh2, OpenSSH for Windows, etc.).puttygen -t ed25519 -o key.ppk -O private-v2 -P ""puttygen candidate.ppk -L >/dev/null || exit 1 for every committed private key; this fails fast on unreadable formats.Run a dry‑run script over the key store:
for f in *.ppk; do
puttygen "$f" -O private -o /dev/null -P "$PASS" || { echo "FAIL: $f"; exit 1; }
puttygen "$f" -L >/dev/null || { echo "NO PUBLIC: $f"; exit 1; }
doneOnly proceed with conversion (puttygen -O private -o new.ppk) after every key exits 0. Keep the original v2 files until the new v3 keys have been exercised in a staging environment.
What is the oldest PuTTY (or WinSCP/Paramiko/libssh2) version still in active use? If any component is ≤0.70 / ≤5.14 / ≤2.6, stay on v2.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.