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 |