Through CryptoKit (SecureEnclave.P256.Signing.PrivateKey, SecureEnclave.P256.KeyAgreement.PrivateKey) or the Keychain (kSecAttrTokenIDSecureEnclave), apps get a key that never leaves the hardware; what they store is an opaque, device-bound handle. For classical algorithms the enclave supports only NIST P-256, which is one reason ES256 and COSE −7 dominate passkeys and device-bound credentials.
Starting with iOS 26 and macOS 26 (2025), CryptoKit also offers ML-KEM and ML-DSA with Secure Enclave support. Access control flags (.biometryCurrentSet, .userPresence) can require biometric or passcode approval for every use of the key.
Signatures come out DER-encoded, like those of other platform keystores; JWS and COSE consumers need raw r‖s. Keys are lost with the device unless the app's protocol supports recovery: synced passkeys are a different design, kept in iCloud Keychain rather than in the enclave.