Repository navigation
Accepting CryptoKey in node:crypto APIs #55293
Description
The following APIs accept a CryptoKey instance and process the operation despite the restrictions put forth on the CryptoKey instance (e.g. algorithm, usages, extractable)
- KeyObject.from (ignores
extractable) - crypto.publicDecrypt
- crypto.publicEncrypt
- crypto.privateDecrypt
- crypto.privateEncrypt
- crypto.sign
- crypto.verify
- Sign.sign
- Verify.verify
- Cipher.final
- Decipher.final
- Hmac.digest
This list is according to the docs, but i suspect it's possible that hkdf and pbkdf2 allow this too.
This issue is to discuss a way forward to deal with this issues.
KeyObject.from
#37240 attempted to do something about KeyObject.from but i think the outcome would not solve the issues above.
I believe that converting key representations is not an issue so long as the more restrictive key representation's properties are upheld.
We can take a drastic stance and deprecate / in due time remove KeyObject.from entirely, or make KeyObject.from respect the extractable property and duly document that once the key is converted the CryptoKey restrictions are not upheld anymore. I'd much rather see the latter.
Another possible approach would be to disable KeyObject.export on keys that came from non-extractable CryptoKey.
APIs accepting CryptoKey but ignoring its parameters.
We could deprecate the use of CryptoKey in these APIs entirely or emulate WebCryptoAPI behaviour and check the CryptoKey usages and algorithm slots, either way this would be a doc-only deprecation at first, then --pending-deprecation, runtime deprecation, throw behaviour at the end.
Activity
panva commentedon Oct 6, 2024
cc @nodejs/crypto
panva commentedon Oct 6, 2024
My preferred state is to have a way to convert KeyObject <> CryptoKey both ways (KeyObject.from (while respecting extractable) and #55262) but not have
node:cryptoAPIs acceptCryptoKeyand not haveSubtleCryptoacceptKeyObject(already not possible).This is even with my
joseauthor/maintainer hat on. I don't make use ofCryptoKeyinnode:cryptoAPIs. I do make use ofKeyObject.from, but beforeKeyObject.fromconversion I do check theCryptoKeyproperties and the resultingKeyObjectis never returned to the user.doc: deprecate CryptoKey use in node:crypto
doc: deprecate CryptoKey use in node:crypto
doc: deprecate CryptoKey use in node:crypto
quic: remove CryptoKey support from session keys option
quic: remove CryptoKey support from session keys option
doc: deprecate CryptoKey use in node:crypto
12 remaining items
crypto: move DEP0203 and DEP0204 to End-of-Life
crypto: move DEP0203 and DEP0204 to End-of-Life