【tpm_emulator】Ubuntu 16.10 / 樹莓派3 安裝TPM_emulator(已成功)2017-7-14更新

歡迎訪問 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的,
所以在makemake 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 functiontpmd_handle_command’:
/home/pi/Desktop/tpm-emulator-master/build/tpmd_dev/linux/tpmd_dev.c:143:9: error: too many arguments to functionsock_recvmsgres = 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下載)~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章