배경 지식
하드웨어의 메모리 구조
비휘발성 메모리(NVMe) : 데이터를 안전하게 보존할 수 있는 저장 공간
읽기 전용 메모리(ROM) : 고정된 데이터를 안전하게 저장하는 메모리
키 저장 과정
평문 키를 SHE 모듈에 저장해야 함
M1 to M5 계산
암호화된 키는 적절한 key slot에 저장됨
Loading keys in Secure slot
비밀 키 (Secret Key)
정의 : 반도체 제조업체가 칩 제작 과정에서 ROM에 저장하는 키
목적 : 키의 가져오기 및 내보내기 작업에 사용.
마스터 키 (Master Key)
정의 : 신뢰의 루트(Root of Trust) 역할을 하며, 비휘발성 메모리(NVMe) 슬롯에 저장. ECU 소유자나 OEM이 소유하고 관리
목적 :
다른 키(예: Key 1 ~ Key N)를 재설정하거나 변경
새로운 키를 로드하는 과정에서 필수
부트 키 (Boot Key)
정의 : 보안 부팅 과정에서 소프트웨어의 진위성을 확인하는 데 사용.
목적 :
부트 로더의 MAC(Message Authentication Code)을 검증.
부트 MAC은 부트 로더의 무결성을 보장하며, 마스터 키나 부트 MAC 키를 통해 기록 가능
RAM 키
정의 : 개발 단계에서 임시로 사용되는 키
평문 형태로 저장되며, 전원이 꺼지면 삭제됨
목적 :
암호화/복호화, HMAC 생성 및 검증 등의 작업을 간소화
빠른 개발 및 테스트 환경 제공
SHE 키
정의 : Key 1 ~ Key N(일반적으로 0~20 범위)의 키로 구성
목적 :
암호화/복호화, HMAC 생성 및 검증 등 다양한 보안 작업 수행
NVMe에 저장되며 마스터 키를 통해 관리
주요 키 관리 절차
마스터 키 변경
초기 마스터 키(비밀 키로 설정됨)가 필요
초기 마스터 키 없이 새 마스터 키를 작성하거나 변경 불가
새 키 로드
마스터 키를 사용하여 새 키를 회로 슬롯에 로드
잘못된 마스터 키로 로드 시 작업이 거부됨
키 재설정
마스터 키를 사용해 Key 1 ~ Key N을 재설정 가능
-> 쉽게 말해 마스커 키가 검증이 되어야 Key 1 - KeyN 을 안전하게 로드할 수 있음
-> 즉, 비밀 키 → 마스터 키 → Key 1 ~ Key N으로 이어지는 계층적 구조를 통해 보안이 유지됨
M1 to M5 계산 과정
M1~M5 메시지는 대칭 키를 NVMe에 안전하게 로드하는 과정에서 무결성과 기밀성을 보장하는 핵심 요소
여기서 K1 - K4 키는 칩 생산 시 제조업체에 의해 설정되고, 모든 키는 ECU 내부에서만 사용 (외부 접근X)
각 키는 각자 담당한 보안 작업이 있어서 다음과 같은 방식으로 순차적으로 키 로딩을 해야함
( Autosar Secure Hardware Extension 문서 에서 디테일한 내용 확인 가능 )
M1: Key Update Request (키 업데이트 요청)
역할 : 키 업데이트 요청 메시지
작동 방식 : 호스트에서 ECU로 전송하여 키 업데이트를 트리거
UID (Unique Identifier): 업데이트할 ECU를 식별하는 고유 ID
키 식별자: 새 키를 저장할 키 슬롯(예: Key 1)을 지정
비밀 키 식별자: 기존 마스터 키를 식별
M2: Encrypted Key Transfer (키 암호화 및 전송)
역할 : 키 전송 시 암호화 수행
작동 방식 : K1 키를 사용해 대칭 키를 암호화, 암호화된 상태로 키를 전송하여 기밀성 유지
새 키와 CID (Class Identifier), FID (Function Identifier)를 포함한 데이터를 암호화
암호화에는 ECU에 미리 저장된 K1 키와 CBC 모드의 초기화 벡터(IV)를 사용
K1 : 칩 제조사에 의해 사전에 ECU에 로드된 임베디드 키
CID : 키가 수행할 작업(예: 데이터 인증, 보안 부트 관리 등)을 나타냄
FID : 현재 함수의 식별자로, 작업 유형(예: 키 추가, 업데이트 등)을 지정
결과 : 암호화된 새 키를 M2 메시지로 ECU에 전송
M3: CMAC : Integrity Check (무결성 체크)
역할 : CMAC 계산을 통해 키의 무결성 확인
작동 방식 : K2 키를 사용해 HMAC 또는 CMAC 계산
M1과 M2 메시지를 연결(concatenate)하여 CMAC (Cipher-based Message Authentication Code) 생성
K2 키를 사용하여 CMAC 계산
ECU가 동일한 방식으로 CMAC을 계산하고 비교
결과 : CMAC 값이 일치하면 새 키 로딩 계속 진행, 값이 다르면 프로세스 중단(데이터 변조 가능성)
M4: ECU-to-Host Confirmation (키 업데이트 확인)
역할 : ECU에서 호스트로의 키 업데이트 확인 메시지 전송
작동 방식 : K3 키를 사용해 M3 결과를 확인하고 이를 호스트에 알림
CID(이전 작업의 카운터 값)와 관련 데이터를 K3 키로 암호화
CID는 각 작업마다 증가하여 replay attack 방지
암호화된 데이터를 M4 메시지로 전송
결과 : ECU가 호스트에 기밀성 보장된 확인 메시지를 보냄
M5: Final ECU Confirmation (최종 무결성 확인)
역할 : HMAC 계산을 통해 M4 메시지의 무결성을 보장
작동 방식 : K4 키를 사용해 최종 확인 수행
M4 메시지에 대해 K4 키로 MAC 계산
호스트와 ECU가 각각 계산한 MAC 값을 비교
결과 : MAC 값이 일치하면 키 로딩 완료, 값이 다르면 로딩 실패 처리
-> 이와 같이 SHE에서의 키 로딩 과정에서는 키가 항상 암호화되어 전송되며, 각 단게별로 무결성과 기밀성이 반복적으로 검증되는 것을 알 수 있음
SHE 에서의 Key Update
PKI (Public Key Infrastructure)와 PCA 역할
PKI: 키 관리를 위한 기본적인 인프라PCA (Public Certificate Authority): M1, M2, M3 메시지를 ECU로 전송하여 키 업데이트를 시작
M1 (Key Update Request) : 키 업데이트 요청
M2 (Encrypted Key Transfer) : 암호화된 키를 ECU로 전송
M3 (MAC for Integrity Check) : M1과 M2 메시지의 무결성을 확인하는 MAC
ECU의 역할
M4, M5 생성: ECU는 M1~M3 메시지를 수신한 후 M4, M5 메시지를 생성
M4 : 호스트 확인 메시지(Host Confirmation)
M5 : ECU 확인 메시지(Final ECU Confirmation)
M4, M5 전송 :
ECU는 M4, M5 메시지를 PCA 또는 보안 서버(Security Server)에 전송하여 키 업데이트가 성공적으로 완료되었음을 증명
키 업데이트 검증
PCA 또는 보안 서버는 M4, M5 메시지를 기반으로 키 업데이트의 성공 여부를 검증
키 업데이트 시 다양한 인프라 활용
PKI 서버(Public Key Server) 기반
PCA가 M1~M3 메시지를 생성하여 ECU로 전송
ECU가 M4, M5 메시지를 생성하여 PCA로 반환
PCA는 이 메시지들을 통해 키 업데이트의 성공 여부를 검증
키 인젝션 도구(Key Injection Tool) 기반
PK 서버가 없는 경우, 로컬 키 인젝션 도구가 M1~M3 메시지 생성 및 ECU로의 전송을 담당
ECU는 동일하게 M4, M5 메시지를 생성하여 키 인젝션 도구에 반환
키 인젝션 도구가 이를 검증하여 키 업데이트의 성공 여부를 확인
즉, 키 업데이트 프로세스를 요약하자면,
M1~M3 : PCA 또는 키 인젝션 도구에서 생성
M4, M5 : ECU에서 생성하여 PCA 또는 키 인젝션 도구로 반환
-> 인프라(PK 서버 vs. 키 인젝션 도구)의 차이만 있을 뿐, 프로세스의 본질은 동일하다는 것을 알 수 있음
키 교환 알고리즘 (Diffie-Hellman Algorithm)
문제 정의
디피-헬만 알고리즘은 대칭 키 알고리즘에서 비밀 키를 안전하게 공유하기 위한 수단으로 함께 사용
만난 적 없는 사람과 키를 공유하기 위해 정보를 안전하게 교환하려면 어떻게 해야 할까?
비보안 채널을 통해 대칭 키를 보내야 할 경우에는?
-> 디피-헬만 알고리즘은 이러한 문제를 해결하기 위해 고안된 키 교환 알고리즘으로, 비보안 채널을 통해 대칭 키를 안전하게 공유 할 수 있도록 지원
디피-헬만 알고리즘의 작동 원리
두 사용자, 예를 들어 A와 B가 있다고 가정. 이 둘은 키 교환에 참여하며 각각 자신만의 개인 키 보유
A 개인 키 X : 3
B 개인 키 Y : 6
1) 공통값 설정
키 교환을 위해 공통의 공개값이 필요한데, 여기에는 두 가지 중요한 요소가 포함됨
g : 공개된 기본값(예: 7)
n : 모듈러 값(예: 11)
이 값들은 두 당사자 간에 사전에 합의
2) 개인 키와 공통값을 사용하여 각자의 공개 키를 생성
A의 공개키 계산 :
B의 공개 키 계산 :
3) 공유 비밀 키 계산
A 의 계산과정 :
B 의 계산과정 :
-> 이렇게 계산된 공유 비밀 키는 양측에서 동일한 값(9)을 가짐. 이 비밀 키는 이후 대칭 암호화 알고리즘에서 사용할 수 있음
그렇다면 왜 안전한 걸까?
- 우선, 공개 키와 공통값(g, n)은 네트워크를 통해 공유
- 그러나 개인 키는 공개되지 않으며, 이 값을 모르면 공유 비밀 키를 계산할 수 없음
- 공유 키를 계산하기 위해서는 이산 로그 문제를 풀어야 하는데, 이는 계산적으로 매우 어려움
- g^x mod n 에서 x 를 구하는 것은 큰 소수일수록 난이도가 높아짐
'ComputerScience & Embedded > Automotive & Cybersecurity' 카테고리의 다른 글
자동차의 계층적 보안 구조 (0) | 2025.02.27 |
---|---|
AUTOSAR Crypto stack (Sec OC, CSM, CRY, CRYIF) (0) | 2025.02.27 |
HSM (Hardware Security Module), SHE (Secure Hardware Engine) (0) | 2025.02.27 |
공개 키 인프라 : PKI (Public Key Infrastructure) / 디지털 인증서 (Digital Certificate) (0) | 2025.02.27 |
디지털 서명 (Digital Signature) (0) | 2025.02.27 |