TPM은 TCG(Trusted Computing Group)에서 만든 것으로 중요한 자료를 안전하게 보호하기 위해 사용됩니다. TPM에 대한 내용은 다음에 차차 다루기로 하고 이번에는 TPM을 사용하는 법에 대해 얘기해보고자 합니다. 


여기서는 debian 환경을 기준으로 정리해보겠습니다.  먼저 TPM을 사용하기 위해서는 관련 패키지들을 설치해 줘야 합니다. 

libtspi-dev, trousers, tpm-tools 을 설치해 줍시다. 


$ sudo apt-get install  libtspi-dev  trousers  tpm-tools


tpm-tools 패키지 안에는 커맨드로 TPM 정보를 읽거나 설정 하는게 가능한 실행 파일들이 존재합니다. 

1.3.7 버전 기준으로 다음과 같습니다. 


tpm_nvread, tpm_changeownerauth, tpm_setoperatorauth, tpm_selftest, tpm_getpubek

tpm_clear, tpm_setpresence, tpm_resetdalock, tpm_restrictpubek, tpm_setclearable

tpm_revokeek, tpm_createek, tpm_nvinfo, tpm_nvrelease, tpm_version, tpm_setownable

tpm_nvwrite, tpm_nvdefine, tpm_setenable, tpm_setactive, tpm_takeownership, tpm_restrictsrk



이제 TPM을 사용하기 위한 초기화 과정을 알아봅시다. 

(명령별로 지정해준 옵션은 해당 명령에 '-h' 옵션을 주면 설명을 볼 수 있습니다. )


먼저, TPM이 정상적으로 인식되는지 확인 해 봅시다. 


$ tpm_version 

  TPM 1.2 Version Info:

  Chip Version:        1.2.37.13

  Spec Level:          2

  Errata Revision:     2

  TPM Vendor ID:       ATML

  TPM Version:         01010000

  Manufacturer Info:   41XXXXX


버전 정보가 제대로 출력되지 않는 다면 TPM이 정상적으로 설치 되지 않았다는 의미입니다. 



TPM을 사용하기 위해서는 궁극적으로는 tpm_takeownership 명령을 수행해 줘야 합니다. 

하지만, 처음 이 명령을 실행하면  다음과 같은 오류가 연쇄적으로 발생하게 됩니다. 


$ tpm_takeownership 


Tspi_TPM_TakeOwnership failed: 0x00000006 - layer=tpm, code=0006 (6), TPM is deactivated

activate되어 있지 않는 다는군요. 


$ tpm_setactive -a 


Tspi_TPM_SetStatus failed: 0x00000007 - layer=tpm, code=0007 (7), TPM is disabled

enable되어 있지 않다고 합니다. 


$ tpm_setenable -e -f 


Tspi_TPM_SetStatus failed: 0x0000002d - layer=tpm, code=002d (45), Bad physical presence value

persence를 해줘야 할것 같군요. 


$ tpm_setpresense -a 


Tspi_TPM_SetStatus failed: 0x0000002d - layer=tpm, code=002d (45), No SRK 

SRK(Storeage Root Key)가 없다고 합니다. SRK는 takeownership을 해줘야 생성됩니다. 결국, 문제는 다시 원점으로 오게 됩니다. 



이를 해결하기 위한 절차는 다음과 같습니다. 


먼저 run level을 single user mode로 변경해 줘야 합니다. 

그렇지 않고 tpm_setenable 명령어를 수행해 보면 


$ tpm_setenable -e -f 


Tspi_TPM_SetStatus failed: 0x0000002d - layer=tpm, code=002d (45), Bad physical presence value 처럼 오류가 발생합니다.


$sudo init 1


자.. run level을 변경한 후..  다시 해보면 .. 


Tspi_Context_Connect failed: 0x00003011 - layer=tsp, code=0011 (17), Communication failure와 같은 오류가 발생하게 됩니다.

trousers 서비스를 시작 시켜줘야 합니다.


$sudo service trousers start


toursers를 실행 해 주고.. 다시 enable을 시켜 줍시다. 


$ tpm_setenable -e -f


만약, 이 때 Tspi_TPM_SetStatus failed: 0x0000002d - layer=tpm, code=002d (45), Bad physical presence value 와 같은 오류가 여전히 발생 한다면..  setpresence 명령어를 실행해 줘야 합니다. 


$ tpm_setpresence -a


별 에러 없이 수행이 완료되면 성공! 다시 한 번 enable해주고..


$ tpm_setenable -e -f


enable이 성공했다면 활성화를 시켜 줍니다. 


$ tpm_setactive -a


정상적으로 active 가 되었다면 .. 'Action requires a reboot to take effect' 이런 메시지가 나옵니다.  리부팅을 시켜줍니다. 


$ sudo reboot


이제 takeownership을 해봅시다. 


$ tpm_takeownership


Tspi_TPM_TakeOwnership failed: 0x00000023 - layer=tpm, code=0023 (35), No EK 와 같은 오류가 발생한다면.. EK(Endorsement Key)가 없다고 하니 EK를 먼저 생성해 줍시다. 


$ tpm_createek


Tspi_TPM_TakeOwnership failed: 0x00002004 - layer=tcs, code=0004 (4), Internal software error 와 같은 에러 메시지가 발생한다면..

다시 한번 reboot을 해줍시다. 


$ tpm_takeownership


오류가 발생하지 않았다면 드디어 ownership을 획득에 성공한 것입니다. 


사용하다가 설정을 다시 초기화 하고 싶다면 clear 명령을 실행하면 됩니다. 


$ tpm_clear 


이상으로 TPM을 사용하기 위한 절차를 알아봤습니다. 

Posted by KT한
,