기본적인 TPM(Trusted Platform Module) 프로그래밍에 대해 알아봅시다.
준비 단계
먼저 필요한 라이브러리들을 설치해야 합니다.
- Fedora계열
# yum install trousers tpm-tools trousers-devel
- debian 계열
$ sudo apt-get install trousers tpm-tools libtspi-dev
설치를 완료하고 난 후에는 TPM의 takeownership 명령을 수행해서 사용 권한을 획득해야 합니다. 자세한건 이전에 쓴 글을 참고하시면 됩니다.
알고 넘어가기
- TSS 아키텍처는 아래 그림과 같습니다.
Architectural overview of the TSS
TPM 프로그래밍에서는 Tspi라이브러리 들을 사용합니다.
- 다음 라이브러리들은 미리 추가해 두고 시작하는게 편합니다.
#include <stdio.h>
#include <string.h>
#include <tss/tss_error.h>
#include <tss/platform.h>
#include <tss/tss_defines.h>
#include <tss/tss_typedef.h>
#include <tss/tss_structs.h>
#include <tss/tspi.h>
#include <trousers/trousers.h>
- 디버깅 함수를 미리 정의해 두고 사용하면 편합니다.
#define DEBUG 1
#define DBG(message,tResult) if(DEBUG) {printf("(Line %d, %s) %s returned 0x%08x. %s.\n", __LINE__, __func__, message, tResult, Trspi_Error_String(tResult));}
tResult값은 Tspi명령을 수행한 후 리턴 받은 값을 넣어주면 됩니다.
- 프로그램 초반부에 항상 필요한 값들은 미리 알아두면 편합니다.
1. TSS_HCONTEXT
TSS_HCONTEXT hContext;
result =Tspi_Context_Create(&hContext);
result=Tspi_Context_Connect(hContext, NULL);
2. TSS_HTPM
TSS_HTPM hTPM;
result=Tspi_Context_GetTpmObject(hContext, &hTPM);
3. TSS_HKEY
TSS_HKEY hSRK;
TSS_UUID SRK_UUID = TSS_UUID_SRK;
result=Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK);
이 외의 TSS 변수들은 'include/tss/tss_typedef.h' 파일을 참고하면 됩니다.
- 모든 작업을 완료한 후에는 불필요한 자원을 해제해주면 됩니다.
Tspi_Context_Close (h objects you have created);
Tspi_Context_FreeMemory(hContext, NULL);
Tspi_Context_Close(hContext);
필요한 기능 구현하기
1. 키 생성 - 서명키(signing key)
2. 키 저장 및 로드
3. 공개키 생성 후 파일로 저장
4. 데이터 해시 (Hashing data)
5. 데이터 실링 (Sealing data)
6. 서명 및 검증 (signing and verify)
7. 랜덤 넘버 생성
즐거운 TPM 프로그래밍 하세요~
'IT 생활 > IoT(사물 인터넷)' 카테고리의 다른 글
BLE(Bluetooth Low Energy)의 특징 (8) | 2015.02.05 |
---|---|
TPM(Trusted Platform Module) 리눅스 환경에서 사용하기(초기화) (0) | 2015.02.05 |
TPM(Trusted Platform Module) - 신뢰 플랫폼 모듈 (1) | 2015.02.05 |
에디슨(Edison) 플랫폼 공개 - 인텔(Intel)의 사물인터넷(IoT) 시장을 향한 야심작 (0) | 2014.09.11 |