본문 바로가기
mobilgene/Crypto

[Crypto] mobilgene에서 Crypto Primitive 설정하기

by Autosar 2026. 7. 16.
반응형

지난 글에서는 AUTOSAR Crypto Stack의 전체 구조와 Crypto Driver부터 이해해야 하는 이유를 살펴보았다.

이번 글에서는 Crypto Driver에서 가장 먼저 설정하게 되는 Primitives Container에 대해 알아보자.

 

처음 Mobilgene를 열어보면 Primitive 안에 다양한 설정 항목이 존재한다.

  • Algorithm Family
  • Algorithm Mode
  • Algorithm Secondary Family
  • Service

처음에는 각각이 어떤 의미인지 헷갈리기 쉽지만,

이 항목들을 이해하면 Crypto Driver가 어떤 암호 기능을 제공하는지 쉽게 파악할 수 있다.

 

Primitive란 무엇일까?

 

AUTOSAR에서는 Primitive를 Cryptographic Service Primitive라고 정의한다.

즉, Primitive는 단순히 AES나 SHA와 같은 알고리즘을 의미하는 것이 아니라,

"어떤 암호 서비스를 어떤 알고리즘으로 수행할 것인가"를 정의하는 설정이다.

 

예를 들어 MAC Generate 서비스를 AES-CMAC으로 수행하거나,

Hash 서비스를 SHA-256으로 수행하도록 정의한 하나의 설정이 Primitive이다.

즉, Primitive = Service + Algorithm으로 이해하면 된다.

 

Primitive에서 설정하는 항목

 

mobilgene에서 Primitive를 생성하면 일반적으로 다음과 같은 항목을 설정하게 된다.

  • Algorithm Family
  • Algorithm Mode
  • Algorithm Secondary Family
  • Service

각 항목의 역할을 살펴보자.

 

Service

 

Service는 Crypto Driver가 수행할 암호 서비스의 종류를 의미한다.

 

위에서부터 Service 종류별 간단하게 설명하면 아래와 같다.

  • AEAD_DECRYPT: AEAD(Authenticated Encryption with Associated Data) 방식으로 암호화된 데이터를 복호화하고, 함께 전달된 인증 태그(Authentication Tag)를 검증하여 데이터의 무결성과 인증을 확인한다.
  • AEAD_ENCRYPT: AEAD 방식으로 데이터를 암호화하고 인증 태그(Authentication Tag)를 생성한다. 기밀성과 무결성을 동시에 제공한다.
  • DECRYPT: 암호화된 데이터를 원래의 평문(Plaintext)으로 복호화한다.
  • ENCRYPT: 평문(Plaintext)을 암호문(Ciphertext)으로 암호화한다.
  • HASH: 입력 데이터를 고정 길이의 Hash 값으로 계산한다. Hash 값은 데이터 무결성 검증에 사용되지만, 송신자 인증 기능은 제공하지 않는다.
  • KEY_DERIVE: 기존 Key 또는 Secret으로부터 KDF(Key Derivation Function)를 이용하여 새로운 Key를 생성한다.
  • KEY_EXCHANGECALCPUBVAL: 키 교환 알고리즘(ECDH 등)에서 자신의 공개값(Public Value)을 계산한다.
  • KEY_EXCHANGECALSECRET: 상대방의 공개값을 이용하여 공유 비밀값(Shared Secret)을 계산한다.
  • KEY_GENERATE: 새로운 암호 키를 생성한다. 일반적으로 대칭키 또는 비대칭키를 생성할 때 사용된다.
  • KEY_SETVALID: 생성되거나 로드된 Key를 유효(Valid) 상태로 변경하여 이후 암호 서비스에서 사용할 수 있도록 한다.
  • MAC_GENERATE: Secret Key를 이용하여 MAC(Message Authentication Code)을 생성한다. MAC은 데이터의 무결성과 송신자 인증을 위해 사용된다.
  • MAC_VERIFY: 수신한 MAC을 다시 계산하여 비교함으로써 데이터의 무결성과 송신자 인증을 검증한다.
  • RANDOM: 암호학적으로 안전한 난수(Random Number)를 생성한다.
  • RANDOMSEED: 난수 생성기에 Seed를 제공하거나 내부 상태를 초기화한다. 일부 DRBG에서 사용된다.
  • SIGNATURE_GENERATE: 개인키(Private Key)를 사용하여 디지털 서명을 생성한다.
  • SIGNATURE_VERIFY: 공개키(Public Key)를 사용하여 디지털 서명의 유효성을 검증한다.

