Skip to main content

Minimum Key Protection MC Config Flag

The maverick.minimumKeyProtection configuration flag in mc_config.json controls the minimum key protection level required by the MasterController (MC) when maverick.mKex and/or maverick.useSEKeyForSigningTransactions are set to true. If neither of these flags is set to true, minimumKeyProtection has no effect.

Note: This flag uses the same key protection levels as maverick.jwtSignKeySecurityPolicy. For the full mc_config.json reference, see MC Configuration.

Key Protection Levels

The following table outlines the available key protection levels and their descriptions:

Key Protection LevelDescription
ENFORCE_STRONG_HARDWAREMC will only run if the device can create keys in a Secure Element (SE) and successfully attest them. If the device does not have a Secure Element, the StartEvent will fail.
ENFORCE_HARDWAREMC will only run if the device can create keys in any hardware-backed store and successfully attest them. If the device does not have a hardware-backed keystore, the StartEvent will fail.
ALLOW_VIRTUAL_SMART_CARDMC will also work on devices without a hardware-backed keystore, while still using the strongest available one if present. The SDK prefers key storage in the following order: Secure Element (SE / Secure Enclave) → Hardware Keystore (TEE on Android; iOS only has Secure Enclave) → Software solution.

Fallback for Devices Without a Hardware-Backed Keystore

To allow devices without a hardware-backed keystore when maverick.mKex or maverick.useSEKeyForSigningTransactions is true, set minimumKeyProtection to ALLOW_VIRTUAL_SMART_CARD.

  • ALLOW_VIRTUAL_SMART_CARD attempts to use the strongest available keystore (e.g., StrongBox) while also supporting devices without a hardware-backed store.
  • The SetAuthorisationCodeResultEvent provides mkex_key_protection and tms_key_protection parameters, indicating the key protection levels used during the SetAuthorisationCodeEvent flow.

With the introduction of the new flag, the MC enforces restrictions on changing the following flags:

  • MinimumKeyProtection
  • maverick.useSEKeyForSigningTransactions
  • maverick.mKex

Restrictions

  • Changes to these flags are not allowed if there is at least one activated user.
  • Changes are permitted only when there are no activated users (e.g., if a user was activated but later deleted, the MC allows changes).

App Dependency

The MC-SDK uses a third-party library for some of the features mentioned above. Your app needs to include it as a dependency:

implementation("org.bouncycastle:bcpkix-jdk15to18:1.78.1")

Do not use a version older than 1.78.1. Failing to add this dependency will result in error 800000278 when trying to use minimumKeyProtection or related features.

Backend Configuration

To use this new feature, you need to set the following in your backend's AST-CA service:

publicKeyProvider.attestation.mode = ENFORCE