How to move an existing app from DSA signatures to EdDSA signatures.
This document describes how to migrate apps that used older, now deprecated DSA signatures to EdDSA without disruptions.
Add EdDSA signatures
-
Update WinSparkle bundled with the app to 0.9.0 or newer.
-
Generate an EdDSA key pair using
winsparkle-tool generate-key(you can also use Sparkle’s key file, as they are compatible). -
Add the EdDSA public key to the app, using win_sparkle_set_eddsa_public_key() or
EdDSAPubresource. -
Remove calls to win_sparkle_set_dsa_pub_pem() or use of the
DSAPubresource and the DSA public key from the application. -
Release the new version.
-
Going forward, add
sparkle:edSignatureto appcast enclosures in addition to existingsparkle:dsaSignature.
Following these steps ensures that older app versions will still be able to update to the latest version using DSA for validation, while the newer versions of the app will use EdDSA.
Fully migrating away from DSA
To fully migrate away from DSA and stop signing updates with DSA, you have two options:
- Wait sufficiently long, until almost all users upgrade, or you don’t care that some are left behind.
- Change the appcast feed URL in the new version of the app and stop publishing updates to the old URL. This will require users on old versions to update to future versions in two steps: by first updating to the last DSA-signed version in the old feed, then updating from it to the latest version available on the new feed.
Or don’t, and continue signing with DSA indefinitely.
WinSparkle will ignore both the DSA key and DSA signatures if it was provided with an EdDSA public key. This means that continuing to sign with DSA does not reduce the security of new versions of your app.
Additional links
- macOS Sparkle’s docs on the subject with feed examples.
- Discussion of DSA’s weaker security: e.g. here, here or here.