OLD | NEW |
1 _____ ____ __ __ _____ _ _ | 1 _____ ____ __ __ _____ _ _ |
2 |_ _| _ \| \/ | | ____|_ __ ___ _ _| | __ _| |_ ___ _ __ | 2 |_ _| _ \| \/ | | ____|_ __ ___ _ _| | __ _| |_ ___ _ __ |
3 | | | |_) | |\/| | _____ | _| | '_ ` _ \| | | | |/ _` | __/ _ \| '__| | 3 | | | |_) | |\/| | _____ | _| | '_ ` _ \| | | | |/ _` | __/ _ \| '__| |
4 | | | __/| | | | |_____| | |___| | | | | | |_| | | (_| | || (_) | | | 4 | | | __/| | | | |_____| | |___| | | | | | |_| | | (_| | || (_) | | |
5 |_| |_| |_| |_| |_____|_| |_| |_|\__,_|_|\__,_|\__\___/|_| | 5 |_| |_| |_| |_| |_____|_| |_| |_|\__,_|_|\__,_|\__\___/|_| |
6 | 6 |
7 TPM-Emulator v0.6 - | 7 TPM-Emulator v0.7 - |
8 A Software-based Trusted Platform Module (TPM) Emulator for Linux. | 8 A Software-based TPM and MTM Emulator. |
9 -------------------------------------------------------------------------- | 9 -------------------------------------------------------------------------- |
10 | 10 |
11 $Id$ | 11 $Id: README 424 2010-02-22 16:36:14Z mast $ |
12 | 12 |
13 Copyright | 13 Copyright |
14 -------------------------------------------------------------------------- | 14 -------------------------------------------------------------------------- |
15 Copyright (C) 2004-2006 Mario Strasser <mast@gmx.net> and Swiss Federal | 15 Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net>, ETH Zurich. |
16 Institute of Technology (ETH) Zurich. | |
17 | 16 |
18 This program is free software; you can redistribute it and/or modify | 17 This program is free software; you can redistribute it and/or modify |
19 it under the terms of the GNU General Public License as published by | 18 it under the terms of the GNU General Public License as published by |
20 the Free Software Foundation; either version 2 of the License, or | 19 the Free Software Foundation; either version 2 of the License, or |
21 (at your option) any later version. | 20 (at your option) any later version. |
22 | 21 |
23 This program is distributed in the hope that it will be useful, | 22 This program is distributed in the hope that it will be useful, |
24 but WITHOUT ANY WARRANTY; without even the implied warranty of | 23 but WITHOUT ANY WARRANTY; without even the implied warranty of |
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
26 GNU General Public License for more details. | 25 GNU General Public License for more details. |
27 | 26 |
28 | 27 |
29 Package | 28 Package |
30 -------------------------------------------------------------------------- | 29 -------------------------------------------------------------------------- |
31 Since version 0.5, the tpm emulator package comprises four main parts: | 30 The tpm emulator package comprises four main parts: |
32 | 31 |
33 a) tpmd - a user-space daemon that implements the actual TPM emulator | 32 a) tpmd - a user-space application that implements the actual emulator |
34 and can be accessed by means of unix domain sockets. | 33 and can be accessed by means of Unix domain sockets (Unix) or |
| 34 named pipes (Windows). |
35 | 35 |
36 b) tpmd_dev - a kernel module that provides the device /dev/tpm for | 36 b) tpmd_dev - a kernel module that provides the device /dev/tpm for |
37 backward compatibility and forwards the received commands to tpmd. | 37 backward compatibility and forwards the received commands to tpmd |
| 38 (Unix and Mac OS X only). |
38 | 39 |
39 c) tddl - a TSS conform device driver library for the TPM emulator. | 40 c) tddl - a TSS conform device driver library for the emulator. |
40 | 41 |
41 d) tpm_dev - the (obsolete) kernel-space TPM emulator. | |
42 | |
43 | |
44 Configuration | |
45 -------------------------------------------------------------------------- | |
46 First of all, you have to make sure that the GNU MP library (http:// | |
47 www.gnu.org/software/gmp/gmp.html) is properly installed on your system; | |
48 in particular that the required shared library and header files exist | |
49 and are located within the search path of the compiler and linker. | |
50 | |
51 The compilation and installation process of the kernel modules uses the | |
52 build environment for external kernel modules of the 2.5.X Linux kernels, | |
53 which must therefore be set up properly. If you are using a pre-compiled | |
54 standard kernel of some distribution, install the appropriate kernel-source | |
55 packages and call the following commands: | |
56 | |
57 # cd /usr/src/linux | |
58 # zcat /proc/config.gz > .config | |
59 # make oldconfig | |
60 # make modules_prepare | |
61 | 42 |
62 Compilation and Installation | 43 Compilation and Installation |
63 -------------------------------------------------------------------------- | 44 -------------------------------------------------------------------------- |
64 The actual compilation and installation of the TPM emulator package is | 45 The compilation and installation of the TPM emulator package is based on |
65 done as follows: | 46 the CMake build environment (version 2.6 or better) and requires that the |
| 47 GNU MP library (version 4.0 or better) is properly installed on your |
| 48 system. A working MinGW compiler suite is further required on Windows |
| 49 (see http://www.mingw.org/). To compile and install the package execute: |
66 | 50 |
67 # tar -xvzf tpm_emulator-X.Y.tar.gz | 51 # tar -xvzf tpm_emulator-X.Y.tar.gz |
68 # cd tpm_emulator-X.Y | 52 # cd tpm_emulator-X.Y |
| 53 # mkdir build |
| 54 # cd build |
| 55 # cmake ../ |
69 # make | 56 # make |
70 # make install | 57 # make install |
71 | 58 |
72 Please note that the user and group 'tss' must exists on the target host. | 59 The script files build.sh and build.bat automate this process. |
| 60 |
| 61 On Windows, the TPM emulator system service has additionally to be |
| 62 registered by calling: |
| 63 # control_tpmd.bat install |
| 64 |
| 65 MTM support can be enabled by replacing |
| 66 # cmake ../ |
| 67 with |
| 68 # cmake ../ -DMTM_EMULATOR=ON |
73 | 69 |
74 | 70 |
75 Startup | 71 Startup |
76 -------------------------------------------------------------------------- | 72 -------------------------------------------------------------------------- |
77 In order to use the TPM emulator, one has to start the TPM emulator daemon | 73 In order to use the TPM emulator on Unix or Mac OS X, one has to start the |
78 and, if required, load the TPM device forwarding module. The startup mode | 74 TPM emulator daemon and load the TPM device forwarding module. On Linux, |
79 of the TPM (see TPM Spec. Part 1) is defined by the startup mode argument | 75 this is done by executing: |
80 and can either be set to clear, save (default) or deactivated. | |
81 | 76 |
82 # modprobe tpmd_dev | 77 # modprobe tpmd_dev |
83 # tpmd save | 78 # tpmd |
84 | 79 |
85 Furthermore, the argument -d enables debug mode, -f forces the emulator | 80 On Windows, the TPM emulator service can either be started with the |
86 to run in the foreground, and -h print the following help message: | 81 Microsoft Management Console or with the control_tpmd.bat script: |
87 | 82 |
88 usage: tpmd/tpmd [-d] [-f] [-h] [startup mode] | 83 # control_tpmd.bat start |
| 84 # control_tpmd.bat status |
| 85 |
| 86 The startup mode of the TPM (see TPM Spec. Part 1) is defined by the |
| 87 startup mode argument and can either be set to clear, save (default) |
| 88 or deactivated. Additionally supported arguments are |
| 89 |
| 90 usage: tpmd [-d] [-f] [-s storage file] [-u unix socket name] |
| 91 [-o user name] [-g group name] [-h] [startup mode] |
89 d : enable debug mode | 92 d : enable debug mode |
90 f : forces the application to run in the foreground | 93 f : forces the application to run in the foreground |
| 94 s : storage file to use (default: /var/lib/tpm/tpm_emulator-1_2_0_7) |
| 95 u : unix socket name to use (default: /var/run/tpm/tpmd_socket:0) |
| 96 o : effective user the application should run as |
| 97 g : effective group the application should run as |
91 h : print this help message | 98 h : print this help message |
92 startup mode : must be 'clear', 'save' (default) or 'deactivated | 99 startup mode : must be 'clear', 'save' (default) or 'deactivated |
93 | 100 |
| 101 and |
| 102 |
| 103 usage: tpmd.exe [-d] [-f] [-s storage file] [-u windows pipe name] |
| 104 [-l log file] [-h] [startup mode] |
| 105 d : enable debug mode |
| 106 f : forces the application to run in the foreground |
| 107 s : storage file to use (default: |
| 108 C:/Program Files/TPM_Emulator/tpm_emulator-1_2_0_7) |
| 109 u : windows named pipe name to use (default: //./pipe/tpmd:0) |
| 110 l : name of the log file (default: C:/Program Files/TPM_Emulator/tpmd.log) |
| 111 h : print this help message |
| 112 startup mode : must be 'clear', 'save' (default) or 'deactivated |
| 113 |
| 114 on Unix and Windows, respectively. |
| 115 |
94 If the emulator is started in mode save and fails to load a previously | 116 If the emulator is started in mode save and fails to load a previously |
95 stored TPM state, it will go into fail-stop mode and has to be reloaded. | 117 stored TPM state, it will go into fail-stop mode and has to be reloaded. |
96 Therefore, the first time the TPM emulator is started, the argument must | 118 Therefore, the first time the TPM emulator is started, the argument must |
97 be set to 'clear'. Recovering a TPM emulator that is in fail-stop mode | 119 be set to 'clear'. Recovering a TPM emulator that is in fail-stop mode |
98 is done by first deactivating it and then reloading it in mode 'clear': | 120 is done by first deactivating it and then reloading it in mode 'clear': |
99 | 121 |
100 # tpmd deactivated | 122 # tpmd deactivated |
101 # killall tpmd | 123 # killall tpmd |
102 # tpmd clear | 124 # tpmd clear |
103 | 125 |
104 | 126 |
105 Usage and Backward Compatibility | 127 Usage and Backward Compatibility |
106 -------------------------------------------------------------------------- | 128 -------------------------------------------------------------------------- |
107 The most correct and convenient way to access the tpm emulator is to use | 129 The most correct and convenient way to access the tpm emulator is to use |
108 the provided device driver library (tddl). For a comprehensive description | 130 the provided device driver library (tddl). For a comprehensive description |
109 of its functionality we refer to the official TCG specification (see | 131 of its functionality we refer to the official TCG specification (see |
110 https://www.trustedcomputinggroup.org/specs/TSS), an example of use is | 132 https://www.trustedcomputinggroup.org/specs/TSS), an example of use is |
111 given by the test application tddl/test_tddl. | 133 given by the test application tddl/test_tddl. |
112 | 134 |
113 For backward compatibility with existing applications, the kernel module | 135 Note that on Windows the tddl is called ifxtpm.dll as many applications |
114 tpmd_dev forwards any command sent to the device /dev/tpm to the tpm | 136 (e.g., TPM/J) expect this name and do not support alternative drivers. |
115 emulator daemon. In order to access the emulator directly (i.e., without | 137 |
116 using the device driver library or the device dev/tpm) all one has to do | 138 For backward compatibility with existing Unix applications, the kernel |
117 is to include the header files sys/socket.h and sys/un.h and to replace | 139 module tpmd_dev forwards any command sent to the device /dev/tpm to the |
118 the open("/dev/tpm") call with something like: | 140 tpm emulator daemon. In order to access the emulator directly (i.e., |
| 141 without using the device driver library or the device dev/tpm) all one |
| 142 has to do is to include the header files sys/socket.h and sys/un.h and |
| 143 to replace the open("/dev/tpm") call with something like: |
119 | 144 |
120 struct sockaddr_un addr; | 145 struct sockaddr_un addr; |
121 fh = socket(PF_UNIX, SOCK_STREAM, 0); | 146 fh = socket(PF_UNIX, SOCK_STREAM, 0); |
122 if (fh < 0) { /* handle error */ } | 147 if (fh < 0) { /* handle error */ } |
123 addr.sun_family = AF_UNIX; | 148 addr.sun_family = AF_UNIX; |
124 strncpy(addr.sun_path, "/var/run/tpm/tpmd_socket:0", sizeof(addr.sun_path)); | 149 strncpy(addr.sun_path, "/var/run/tpm/tpmd_socket:0", sizeof(addr.sun_path)); |
125 res = connect(fh, (struct sockaddr*)&addr, sizeof(struct sockaddr_un)); | 150 res = connect(fh, (struct sockaddr*)&addr, sizeof(struct sockaddr_un)); |
126 if (res < 0) { /* handle error */ } | 151 if (res < 0) { /* handle error */ } |
127 | 152 |
128 All subsequent calls of read(), write(), and close() should work as | 153 All subsequent calls of read(), write(), and close() should work as |
129 expected. | 154 expected. |
130 | 155 |
131 | 156 |
| 157 Usage Examples for TPM/J |
| 158 -------------------------------------------------------------------------- |
| 159 |
| 160 === Linux |
| 161 # modprobe tpmd_dev |
| 162 # tpmd -d |
| 163 |
| 164 # cd <path to tpmj>/lib |
| 165 # export CLASSPATH=tpmj.jar:bcprov-jdk15-131.jar:$CLASSPATH |
| 166 # java edu.mit.csail.tpmj.tools.TPMInfo |
| 167 |
| 168 |
| 169 === Mac OS X |
| 170 # sudo kextload /System/Library/Extensions/tpm_bridge.kext |
| 171 # sudo tpmd -d |
| 172 |
| 173 # cd <path to tpmj>/lib |
| 174 # export CLASSPATH=tpmj.jar:bcprov-jdk15-131.jar:$CLASSPATH |
| 175 # sudo java edu.mit.csail.tpmj.tools.TPMInfo |
| 176 |
| 177 |
| 178 === Windows |
| 179 # set PATH=%PROGRAMFILES%\TPM_Emulator;%PATH% |
| 180 # set PATH=%PROGRAMFILES%\TPM_Emulator\lib;%PATH% |
| 181 # control_tpmd.bat start |
| 182 |
| 183 # cd <path to tpmj>\lib |
| 184 # set CLASSPATH=tpmj.jar;bcprov-jdk15-131.jar:%CLASSPATH% |
| 185 # java edu.mit.csail.tpmj.tools.TPMInfo |
| 186 |
| 187 |
132 Notes | 188 Notes |
133 -------------------------------------------------------------------------- | 189 -------------------------------------------------------------------------- |
| 190 * Since release 0.7 the emulator also runs on Darwin (Mac OS X) and on |
| 191 Windows; thanks go to Amit Singh and Domenic Schröder. In addition, |
| 192 the emulator now also supports MTM emulation; thanks go to Jan-Erik |
| 193 Ekberg and Markku Kylänpää from Nokia. |
134 * Since release 0.5.1 the emulator supports Free- and OpenBSD; thanks go | 194 * Since release 0.5.1 the emulator supports Free- and OpenBSD; thanks go |
135 to Sebastian Schuetz. | 195 to Sebastian Schuetz. |
136 * Since release 0.5 the kernel-based emulator (tpm_dev) is obsolete. | 196 * Since release 0.5 the kernel-based emulator (tpm_dev) is obsolete. |
137 * The name and format of the persistent-storage file has changed between | 197 * The name and format of the persistent-storage file has changed between |
138 release 0.2 and 0.3 as well as between release 0.4 and 0.4.1. | 198 release 0.2 and 0.3, 0.4 and 0.4.1., 0.5 and 0.6, and 0.6 and 0.7. |
139 * The DAA support was tested with the IBM DAA Test Suite and should work | 199 * The DAA support was tested with the IBM DAA Test Suite and should work |
140 now as expected. Thanks go to Roger Zimmermann for his kindly help. | 200 now as expected. Thanks go to Roger Zimmermann for his kindly help. |
141 | 201 |
142 | 202 |
143 Contact | 203 Contact |
144 -------------------------------------------------------------------------- | 204 -------------------------------------------------------------------------- |
145 Any comments, suggestions and bug reports are welcome. Please, mention | 205 Any comments, suggestions and bug reports are welcome. Please, mention |
146 the keyword 'TPM emulator' in the subject. | 206 the keyword 'TPM emulator' in the subject. |
147 Mario Strasser <mast@gmx.net> | 207 Mario Strasser <mast@gmx.net> |
148 | 208 |
OLD | NEW |