예를 들어 SecOC에서는 일반적으로 MAC Generate와 MAC Verify가 사용된다.

FOTA에서는 Hash와 Signature Verify가 많이 사용된다.

 

Algorithm Family

 

Algorithm Family는 Crypto Driver가 사용할 암호 알고리즘의 종류를 지정하는 설정 항목이다.

AUTOSAR에서는 다양한 알고리즘을 지원하지만, 실제 프로젝트에서는 일부 알고리즘만 사용하는 경우가 대부분이다.

 

대표적으로 자주 사용되는 Algorithm Family를 살펴보자.

  • AES: 현재 가장 널리 사용되는 대칭키 암호화 알고리즘이다. 암호화, 복호화뿐 아니라 CMAC 생성에도 사용되는 대표적인 대칭키 암호 알고리즘이다.
  • DH: Diffie-Hellman 키 교환 알고리즘이다. 두 장치가 안전하게 공유 비밀키를 생성하는 데 사용된다.
  • DRBG: Deterministic Random Bit Generator이다. 단순 난수 생성기가 아니라 Seed를 기반으로 암호학적으로 안전한 난수를 생성하는 알고리즘이다.
  • ECCNIST: NIST에서 정의한 ECC 표준 곡선 계열이다. 가장 많이 사용되는 ECC Curve 중 하나이다.
  • NOT_SET: 알고리즘이 지정되지 않았음을 의미한다.
  • PBKDF2: Password-Based Key Derivation Function 2이다. 비밀번호로부터 암호키를 생성하기 위한 KDF이다.
  • RNG: Random Number Generator이다. DRBG와 달리 구현에 따라 True RNG(TRNG) 또는 일반 RNG를 의미할 수 있다.
  • RSA: 공개키 암호화 및 디지털 서명에 사용되는 대표적인 알고리즘이다.
  • SHA2: SHA-2 계열(Hash) 알고리즘이다. SHA-224, SHA-256, SHA-384, SHA-512 등을 포함한다.

즉, 아래와 같이 설정하면 AES-CMAC 방식으로 MAC을 생성하는 암호 서비스를 정의한 것이다.

이와 같은 Primitive는 이후 CSM, CryIf를 거쳐 SecOC에서 MAC 생성 서비스로 사용될 수 있다.

 

즉, Service는 어떤 암호 서비스를 수행할 것인지(예: MAC Generate, Encrypt, Hash)를 결정한다.

Algorithm Family는 어떤 암호 알고리즘(AES, SHA-256, RSA 등)을 사용할 것인지 결정한다.

Algorithm Mode는 선택한 알고리즘을 어떤 방식(CMAC, CBC, ECB 등)으로 동작시킬 것인지 결정한다.

 

Algorithm Secondary Family

 

일부 암호 서비스는 추가적인 알고리즘 정보를 지정해야 하는 경우가 많다.

이 경우 Algorithm Secondary Family를 이용하여 세부 알고리즘을 지정한다.

 

프로젝트에 따라 사용하지 않는 경우도 있으며,

사용하는 Crypto Driver 구현에 따라 지원 여부가 달라질 수 있다.

즉, 모든 Primitive에서 반드시 설정하는 항목은 아니다.

 

Algorithm Mode

 

Algorithm Mode는 선택한 암호 알고리즘을 어떤 방식으로 동작시킬 것인지 지정하는 설정 항목이다.

 

예를 들어 같은 AES 알고리즘이라도 CMAC 방식으로 사용할 수도 있고, CTR 방식으로 사용할 수도 있다.

실무에서 자주 사용하는 Algorithm Mode는 다음과 같다.

  • CMAC: AES를 이용하여 MAC(Message Authentication Code)을 생성하는 방식이다. 데이터의 무결성과 송신자 인증을 위해 사용된다.
  • HMAC: Hash 기반의 MAC 생성 방식이다. Secret Key와 SHA 계열 Hash를 이용하여 MAC을 생성한다.
  • CTR: Counter(CNT) 값을 이용하여 데이터를 암호화하거나 복호화하는 AES 동작 방식이다. 병렬 처리가 가능하여 높은 성능을 제공한다.
  • RSASSA_PKCS1_v1_5: 가장 널리 사용되는 디지털 서명 체계 중 하나로, RSA 기반의 디지털 서명 생성 및 검증 방식이다.
  • NOT_SET: 별도의 Algorithm Mode가 필요하지 않은 경우 사용한다. Hash 계산이나 난수 생성과 같이 Algorithm Family만으로 동작하는 서비스에서 주로 사용된다.
  • CUSTOM: AUTOSAR 표준에 없는 Vendor 또는 OEM 전용 Algorithm Mode이다. 프로젝트 요구사항에 따라 별도로 구현된다.

