blob: d05d3f8ceb1f89ed4ee98bfad43cf844c7de5ad6 [file] [log] [blame]
Danielle Roberts8bb806d2015-11-05 17:47:03 -08001page.title=Hardware-backed Keystore
Bert McMeendaa11372015-09-17 16:35:18 -07002@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
27<p>The availability of a trusted execution environment in a system on a chip (SoC)
28offers an opportunity for Android devices to provide hardware-backed, strong
29security services to the Android OS, to platform services, and even to
30third-party apps.</p>
31
Shawn Willden453bcca2015-12-01 09:39:18 -070032<p>Keystore has been <a href="features.html">significantly enhanced</a> in
33Android 6.0 with the addition of symmetric cryptographic primitives, AES and
34HMAC, and the addition of an access control system for hardware-backed
35keys. Access controls are specified during key generation and enforced for the
36lifetime of the key. Keys can be restricted to be usable only after the user has
37authenticated, and only for specified purposes or with specified cryptographic
38parameters. For more information, please see the <a
39href="implementer-ref.html">Implementer's Reference</a>.</p>
Bert McMeendaa11372015-09-17 16:35:18 -070040
Shawn Willden453bcca2015-12-01 09:39:18 -070041<p>Before Android 6.0, Android already had a simple, hardware-backed crypto
42services API, provided by versions 0.2 and 0.3 of the Keymaster Hardware
43Abstraction Layer (HAL). Keystore provided digital signing and verification
44operations, plus generation and import of asymmetric signing key pairs. This is
45already implemented on many devices, but there are many security goals that
46cannot easily be achieved with only a signature API. Keystore in Android 6.0
47extends the Keystore API to provide a broader range of capabilities.</p>
Bert McMeendaa11372015-09-17 16:35:18 -070048
49<h2 id=goals>Goals</h2>
50
Shawn Willden453bcca2015-12-01 09:39:18 -070051<p>The goal of the Android 6.0 Keystore API and the underlying Keymaster 1.0 HAL
52is to provide a basic but adequate set of cryptographic primitives to allow the
53implementation of protocols using access-controlled, hardware-backed keys.</p>
Bert McMeendaa11372015-09-17 16:35:18 -070054
Shawn Willden453bcca2015-12-01 09:39:18 -070055<p>In addition to expanding the range of cryptographic primitives, Keystore in
56Android 6.0 adds the following:</p>
Bert McMeendaa11372015-09-17 16:35:18 -070057
58<ul>
59 <li>A usage control scheme to allow key usage to be limited, to mitigate the risk
60of security compromise due to misuse of keys
61 <li>An access control scheme to enable restriction of keys to specified users,
62clients, and a defined time range
63</ul>
64
65<h2 id=architecture>Architecture</h2>
66
Shawn Willden453bcca2015-12-01 09:39:18 -070067<p>The Keymaster HAL is an OEM-provided, dynamically-loadable library used by the
68Keystore service to provide hardware-backed cryptographic services. HAL
69implementations must not perform any sensitive operations in user space, or even
70in kernel space. Sensitive operations are delegated to a secure processor
71reached through some kernel interface. The resulting architecture looks
72like the following:</p>
Bert McMeendaa11372015-09-17 16:35:18 -070073
Shawn Willden453bcca2015-12-01 09:39:18 -070074<div align="center">
75 <img src="../images/access-to-keymaster.png" alt="Access to Keymaster" id="figure1" />
76</div>
Bert McMeendaa11372015-09-17 16:35:18 -070077<p class="img-caption"><strong>Figure 1.</strong> Access to Keymaster</p>
78
Shawn Willden453bcca2015-12-01 09:39:18 -070079<p>Within an Android device, the "client" of the Keymaster HAL consists of
80multiple layers (e.g. app, framework, Keystore daemon), but that can be ignored
81for the purposes of this document. This means that the described Keymaster HAL
82API is low-level, used by platform-internal components, and not exposed to app
83developers. The higher-level API, for API level 23, is described on the <a
84href="http://developer.android.com/reference/java/security/KeyStore.html">Android
85Developer site</a>.</p>
Bert McMeendaa11372015-09-17 16:35:18 -070086
Shawn Willden453bcca2015-12-01 09:39:18 -070087<p>The purpose of the Keymaster HAL is not to implement the security-sensitive
88algorithms but only to marshal and unmarshal requests to the secure world. The
89wire format is implementation-defined.</p>
Bert McMeendaa11372015-09-17 16:35:18 -070090
91<h2 id=compatibility_with_previous_versions>Compatibility with previous versions</h2>
92
Shawn Willden453bcca2015-12-01 09:39:18 -070093<p>The Keymaster v1.0 HAL is completely incompatible with the
94previously-released HALs, e.g. Keymaster v0.2 and v0.3. To facilitate
95interoperability on pre-Marshmallow devices that launched with the older
96Keymaster HALs, Keystore provides an adapter that implements the 1.0 HAL with
97calls to the existing hardware library. The result cannot provide the full range
98of functionality in the 1.0 HAL. In particular, it will only support RSA and
99ECDSA algorithms, and all of the key authorization enforcement will be performed
100by the adapter, in the non-secure world.</p>