tldr; no more inserting the fido2 token for encryption for new recipients (-g
to create new ones); old format still available (--symmetric -g
); backwards compatibility with v0.1.x; everything uses go instead of python now.
Please note this is still v0.x.
(see here)
In order to realize #10, the specification needed to be changed siginificantly enough that I consider this to be a new major version (v2). However, it's still possible to use the old version v1 by creating new credentials with the additional Basically, the 32 byte hmac output retrieved from the token is now used as a native age identity (but the private key is only temporarily kept in memory when it needs to be used). Thus, recipients are also native age recipients if the user is fine to securely store an additinal identity string. Otherwise, it's still a plugin identity (that also includes the public key).
The two different formats of recipients / identities are now a bit more formalized by discussing "security goals" vs "UX goals".
Complicated routines for selecting which token to use in scenarios where multiple are selected have been removed. This would be a "nice to have" extension that may be added in the future, but for now the core functionality is more important.
Rewriting everything from scratch in Go had two main reasons:
show full description
Major Spec Changes
--symmetric
flag. Plugin operations should work for both versions. The reason for not abandoning the old format is because it might still be a valid use case to generate a new salt / credential for every encryption (with the downside of having to present the token). The new format needs to use a fixed random salt per recipient and not per encrypted file, but it uses the hmac result not as a symmetric key, but as an x25519 private key.
Go instead of Python
Wrap
/ Unwrap
. This prevents any mistakes that might happen if I would reimplement the cryptographic operations done in these methods. The Python bindings do not expose Wrap
/ Unwrap
and for maintainability it's also preferred to use the original library directly.
Misc
mlock()
on unix to prevent swapping the secret to disk. This is not fully consistent yet since the identity based on the secret is not (yet) mlock'ed.