Mobilgene에서는 선택한 Algorithm Family에 따라 설정 가능한 Algorithm Mode가 달라질 수 있으며,

프로젝트에서 사용하는 Crypto Driver 구현에 따라 지원하는 Mode도 달라질 수 있다.

 

Primitive는 어디에서 사용될까?

 

Primitive는 Crypto Driver 내부에서만 사용되는 설정이 아니다.

다음 단계에서 설명할 CryptoDriverObjects가 Primitive를 참조하여 실제 암호 서비스를 수행하게 된다.

즉, CryptoDriverObject는 Primitive를 참조하여 실제 암호 서비스를 수행하며,

CryIf와 CSM은 이러한 Crypto Driver 기능을 호출하는 구조이다.

따라서 Primitive는 Crypto Driver의 가장 기본이 되는 설정이라고 볼 수 있다.

 

실제 프로젝트에서는 어떻게 사용할까?

 

예를 들어 송신 ECU에서 SecOC가 MAC을 생성하는 경우에는 다음과 같은 Primitive를 사용할 수 있다.

항목 설정 예시

 

Algorithm Family: CRYPTO_ALGOFAM_AES

Algorithm Mode: CRYPTO_ALGOMODE_CMAC

Algorithm Secondary Family: CRYPTO_ALGOFAM_NOT_SET

Service: MAC_GENERATE

 

반대로 수신 ECU에서는 수신한 MAC을 검증하기 위해 동일한 Algorithm Family(AES)를 사용하는 MAC Verify Primitive를 별도로 정의하여 사용할 수 있다.

 

FOTA에서는 다운로드한 Firmware의 무결성과 전자서명을 검증하기 위해 Hash와 Signature Verify 서비스를 주로 사용한다.

 

예를 들어 다운로드한 Firmware의 무결성을 확인하기 위해 Firmware의 Hash를 계산하는 Primitive는 다음과 같이 구성할 수 있다.

항목 설정 예시

 

Algorithm Family: CRYPTO_ALGOFAM_SHA2_256

Algorithm Mode: CRYPTO_ALGOMODE_NOT_SET

Algorithm Secondary Family: CRYPTO_ALGOFAM_ NOT_SET

Service: HASH

 

Firmware의 전자서명을 검증하는 Primitive는 다음과 같이 구성할 수 있다.

항목 설정 예시

 

Algorithm Family: CRYPTO_ALGOFAM_RSA

Algorithm Mode: CRYPTO_ALGOMODE_RSASSA_PKCS1_v1_5

Algorithm Secondary Family: CRYPTO_ALGOFAM_SHA2_256

Service: SIGNATURE_VERIFY

 

위와 같은 Primitive를 이용하여 Firmware의 무결성과 전자서명을 검증할 수 있다.

실제 프로젝트에서도 SHA-256 기반 Hash와 RSA 기반 Signature Verify 조합이 많이 사용된다.

 

정리

 

Primitive는 Crypto Driver가 제공하는 Cryptographic Service Primitive를 정의하는 Container이다.

단순히 AES나 SHA와 같은 알고리즘만 정의하는 것이 아니라,

Service와 Algorithm을 조합하여 Crypto Driver가 제공할 암호 서비스를 구성하는 역할을 한다.

 

즉, Primitive는 어떤 암호 서비스(Service)를 어떤 알고리즘(Algorithm Family)과 어떤 동작 방식(Algorithm Mode)으로 수행할 것인지를 정의하는 설정이라고 이해하면 된다. Primitive는 단독으로 동작하지 않으며, 이후 설명할 CryptoDriverObject에서 Primitive를 참조하여 실제 암호 서비스를 수행하게 된다.

 

다음 글에서는 CryptoDriverObjects를 중심으로 Queue Size, HSM 사용 여부, Primitive Reference가 어떤 의미를 가지며, Primitive와 어떻게 연결되는지 자세히 살펴보겠다.

반응형