Study

OPTEE Systemcall Hash연산

부산대보금자리 2021. 7. 25. 15:43

Systemcall 내에서 들어온 인자에 대해서 Hash값을 구하여 저장하고자 한다. 

SystemCall Handler는 /core/tee/tee_svc.c에 있다.

 

이미 구현된 코드들이 있을것이기에 해당 헤더파일을 본다.

tee_cryp_utl.h가 암호화 관련 함수들이 있을것으로 보인다. 

사용예제를 보기 위해 tee_cryp_utl.c에 있는 함수중 handler에서 쓰는것을 찾아보니 하나가 나온다.

이 함수내의 tee_hash_create ~ 관련 함수들은 

core 내의 crypto.h와 libcrpy 폴더내의 소스들을 이용한다.

함수를 보면 prop에게 고유한 uuid를 생성해주기 위한 함수인것 같다.

data 에 optee라는 고정된 문자를 넣고 sha256 해쉬함수를 거쳐서 나온것에대해 digest값을 받아오는 것 같다. 

digest값은 해쉬함수의 출력값이다.  

그리고 이 digest값은 uuid인자로 받아오고 이 인자에 적당한 연산을 하여 고유한 uuid를 갖게 하는것 같다.

이 함수를 통해 내가 입력한 어떠한 값에 대해 digest값을 얻어낼수 있을것같다. 

 

일단 구현에는 Ta user단에서 입력값을 넣어주는걸로 한다.

그리고 handler에서 해당 포인터를 받아서 처리한다음에 digest값을 리턴해줘서 확인하는것이 목표이다.

optee/optee_os/lib/libutee/tee_api.c 의 소스를 다음과 같이 바꾼다. 

optee/optee_os/lib/libutee/include/tee_api.h를 다음과 같이 바꾼다.

optee/optee_os/lib/libutee/include/utee_syscalls.h를 다음과 같이 바꾼다.

 

core/include/tee/tee_svc.h를 다음과 같이 고친다

마지막으로 core/tee/tee_svc.c의 handler를 수정하면 된다.

예제에서는 uuid가 구조체인데 해당 구조체 크기가 생각보다 커서 api안에 있는 좀 작은 구조체인 time을 가져왔다

에러

TEE_Result로 고치고 (uint_8)&digest로 고친다.

res 가 선언이 안되어있다. TEE_Result res; 추가한다. 

이후 에러는 없다.

build했으니 예제에 적용해봐야 한다.

handler안에서 함수자체는 오류가 없는데 값이 똑같이 뜬다.

아마 user에서 쓰던 메모리 영역이랑 커널에서 쓰는 영역이 달라서 그런것 같다. 

이 함수를 추가 해본다.

 

바뀐것을 확인했다.

'Study' 카테고리의 다른 글

전산직 데이터베이스 정리(ing)  (5) 2021.08.10
OPTEE pc레지스터 & secure storage(수정중)  (0) 2021.07.26
ELF파일  (0) 2021.07.25
OPTEE system call 실습  (0) 2021.07.24
ARM TrustZone 메커니즘  (2) 2021.07.22