Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 1 | page.title=Features |
| 2 | @jd:body |
| 3 | |
| 4 | <!-- |
| 5 | Copyright 2015 The Android Open Source Project |
| 6 | |
| 7 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | you may not use this file except in compliance with the License. |
| 9 | You may obtain a copy of the License at |
| 10 | |
| 11 | http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | |
| 13 | Unless required by applicable law or agreed to in writing, software |
| 14 | distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | See the License for the specific language governing permissions and |
| 17 | limitations under the License. |
| 18 | --> |
| 19 | <div id="qv-wrapper"> |
| 20 | <div id="qv"> |
| 21 | <h2>In this document</h2> |
| 22 | <ol id="auto-toc"> |
| 23 | </ol> |
| 24 | </div> |
| 25 | </div> |
| 26 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 27 | <p>This page contains information about the features of <a href="index.html">Keystore</a> |
| 28 | in Android 6.0.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 29 | |
| 30 | <h2 id=cryptographic_primitives>Cryptographic primitives</h2> |
| 31 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 32 | <p>Keystore provides the following categories of operations:</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 33 | |
| 34 | <ul> |
| 35 | <li>Key generation |
| 36 | <li>Import and export of asymmetric keys (no key wrapping) |
| 37 | <li>Import of raw symmetric keys (again, no wrapping) |
| 38 | <li>Asymmetric encryption and decryption with appropriate padding modes |
| 39 | <li>Asymmetric signing and verification with digesting and appropriate padding |
| 40 | modes |
| 41 | <li>Symmetric encryption and decryption in appropriate modes, including an AEAD |
| 42 | mode |
| 43 | <li>Generation and verification of symmetric message authentication codes |
| 44 | </ul> |
| 45 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 46 | <p>Protocol elements, such as purpose, mode and padding, as well |
| 47 | as <a href="#key_access_control">access control constraints</a>, |
| 48 | must be specified when keys are generated or imported and are permanently |
| 49 | bound to the key, ensuring the key cannot be used in any other way.</p> |
| 50 | |
| 51 | <p>In addition to the list above, there is one more service that Keymaster |
| 52 | implementations must provide but which is not exposed as an API: Random number |
| 53 | generation. This is used internally for generation of keys, Initialization |
| 54 | Vectors (IVs), random padding and other elements of secure protocols that |
| 55 | require randomness.</p> |
| 56 | |
| 57 | <h2 id=required_primitives>Required primitives</h2> |
| 58 | |
| 59 | <p>All implementations must provide:</p> |
| 60 | |
| 61 | <ul> |
| 62 | <li><a href="http://en.wikipedia.org/wiki/RSA_(cryptosystem)">RSA</a> |
| 63 | <ul> |
| 64 | <li>2048, 3072 and 4096-bit key support are required |
| 65 | <li>Support for public exponent F4 (2^16+1) |
| 66 | <li>Required padding modes for RSA signing are: |
| 67 | <ul> |
| 68 | <li>No padding (deprecated, will be removed in the future) |
| 69 | <li>RSASSA-PSS (<code>KM_PAD_RSA_PSS</code>) |
| 70 | <li>RSASSA-PKCS1-v1_5 (<code>KM_PAD_RSA_PKCS1_1_5_SIGN</code>) |
| 71 | </ul> |
| 72 | <li>Required digest modes for RSA signing are: |
| 73 | <ul> |
| 74 | <li>No digest (deprecated, will be removed in the future) |
| 75 | <li>SHA-256 |
| 76 | </ul> |
| 77 | <li>Required padding modes for RSA encryption/decryption are: |
| 78 | <ul> |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 79 | <li>Unpadded |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 80 | <li>RSAES-OAEP (<code>KM_PAD_RSA_OAEP</code>) |
| 81 | <li>RSAES-PKCS1-v1_5 (<code>KM_PAD_RSA_PKCS1_1_5_ENCRYPT</code>) |
| 82 | </ul> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 83 | </ul> |
| 84 | <li><a href="http://en.wikipedia.org/wiki/Elliptic_Curve_DSA">ECDSA</a> |
| 85 | <ul> |
| 86 | <li>224, 256, 384 and 521-bit key support are required, using the NIST P-224, |
| 87 | P-256, P-384 and P-521 curves, respectively |
| 88 | <li>Required digest modes for ECDSA are: |
| 89 | <ul> |
| 90 | <li>No digest (deprecated, will be removed in the future) |
| 91 | <li>SHA-256 |
| 92 | </ul> |
| 93 | </ul> |
| 94 | <li><a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> |
| 95 | <ul> |
| 96 | <li>128 and 256-bit keys are required |
| 97 | <li><a href="http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29">CBC</a>, |
| 98 | CTR, ECB and and GCM. The GCM implementation must not allow the use of tags |
| 99 | smaller than 96 bits or nonce lengths other than 96 bits. |
| 100 | <li>Padding modes <code>KM_PAD_NONE</code> and <code>KM_PAD_PKCS7</code> must |
| 101 | be supported for CBC and ECB modes. With no padding, CBC or ECB mode |
| 102 | encryption must fail if the input isn't a multiple of the block size. |
| 103 | </ul> |
| 104 | <li><a href="http://en.wikipedia.org/wiki/Hash-based_message_authentication_code">HMAC</a> |
| 105 | <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-256</a>, with any key size up to at least 32 bytes. |
| 106 | </ul> |
| 107 | </ul> |
| 108 | |
| 109 | <p>SHA1 and the other members of the SHA2 family (SHA-224, SHA384 and SHA512) are |
| 110 | strongly recommended, but not required. Keystore will provide them in software |
| 111 | if the hardware Keymaster implementation doesn't provide them.</p> |
| 112 | |
| 113 | <p>Some primitives are also recommended for interoperability with other systems:</p> |
| 114 | |
| 115 | <ul> |
| 116 | <li>Smaller key sizes for RSA |
| 117 | <li>Arbitrary public exponents for RSA |
| 118 | </ul> |
| 119 | |
| 120 | <h2 id=key_access_control>Key access control</h2> |
| 121 | |
| 122 | <p>Hardware-based keys that can never be extracted from the device don't provide |
| 123 | much security if an attacker can use them at will (though they're more secure |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 124 | than keys which <em>can</em> be exfiltrated). Thus, it's crucial that Keystore |
| 125 | enforce access controls.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 126 | |
| 127 | <p>Access controls are defined as an "authorization list" of tag/value pairs. |
| 128 | Authorization tags are 32-bit integers and the values are a variety of types. |
| 129 | Some tags may be repeated to specify multiple values. Whether a tag may be |
| 130 | repeated is specified in the documentation for the tag. When a key is created, |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 131 | the caller specifies an authorization list. The Keymaster implementation |
| 132 | underlying Keystore will modify the list to specify some additional information, |
| 133 | such as whether the key has rollback protection, and return a "final" |
| 134 | authorization list, encoded into the returned key blob. Any attempt to use the |
| 135 | key for any cryptographic operation must fail if the final authorization list is |
| 136 | modified.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 137 | |
| 138 | <p>The set of possible tags is defined in the enumeration <code>keymaster_authorization_tag_t</code> and |
| 139 | the set must be permanently fixed (though it can be extended). |
| 140 | Names are prefixed with <code>KM_TAG_</code>. The top |
| 141 | four bits of tag IDs are used to indicate the type.</p> |
| 142 | |
| 143 | <p>Possible types include:</p> |
| 144 | |
| 145 | <p><strong><code>KM_ENUM</code>:</strong> Many tags' values are defined in enumerations. For example, the possible |
| 146 | values of <code>KM_TAG_PURPOSE</code> are defined in enum <code>keymaster_purpose_t</code>.</p> |
| 147 | |
| 148 | <p><strong><code>KM_ENUM_REP</code></strong>: Same as <code>KM_ENUM</code>, except that the tag may |
| 149 | be repeated in an authorization list. Repetition |
| 150 | indicates multiple authorized values. For example, an encryption key will |
| 151 | likely have <code>KM_PURPOSE_ENCRYPT</code> and <code>KM_PURPOSE_DECRYPT</code>.</p> |
| 152 | |
| 153 | <p><strong><code>KM_UINT</code>:</strong> 32-bit unsigned integers. Example: <code>KM_TAG_KEY_SIZE</code></p> |
| 154 | |
| 155 | <p><strong><code>KM_UINT_REP</code></strong>: Same as <code>KM_UINT</code>, except that the tag may be |
| 156 | repeated in an authorization list. Repetition indicates multiple authorized values.</p> |
| 157 | |
| 158 | <p><strong><code>KM_ULONG</code></strong>: 64-bit unsigned integers. Example: <code>KM_TAG_RSA_PUBLIC_EXPONENT</code></p> |
| 159 | |
| 160 | <p><strong><code>KM_ULONG_REP</code></strong>: Same as <code>KM_ULONG</code>, except that the tag may be |
| 161 | repeated in an authorization list. Repetition |
| 162 | indicates multiple authorized values.</p> |
| 163 | |
| 164 | <p><strong><code>KM_DATE</code></strong>: Date/time values, expressed as milliseconds since January 1, 1970. |
| 165 | Example: <code>KM_TAG_PRIVKEY_EXPIRE_DATETIME</code></p> |
| 166 | |
| 167 | <p><strong><code>KM_BOOL</code></strong>: True or false. A tag of type <code>KM_BOOL</code> is assumed |
| 168 | to be "false" if the tag is not present and "true" if present. Example: <code>KM_TAG_ROLLBACK_RESISTANT</code></p> |
| 169 | |
| 170 | <p><strong><code>KM_BIGNUM</code></strong>: Arbitrary-length integers, expressed as a byte array |
| 171 | in big-endian order. Example: <code>KM_TAG_RSA_PUBLIC_EXPONENT</code></p> |
| 172 | |
| 173 | <p><strong><code>KM_BYTES</code></strong>: A sequence of bytes. Example: <code>KM_TAG_ROOT_OF_TRUST</code></p> |
| 174 | |
| 175 | <h3 id=hardware_vs_software_enforcement>Hardware vs. software enforcement</h3> |
| 176 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 177 | <p>Not all secure hardware will implement the same features. To support a |
| 178 | variety of approaches, Keymaster 1.0 distinguishes between secure and non-secure |
| 179 | world access control enforcement, which we call hardware and software |
| 180 | enforcement, respectively.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 181 | |
| 182 | <p>Implementations are required to:</p> |
| 183 | |
| 184 | <ul> |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 185 | |
| 186 | <li>Enforce exact matching (not enforcement) of all authorizations. |
| 187 | Authorization lists in key blobs must exactly match the authorizations |
| 188 | returned during key generation, including ordering. Any mismatch must cause an |
| 189 | error diagnostic. |
| 190 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 191 | <li>Declare the authorizations whose semantic values are enforced. |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 192 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 193 | </ul> |
| 194 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 195 | <p>The API mechanism for declaring hardware-enforced authorizations is in the |
| 196 | <code>keymaster_key_characteristics_t</code> structure. It divides the |
| 197 | authorization list into two sub-lists, <code>hw_enforced</code> and |
| 198 | <code>sw_enforced</code>. The secure hardware is responsible for placing the |
| 199 | appropriate values in each, based on what it can enforce.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 200 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 201 | <p>In addition, Keystore implements software-based enforcement of <em>all</em> |
| 202 | authorizations, whether they're enforced by the secure hardware or not.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 203 | |
| 204 | <p>For example, consider a TrustZone-based implementation that does not support |
| 205 | key expiration. A key with an expiration date may still be created. That key's |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 206 | authorization list will include the tag |
| 207 | <code>KM_TAG_ORIGINATION_EXPIRE_DATETIME</code> with the expiration date. A |
| 208 | request to Keystore for the key characteristics will find this tag in the |
| 209 | <code>sw_enforced</code> list and the secure hardware will not enforce the |
| 210 | expiration requirement. However, attempts to use the key after expiration will |
| 211 | be rejected by Keystore.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 212 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 213 | <p>If the device is then upgraded with secure hardware that does support |
| 214 | expiration, then a request for key characteristics will find |
| 215 | <code>KM_TAG_ORIGINATION_EXPIRE_DATETIME</code> in the <code>hw_enforced</code> |
| 216 | list, and attempts to use the key after expiration will fail even if the |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 217 | keystore is somehow subverted or bypassed.</p> |
| 218 | |
| 219 | <h3 id=cryptographic_message_construction_authorizations>Cryptographic message construction authorizations</h3> |
| 220 | |
| 221 | <p>The following tags are used to define the cryptographic characteristics of |
| 222 | operations using the associated key: <code>KM_TAG_ALGORITHM</code>, <code>KM_TAG_KEY_SIZE</code>, |
| 223 | <code>KM_TAG_BLOCK_MODE</code>, <code>KM_TAG_PADDING</code>, <code>KM_TAG_CALLER_NONCE</code>, and <code>KM_TAG_DIGEST</code></p> |
| 224 | |
| 225 | <p><code>KM_TAG_PADDING</code>, <code>KM_TAG_DIGEST</code>, and <code>KM_PAD_BLOCK_MODE</code> |
| 226 | are repeatable, meaning that multiple values may be associated with a single |
| 227 | key, and the value to be used will be specified at operation time.</p> |
| 228 | |
| 229 | <h3 id=purpose>Purpose</h3> |
| 230 | |
| 231 | <p>Keys have an associated set of purposes, expressed as one or more authorization |
| 232 | entries with tag <code>KM_TAG_PURPOSE</code>, which defines how they can be used. The purposes are:</p> |
| 233 | |
| 234 | <ul> |
| 235 | <li><code>KM_PURPOSE_ENCRYPT</code> |
| 236 | <li><code>KM_PURPOSE_DECRYPT</code> |
| 237 | <li><code>KM_PURPOSE_SIGN</code> |
| 238 | <li><code>KM_PURPOSE_VERIFY</code> |
| 239 | </ul> |
| 240 | |
| 241 | <p>Any key can have any subset of these purposes. Note that some combinations |
| 242 | create security problems. For example, an RSA key that can be used to both |
| 243 | encrypt and to sign allows an attacker who can convince the system to decrypt |
| 244 | arbitrary data to generate signatures.</p> |
| 245 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 246 | <h3 id=import_and_export>Import and export</h3> |
| 247 | |
| 248 | <p>Keymaster supports export of public keys only, in X.509 format, and import of:</p> |
| 249 | |
| 250 | <ul> |
| 251 | <li>Public and private key pairs in DER-encoded PKCS#8 format, without |
| 252 | password-based encryption, and |
| 253 | <li>Symmetric keys as raw bytes |
| 254 | </ul> |
| 255 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 256 | <p>To ensure that imported keys can be distinguished from securely-generated |
| 257 | keys, <code>KM_TAG_ORIGIN</code> is included in the appropriate key |
| 258 | authorization list. For example, if a key |
| 259 | was generated in secure hardware, <code>KM_TAG_ORIGIN</code> with |
| 260 | value <code>KM_ORIGIN_GENERATED</code> will be found in |
| 261 | the <code>hw_enforced</code> list of the key characteristics, while a key |
| 262 | that was imported into secure |
| 263 | hardware will have the value <code>KM_ORIGIN_IMPORTED</code>.</p> |
| 264 | |
| 265 | <h3 id=user_authentication>User authentication</h3> |
| 266 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 267 | <p>Secure Keymaster implementations do not implement user authentication, but |
| 268 | depend on other trusted apps which do. For the interface that must be |
| 269 | implemented by these apps, see the Gatekeeper page.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 270 | |
| 271 | <p>User authentication requirements are specified via two sets of tags. The first |
| 272 | set indicate which user can use the key:</p> |
| 273 | |
| 274 | <ul> |
| 275 | <li><code>KM_TAG_ALL_USERS</code> indicates the key is usable by all users. If |
| 276 | present, <code>KM_TAG_USER_ID</code> and <code>KM_TAG_SECURE_USER_ID</code> must not be present. |
| 277 | <li><code>KM_TAG_USER_ID</code> has a numeric value specifying the ID of the authorized user. |
| 278 | Note that this |
| 279 | is the Android user ID (for multi-user), not the application UID, and it is |
| 280 | enforced by non-secure software only. If present, <code>KM_TAG_ALL_USERS</code> must not be present. |
| 281 | <li><code>KM_TAG_SECURE_USER_ID</code> has a 64-bit numeric value specifying the secure user ID |
| 282 | that must be provided |
| 283 | in a secure authentication token to unlock use of the key. If repeated, the key |
| 284 | may be used if any of the values is provided in a secure authentication token. |
| 285 | </ul> |
| 286 | |
| 287 | <p>The second set indicate whether and when the user must be authenticated. If |
| 288 | neither of these tags is present, but <code>KM_TAG_SECURE_USER_ID</code> is, authentication is |
| 289 | required for every use of the key.</p> |
| 290 | |
| 291 | <ul> |
| 292 | <li><code>KM_NO_AUTHENTICATION_REQUIRED</code> indicates no user authentication is required, though |
| 293 | the key still may only be |
| 294 | used by apps running as the user(s) specified by <code>KM_TAG_USER_ID</code>. |
| 295 | <li><code>KM_TAG_AUTH_TIMEOUT</code> is a numeric value specifying, in seconds, how fresh the user |
| 296 | authentication |
| 297 | must be to authorize key usage. This applies only to private/secret key |
| 298 | operations. Public key operations don't require authentication. Timeouts do not |
| 299 | cross reboots; after a reboot, all keys are "never authenticated." The timeout |
| 300 | may be set to a large value to indicate that authentication is required once |
| 301 | per boot (2^32 seconds is ~136 years; presumably Android devices are rebooted |
| 302 | more often than that). |
| 303 | </ul> |
| 304 | |
| 305 | <h3 id=client_binding>Client binding</h3> |
| 306 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 307 | <p>Client binding, the association of a key with a particular client |
| 308 | application, is done via an optional client ID and some optional client data |
| 309 | (<code>KM_TAG_APPLICATION_ID</code> and <code>KM_TAG_APPLICATION_DATA</code>, |
| 310 | respectively). Keystore treats these values as opaque blobs, only ensuring that |
| 311 | the same blobs presented during key generation/import are presented for every |
| 312 | use and are byte-for-byte identical. The client binding data is not returned by |
| 313 | Keymaster. The caller must know it in order to use the key.</p> |
| 314 | |
| 315 | <p>This feature is not exposed to applications. |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 316 | |
| 317 | <h3 id=expiration>Expiration</h3> |
| 318 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 319 | <p>Keystore supports restricting key usage by date. Key start of validity and |
| 320 | key expirations can be associated with a key and Keymaster will refuse to |
| 321 | perform key operations if the current date/time is outside of the valid |
| 322 | range. The key validity range is specified with the tags |
| 323 | <code>KM_TAG_ACTIVE_DATETIME</code>, |
| 324 | <code>KM_TAG_ORIGINATION_EXPIRE_DATETIME</code>, and |
| 325 | <code>KM_TAG_USAGE_EXPIRE_DATETIME</code>. The distinction between |
| 326 | "origination" and "usage" is based on whether the key is being used to |
| 327 | "originate" a new ciphertext/signature/etc., or to "use" an existing |
| 328 | ciphertext/signature/etc. Note that this distinction is not exposed to |
| 329 | applications.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 330 | |
| 331 | <p>The <code>KM_TAG_ACTIVE_DATETIME</code>, <code>KM_TAG_ORIGINATION_EXPIRE_DATETIME</code>, |
| 332 | and <code>KM_TAG_USAGE_EXPIRE_DATETIME</code> tags are optional. If the tags are absent, it is |
| 333 | assumed that the key in |
| 334 | question can always be used to decrypt/verify messages.</p> |
| 335 | |
| 336 | <p>Because wall-clock time is provided by the non-secure world, it's unlikely that |
| 337 | the expiration-related tags will be in the hardware-enforced list. Hardware |
| 338 | enforcement of expiry would require that the secure world somehow obtain |
| 339 | trusted time and data, for example via a challenge response protocol with a |
| 340 | trusted remote timeserver.</p> |
| 341 | |
| 342 | <h3 id=root_of_trust_binding>Root of trust binding</h3> |
| 343 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 344 | <p>Keystore requires keys to be bound to a root of trust, which is a bitstring |
| 345 | provided to the Keymaster secure hardware during startup, preferably by the |
| 346 | bootloader. This bitstring must be cryptographically bound to every key managed |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 347 | by Keymaster.</p> |
| 348 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 349 | <p>The root of trust consists of the public key used to verify the signature on |
| 350 | the boot image and the lock state of the device. If the public key is changed to |
| 351 | allow a different system image to be used or if the lock state is changed, then |
| 352 | none of the Keymaster-protected keys created by the previous system will be |
| 353 | usable, unless the previous root of trust is restored and a system that is |
| 354 | signed by that key is booted. The goal is to increase the value of the |
| 355 | software-enforced key access controls by making it impossible for an |
| 356 | attacker-installed operating system to use Keymaster keys.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 357 | |
| 358 | <h3 id=standalone_keys>Standalone keys</h3> |
| 359 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 360 | <p>Some Keymaster secure hardware may choose to store key material internally |
| 361 | and return handles rather than encrypted key material. Or there may be other |
| 362 | cases in which keys cannot be used until some other non-secure or secure world |
| 363 | system component is available. The Keymaster 1.0 HAL allows the caller to |
| 364 | request that a key be "standalone," via the <code>KM_TAG_STANDALONE</code> tag, |
| 365 | meaning that no resources other than the blob and the running Keymaster system |
| 366 | are required. The tags associated with a key may be inspected to see whether a |
| 367 | key is standalone. At present, only two values are defined:</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 368 | |
| 369 | <ul> |
| 370 | <li><code>KM_BLOB_STANDALONE</code> |
| 371 | <li><code>KM_BLOB_REQUIRES_FILE_SYSTEM</code> |
| 372 | </ul> |
| 373 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 374 | <p>This feature is not exposed to applications. |
| 375 | |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 376 | <h3 id=velocity>Velocity</h3> |
| 377 | |
| 378 | <p>When it's created, the maximum usage velocity can be specified |
| 379 | with <code>KM_TAG_MIN_SECONDS_BETWEEN_OPS</code>. |
| 380 | TrustZone implementations will refuse to perform cryptographic operations |
| 381 | with that key if an operation was performed less |
| 382 | than <code>KM_TAG_MIN_SECONDS_BETWEEN_OPS</code> seconds earlier.</p> |
| 383 | |
| 384 | <p>The simple approach to implementing velocity limits is a table of key IDs and |
| 385 | last-use timestamps. This table will likely be of limited size, but must |
| 386 | accommodate at least 16 entries. In the event that the table is full and no |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 387 | entries may be updated or discarded, secure hardware implementations must "fail |
| 388 | safe," preferring to refuse all velocity-limited key operations until one of the |
| 389 | entries expires. It is acceptable for all entries to expire upon reboot.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 390 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 391 | <p>Keys can also be limited to <em>n</em> uses per boot with |
| 392 | <code>KM_TAG_MAX_USES_PER_BOOT</code>. This also requires a tracking table, |
| 393 | which must accommodate at least four keys, and must also fail safe. Note that |
| 394 | applications will be unable to create per-boot limited keys. This feature will |
| 395 | not be exposed through Keystore and will be reserved for system operations.</p> |
| 396 | |
| 397 | <p>This feature is not exposed to applications.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 398 | |
| 399 | <h3 id=random_number_generator_re-seeding>Random number generator re-seeding</h3> |
| 400 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 401 | <p>Because secure hardware must generate random numbers for key material and |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 402 | Initialization Vectors (IVs), and because hardware random number generators may |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 403 | not always be fully trustworthy, the Keymaster HAL provides an interface to |
| 404 | allow the client to provide additional entropy which will be mixed into the |
| 405 | random numbers generated.</p> |
Bert McMeen | daa1137 | 2015-09-17 16:35:18 -0700 | [diff] [blame] | 406 | |
Shawn Willden | 453bcca | 2015-12-01 09:39:18 -0700 | [diff] [blame^] | 407 | <p>A hardware random-number generator must be used as the primary seed source, |
| 408 | and the seed data provided through the external API must not be the sole source |
| 409 | of randomness used for number generation. Further, the mixing operation used |
| 410 | must ensure that the random output is unpredictable if any one of the seed |
| 411 | sources is unpredictable.</p> |
| 412 | |
| 413 | <p>This feature is not exposed to applications but is used by the framework, |
| 414 | which regularly provides additional entropy, retrieved from a Java SecureRandom |
| 415 | instance, to the secure hardware. |