다수의 제어기가 신뢰할 수 있는 CA를 기반으로 암호화 된 메시지를 주고 받을 수 있도록 설계
1. CA 키 세러머니 (secp256r1)
2. 제어기 1, 2는 EC 키 쌍 생성 (secp256r1)
3. TEE 스토리지에 개인키 저장
4. 제어기 1, 2는 CSR 생성 (OID, 기기명 포함) 후 CA에 전송
5. CA에서 CSR 서명하여 각 제어기에 인증서 발급
6. 제어기 1,2에 CA 및 제어기 인증서를 하드 디스크에 저장
7. 제어기 1,2는 CA에 CRL 목록 요청 후 하드 디스크에 저장
제어기 1 Side
8. 제어기 2로 전송할 평문 생성
9. EC 임시키 생성 (secp256r1) : 1회 사용 후 폐기 (ECDHE 연산에만 사용하고, 그 결과로 세션키(HKDF)를 도출하는 용도)
10. TEE내 안전 저장소에서 개인키 로드 (2번에서 생성)
11. HKDF 인자(랜덤 salt, info(제어기1➜제어기2)) 생성 : 1회용 세션 설정을 위함.
12. HKDF 인자, 제어기1 인증서, 제어기1 임시공개키를 개인키(2번에서 생성)로 서명(SHA256withECDSA)
13. 제어기 1, 2간 세션(소켓) 생성
14. HKDF 인자, 제어기 1 인증서, 임시 공개키, 12번 값을 제어기2에 전송
제어기 2 Side
15. CA 공개키로 제어기 1의 인증서 검증 (검증 실패하면 에러 처리)
16. CRL 확인하여 폐기 여부 검사 (검사 실패하면 에러 처리)
17. 인증서 용도 확인(oid 및 인증 용도)
18. 제어기1 인증서(공개키)로 데이터 서명값 검증 (SHA256withECDSA) (검증 실패하면 에러 처리)
19. EC 임시키 생성 (secp256r1)
20. TEE내 안전 저장소에서 개인키 로드 (2번에서 생성)
21. 제어기2 인증서, 제어기2 임시공개키를 개인키(2번에서 생성) 로 서명 (SHA256withECDSA)
22. 제어기1의 임시 공개키와 제어기2의 임시 개인키로 ECDHE 공유키 유도
23. 수신한 salt, info 및 공유키를 사용하여 HKDF(HMAC-based Key Derivation Function) 세션키 유도
24. 제어기 2 인증서, 임시 공개키, 21번 값을 제어기1에 전송
제어기 1 Side
25. CA 공개키로 제어기 2의 인증서 검증 (검증 실패하면 에러 처리)
26. CRL 확인하여 폐기 여부 검사 (검사 실패하면 에러 처리)
27. 제어기2 인증서(공개키)로 데이터 서명값 검증 (SHA256withECDSA) (검증 실패하면 에러 처리)
28. 제어기2 의 임시 공개키와 제어기1의 임시 개인키로 ECDHE 공유키 유도
29. salt, info 및 공유키를 사용하여 HKDF 세션키 유도
30. 제어기2에 전송할 랜덤 IV, AAD(제어기1 기기명, timestamp, 시퀀스(리플레이 공격 대비)) 생성
31. HKDF 세션키로 평문을 AES-GCM 암호화
32. iv, aad, tag, 암호문을 개인키로 서명 (SHA256withECDSA)
33. iv, aad, tag, 암호문, 32번 값을 제어기2에 전송
제어기 2 Side
34 제어기1 인증서(공개키)로 데이터 서명값 검증 (SHA256withECDSA) (검증 실패하면 에러 처리)
35. aad 내 timestamp 검증 (10초 이내면 통과)
36. aad내 시퀀스 검증 (최근 수신된 aad의 시퀀스를 확인후, 그 다음으로 예상되는 시퀀스값이 아니면 replay 공격으로 간주)
37. AAD내 기기명과 제어기1 인증서 확장필드의 기기명이 일치하는지 확인
38. HKDF 세션키로 AES-GCM 복호화 (iv, aad, tag 사용)
39. 제어기1, 2 간 세션(소켓) 해제
'OP-TEE' 카테고리의 다른 글
[OP-TEE with QEMU] 3. 키 생성 및 AES (0) | 2025.03.13 |
---|---|
[OP-TEE with QEMU] 2. 예제 코드 컴파일 및 실행 (0) | 2025.02.26 |
[OP-TEE with QEMU] 1. 환경 구축 (0) | 2025.02.25 |
라즈베리파이5 환경 구축 (0) | 2025.02.23 |