歡迎訪問 https://gscsnm.github.io/
0. 序
最近搞可信計算方面,需要使用tpm模擬器,查閱不少資料,也看到了網上各位的教程。現將自己的安裝步驟寫個備註,方便自己查看。也希望對看官有所幫助。開幹。
—原創水印:http://blog.csdn.net/gscsnm—
1. 環境
vmware 12
Ubuntu 16.10 桌面版 (服務器版也行)
2. 安裝cmake
sudo apt-get install cmake
3. 安裝GNU MP library
兩種方式安裝:apt-get 、源碼
3.1 apt-get 安裝 (推薦)
3.1.1 切換用戶到root(原諒我……):
su
3.1.2 搜索libgmp:
apt-cache search libgmp
3.1.3 上圖中很多gmp的庫,我安裝的是libgmp3-dev:
apt-get -y install libgmp3-dev
3.2 源碼安裝
官網:https://gmplib.org/
下載 gmp-5.0.5.tar.bz2
tar -jxf gmp-5.0.5.tar.bz2
./configure
make
make check
make install
具體可以看INSTALL和README。
4. 安裝TPM_emulator
官網應該是: https://developer.berlios.de ,現在已經打不開了。
我GitHub上有源碼,tpm_emulator-0.7.4:
https://github.com/gscsnm/tpm-emulator
這個是我從PeterHuewe那兒fork的,用這個就行,這個是修改後的,如果用官方的話,會報錯。
原因:tpm_emulator還是2011年那會兒開發的,那會linux內核還是3.xxx ,現在linux內核更新後,net.h裏面的一些函數也進行了更新,所以報錯。
—原創水印:http://blog.csdn.net/gscsnm—
4.1 下載
https://github.com/gscsnm/tpm-emulator/archive/master.zip
wget https://github.com/gscsnm/tpm-emulator/archive/master.zip
4.2 解壓
unzip master.zip
如果沒有unzip,請安裝。apt-get install unzip
4.3 安裝
cd tpm-emulator-master/
mkdir build;cd build
cmake ../
make
sudo make install
----
make install的時候需要root權限複製文件。
參考README文件
** 如果遇到錯誤,看文章結尾的錯誤記錄。 **
4.4 初始化、啓動TPM_emulator
初始化tpm:
tpmd deactivated
killall tpmd
tpmd clear
啓動tpm:
depmod -a
modprobe tpmd_dev
tpmd -f -d
tpmd -h:可以查看啓動參數
如果啓動出錯,可以用 tpmd –f –d clear
錯誤:failed: address already in use
解決:運行命令rm /var/run/tpm/tpmd_socket:0
如果成功,會不斷打印:
Debug: waiting for connections…
tpm_emulator 安裝成功。
5. 安裝TSS協議棧
這裏指的是Trousers。Trousers是一個開源可信計算軟件棧,它從下到上依次爲TDDL(驅動庫)、TCS(核心服務)、TSP(服務提供者),tcsd是編譯完畢之後的一個用戶態可執行文件,作爲守護進程運行。tcsd需在系統啓動初始化階段運行,這樣以後所有要操作tpm的程序都必須經過TSS棧,這也是TCG規範所規定的。TDDL負責唯一打開TPM設備,實現打開、關閉、收發指令數據、獲取版本信息等,TCS提供核心服務,調用TDDL。TSP是給上層程序的接口,用戶可以編寫應用程序利用這些接口,實現操作TPM。
—原創水印:http://blog.csdn.net/gscsnm—
5.1 安裝trousers
下載地址:
https://sourceforge.net/projects/trousers/files/
下載3.14版本:
https://sourceforge.net/projects/trousers/files/trousers/0.3.14/trousers-0.3.14.tar.gz/download
5.1.1 解壓:
mkdir trousers
cd trousers
tar -xzvf trousers-0.3.14.tar.gz
5.1.2 安裝依賴:
看README:
Packages needed to build:
automake > 1.4
autoconf > 1.4
pkgconfig
libtool
gtk2-devel
openssl-devel >= 0.9.7
pthreads library (glibc-devel)
挨個兒安裝:
用apt-get install 安裝,可以先用apt-cahce search 搜索定位一下。
能裝多少就裝多少吧,不裝感覺也沒事,沒出錯。
我安裝了:
apt-get install -y automake1.9 autoconf2.64 pkgconf pkg-config libtool gtk2-engines openssl libssl-dev glibc-doc
5.1.3 編譯安裝前,需要把它的tddl庫改成tpm_emulator提供的庫,修改幾個文件:
5.1.3.1 修改./src/tcsd/Makefile.am
:
第4行:
tcsd_LDADD=${top_builddir}/src/tcs/libtcs.a ${top_builddir}/src/tcs/libtddl.so -lpthread @CRYPTOLIB@
修改爲:
tcsd_LDADD=${top_builddir}/src/tcs/libtcs.a /usr/local/lib/libtddl.so -lpthread @CRYPTOLIB@
5.1.3.2 修改./src/tcsd/Makefile.in
:
第55,56行:
tcsd_DEPENDENCIES = ${top_builddir}/src/tcs/libtcs.a \
${top_builddir}/src/tddl/libtddl.a
修改爲:
tcsd_DEPENDENCIES = ${top_builddir}/src/tcs/libtcs.a \
/usr/local/lib/libtddl.so
注:上面修改中的/usr/local/lib/
路徑,需要根據libtddl.so文件位置決定。
另:該版本文件夾中沒有bootstrap,因此省略sh bootstrap.sh
步驟
5.1.4 編譯安裝
./configure
make
make install
問題:
1) ./configure
後報錯:
configure: error: openssl is currently the only supported crypto library for trousers.
Please install openssl from http://www.openssl.org or the -devel package from your distro
解決:
安裝openssl-devel:
sudo apt-get install openssl
sudo apt-get install libssl-dev
2)本來還有的,結果沒記錄。。(⊙﹏⊙)b 不過大家應該不會遇到。。
5.1.5 啓動tcsd
先開一個終端,啓動TPM_emulator。參考上文。
再開一個終端,啓動tcsd。
#tcsd -e -f
在啓動TCSD之前,必須先啓動tpm-emulator,否則會提示找不到設備.
如果提示如下,運行tpm的時候加上clear:tpmd -f -d clear
:
TCSD TDDL ioctl: (25) Inappropriate ioctl for device
TCSD TDDL Falling back to Read/Write device support.
TCSD TCS ERROR: TCS GetCapability failed with result = 0x1c
5.2 安裝tpm-tools
apt-get install tpm-tools
5.3 檢測安裝是否成功
先開一個終端,啓動TPM_emulator。參考上文。
再開一個終端,啓動tcsd。參考上文。
再開一個終端,運行下面命令。
在/usr/sbin目錄下有3個關於tpm的命令運行如下
cd /usr/sbin
./tpm_version #查看版本號
./tpm_getpubek #查看ek公鑰
./tpm_takeownership #獲取owner
注:如果都成功表明TPM模擬環境已經完全構建成功了。
6 與TPM_emulator交互
下載read.c 和 read_change.c文件,linux下編譯運行。
下載地址:http://download.csdn.net/download/gscsnm/9898726
步驟:
1.一個終端運行TPM_emulator
2.一個終端運行trousers
3.在新開一個終端:
編譯 read.c
gcc read.c -o read -ltspi
運行read
./read
如果報錯:
./read: error while loading shared libraries: libtspi.so.1: cannot open shared object file: No such file or directory
則需要添加 /usr/local/lib 到 /etc/ld.so.conf file :
echo "/usr/local/lib" >>/etc/ld.so.conf
重新運行ok!
read_change.c 一樣~~
7 安裝過程中,錯誤記錄(後補)
7.1 安裝TPM_emulator
(樹莓派3 Linux raspberrypi 4.9.35-v7+ 安裝的使用遇到的問題 )
1)make,到98%出錯。
—原創水印:http://blog.csdn.net/gscsnm—
提示:
make[4]: *** /lib/modules/4.9.35-v7+/build: No such file or directory. Stop.
不一定是 4.9.35-v7+ ,中間這個是你自己內核的版本號。可以用`uname -r `查看。
原因及解決辦法:
查看該目錄下是否有build:
cd /lib/modules/4.9.35-v7+/
如果沒有的話,再查看/usr/src下是否有linux-headers-*:
cd /usr/src
如果沒有linux-headers,那麼安裝linux-headers:
安裝這個請不要用國內的各大鏡像,
因爲可能沒有最新的linux-headers。
我後來用樹莓派安裝tpm,
版本是Linux raspberrypi 4.9.35-v7+,
如果用國內的apt-get源安裝的話,
就沒有對應的linux-headers。
用`#deb-src http://archive.raspberrypi.org/debian/ jessie main ui`
這個源進行安裝linux-headers.
sudo apt-get install raspberrypi-kernel-headers
重新 cmake ,make install。
OK!
2) make,到98%出錯。
—原創水印:http://blog.csdn.net/gscsnm—
提示:
Makefile:628: arch/armv7l/Makefile: No such file or directory
make[4]: *** No rule to make target 'arch/armv7l/Makefile'. Stop.
原因及解決辦法:
因爲我是用樹莓派安裝的,可能tpm沒有針對 樹莓派做特殊
的makefile內容,至少是沒有armv7l的,
所以在make 和make install 的時候指定一
下架構就行了。如下:
make ARCH=arm
make install ARCH=arm
OK!
3) make,到98%出錯。
—原創水印:http://blog.csdn.net/gscsnm—
提示:
/home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c: In function ‘tpmd_handle_command’:
/home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c:143:9: error: too many arguments to function ‘sock_recvmsg’
res = sock_recvmsg(tpmd_sock, &msg, tpm_response.size, 0);
^
In file included from /home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c:25:0:
./include/linux/net.h:228:5: note: declared here
int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
原因及解決辦法:
提示說
error: too many arguments to function ‘sock_recvmsg’,
說明源碼裏sock_recvmsg函數不適配這個linux 內核版本。
也就是說這個linux內核提供的sock_recvmsg函數與
源碼裏用的不一致~~
都是樹莓派的鍋哈哈哈。。
我下了個原版的tmp_emulator源碼,然後make就過了。
地址: [http://download.csdn.net/download/gscsnm/9898586](csdn下載)~~