CAN 통신
들어가며
이번 글에서는 차량 보안을 공부하며 CAN 통신에 대해 알아본것을 정리해 보려고 한다. CAN 통신은 자동차를 비롯한 다양한 산업 현장에서 필수적으로 사용되는 통신 프로토콜이었으며, 관련 배경지식부터 데이터 프레임 구조, 에러 제어, 그리고 공격과 방어 기법까지 폭넓게 다루었다.
CAN 통신 개요
CAN(Controller Area Network)은 1980년대 초 독일 보쉬사에서 개발이 시작되었고, 1986년 SAE에서 정식 공개된 이후 대부분의 자동차에 적용된 표준 통신 규격이었다. CAN은 호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 메시지 기반으로 상호 통신할 수 있도록 설계되었으며, 1993년 ISO 국제표준으로 채택되었다. CAN 통신은 자동차뿐만 아니라 산업 기계, 의료기기, 엘리베이터 등 여러 분야에서 활용되었다.
또한, 최근에는 데이터 전송량과 속도의 요구가 증가함에 따라 기존 CAN 통신에 “Flexible Data” 기능이 추가된 CAN FD가 등장하였고, 일부 전기자동차에서는 CAN과 함께 이더넷 등 대용량 전송 프로토콜을 병용하기도 했다.
Bit와 전기적 특성
CAN 프레임은 한 개 이상의 Bit로 구성되었으며, 각 Bit는 Dominant(0)와 Recessive(1)로 구분되었다. 전기적으로 Dominant bit는 높은 전압(5V), Recessive bit는 낮은 전압(0V)에 해당하였다. 만약 두 비트가 동시에 전송되면 항상 Dominant bit가 버스에 나타났으며, 이는 CAN 통신에서 메시지 우선순위를 결정하는 핵심 원리로 작용하였다.
데이터 프레임 구조
CAN 통신에서는 데이터 프레임이 실제 메시지 전송의 기본 단위였다. 데이터 프레임의 구성 요소는 다음과 같았다.
- SOF (Start Of Frame): 프레임의 시작을 알리는 한 개의 Dominant bit
- Identifier: 메시지의 식별자 역할을 하였으며, 동시에 메시지의 우선순위를 결정하였다. 숫자가 낮을수록 높은 우선순위를 갖았다.
- RTR (Remote Transmission Request): 데이터 요청 여부를 표시하였다.
- IDE (Identifier Extension): 일반 CAN과 Extended CAN을 구분하였다.
- DLC (Data Length Code): 데이터 필드의 길이를 나타내었다.
- Data Field: 실제 제어를 위한 데이터(예: 조향핸들 위치, 브레이크 상태 등)를 담았다.
- CRC (Cyclic Redundancy Check): 전송 오류를 검출하기 위한 검사값을 포함하였다.
- ACK (Acknowledge): 정상 수신 여부를 확인하였다.
- EOF (End Of Frame): 프레임의 종료를 나타내었다.
CAN FD에서는 기존 8바이트였던 Data Field가 최대 64바이트로 확대되어, 데이터 전송 속도를 8배로 늘릴 수 있었다.
Chassis CAN, P-CAN, E-CAN, G-CAN의 차이
기존 자료에서는 C-CAN(Chassis CAN)이라는 명칭이 등장했으나, 실제 차량 내에서는 여러 용도의 CAN 네트워크가 존재하며, 제조사나 OEM에 따라 용어가 상이하게 사용되었다.
-
Chassis CAN (C-CAN):
일반적으로 차량의 섀시(Chassis) 관련 부품, 예를 들어 조향, 브레이크, ABS, 전자식 스태빌리티 제어 등 실시간 제어가 요구되는 시스템에 적용되었다. 하지만 일부 제조사에서는 엔진이나 미션 제어와 관련된 네트워크를 P-CAN(Powertrain CAN)이나 E-CAN(Engine CAN)이라고 구분하기도 하였다. -
P-CAN / E-CAN:
– 일부 문헌이나 제조사에서는 엔진과 미션 같은 파워트레인 영역의 통신을 P-CAN 또는 E-CAN으로 명명하였다.
– 이 경우, 엔진 제어, 변속기, 연료 분사 등 동력 전달과 직결되는 부문이 해당되며, 통신 속도나 실시간성이 더욱 엄격하게 요구되었다.
– 질문에서 언급된 “Chassis CAN이 엔진, 미션이 맞나요 P-CAN아닌가요?”에 대해, OEM마다 명칭이 다를 수 있으나 일반적으로 동력 관련 부문은 P-CAN이나 E-CAN으로 구분하는 경우가 많았음을 언급할 필요가 있다. -
G-CAN:
– G-CAN은 Gateway CAN의 약어로, 서로 다른 CAN 서브네트워크(예를 들어, 파워트레인 네트워크와 바디 네트워크) 간의 데이터 교환을 중계하는 역할을 담당하였다.
– 모든 차량에 별도의 G-CAN이 존재하는 것은 아니었으나, 복잡한 네트워크 구조를 가진 현대 차량에서는 다양한 CAN 네트워크를 효율적으로 연결하기 위한 게이트웨이 역할이 중요한 위치를 차지하였다. -
E-CAN:
– E-CAN은 보통 Engine CAN, 즉 엔진 제어와 관련된 통신을 의미하지만, 명칭은 제조사별로 다르게 사용될 수 있으므로 문맥에 따라 주의가 필요하다.
용어 명칭의 제조사별 차이
실제로 각 OEM에서는 차량 내 여러 CAN 네트워크를 세분화하여 명칭을 부여하였다. 예를 들어, 한 제조사는 동력 전달 부문을 P-CAN으로, 차체 관련 부문을 B-CAN(Body CAN)으로 명명할 수 있으며, 또 다른 제조사는 엔진 관련 네트워크를 E-CAN, 차체/섀시 관련 네트워크를 C-CAN으로 구분할 수 있었다. 이와 같이 명칭은 동일한 기본 프로토콜을 공유하지만, 적용 영역과 요구 성능에 따라 세분화되었다.
에러 제어 메커니즘
CAN 버스에서는 여러 노드가 동시에 메시지를 전송할 수 있었기에, 충돌로 인한 에러를 방지하기 위한 에러카운터 개념이 도입되었다. 에러가 발생하면 송신 혹은 수신 시 에러카운터(TEC, REC)가 증가하였고, 일정 임계치를 넘으면 노드가 점진적으로 네트워크에서 분리되었다.
- Error Active State: 에러 발생 시 Active Error Frame(6개의 Dominant bit와 8개의 Recessive bit)을 전송하며 TEC가 증가하였다.
- Error Passive State: TEC 혹은 REC가 128 이상이 되면, Active Error Frame 대신 Passive Error Frame(14개의 Recessive bit)을 전송하였다.
- Bus-off State: 에러카운터가 255를 초과하면 해당 노드는 스스로 네트워크에서 분리되었다.
CAN 통신의 공격과 방어
CAN 통신은 설계상 모든 ECU가 마스터 노드로 작동하며 송신자 인증 기능이 없었기에 취약점이 존재했다.
주요 취약점
- 데이터 프레임 위변조: 어떤 노드라도 자유롭게 메시지를 전송할 수 있었기 때문에, 공격자가 ECU를 장악하면 원래 제어해야 할 메시지를 위변조하여 브레이크, 엔진 등 중요한 제어 신호를 조작할 수 있었다.
- Bus-off 공격: 공격 노드가 Dominant bit만을 반복해서 전송해 피해자 노드의 에러카운터를 급격히 증가시키고, 결국 네트워크에서 분리시키는 방식이었다.
방어 기법
CAN 통신의 취약점을 보완하기 위해 두 가지 주요 방어 방법을 적용하였다.
- 침입탐지시스템(IDS):
- 각 ECU의 회로적 특성(전위차, 클럭 오차 등)을 이용해 정상적인 CAN 프레임과 공격으로 인한 프레임을 구분하였다.
- 단, IDS는 공격을 탐지하는 것에 그치고 직접적인 방어는 어려웠으며, false positive/negative 문제가 존재하였다.
- 인증(Authentication):
- ECU마다 고유한 Key를 할당하고, HMAC을 이용해 전송하는 데이터 프레임의 진위를 인증하였다.
- 이 방식은 key 분배, 업데이트, 기존 ECU 펌웨어 패치 등 여러 문제로 인해 완벽한 해결책은 아직 구현되지 않았다.
CAN 통신의 응용과 발전
CAN 통신은 초기 자동차 네트워크 문제(복잡한 배선, 유지보수 어려움)를 해결하기 위해 등장하였으며, 하나의 버스에 다수의 ECU가 연결되어 전체 시스템의 비용과 무게를 절감하였다. 이후 고속 데이터 전송을 요구하는 시스템에는 CAN FD가 도입되었고, C-CAN(Chassis CAN)과 B-CAN(Body CAN)처럼 적용 분야에 따라 서로 다른 속도와 용도로 세분화되었다.
- C-CAN: 500kbps의 고속 통신으로 엔진, 미션, ABS 등 동력 관련 시스템에 적용되었고, 주로 Microchip의 MCP2561, MCP2562와 같은 CAN 트랜시버를 사용하였다.
- B-CAN: 100kbps의 저속 통신으로 스마트키 모듈, BCM, 파워윈도우 등 동력과 관계없는 시스템에 적용되었으며, NXP의 TJA1054, TJA1055가 주로 사용되었다.
차량 내 CAN 통신 vs. 컴퓨터(산업용)에서의 CAN 통신
차량 내 CAN 통신
-
실시간 제어 및 내구성:
차량 환경은 진동, 온도 변화, 전자기 간섭 등 열악한 조건 속에서도 안정적인 통신이 요구되었으므로, CAN 통신은 내구성이 뛰어나고 실시간성이 보장되는 프로토콜로 채택되었다. -
분산 제어:
각 ECU가 독립적으로 메시지를 송수신하며, 에러 제어나 충돌 회피 메커니즘을 통해 높은 신뢰성을 유지하였다. -
네트워크 구성:
다수의 CAN 네트워크(예: P-CAN, B-CAN, G-CAN 등)가 존재하며, 각 네트워크는 해당 용도에 맞게 최적화된 전송 속도와 메시지 우선순위를 갖도록 설계되었다.
컴퓨터 및 산업용 CAN 통신
-
테스트 및 시뮬레이션:
컴퓨터에서는 CAN 인터페이스(예: PCAN-USB 카드 등)를 이용하여 차량용 CAN 데이터를 모니터링, 분석 및 테스트하는 경우가 많았다.
– 이러한 시스템은 개발 및 진단 도구로서 사용되었으며, 차량 내 환경보다는 상대적으로 안정된 실내 환경에서 운영되었다. -
산업용 적용:
산업 자동화, 로봇, 공정 제어 등에서도 CAN 통신이 사용되었으나, 차량용에 비해 전자기 간섭, 진동 등 외부 요인에 대한 내구성 요구는 다소 낮았다. -
구현 차이:
– 차량에서는 배선 간소화, 내구성, 실시간성, 그리고 에러 복구가 매우 중요하게 다루어졌다면, 컴퓨터나 산업용 시스템에서는 데이터 로깅, 시뮬레이션, 소프트웨어 기반의 분석에 더 초점을 맞추었다.
CAN과 CAN Bus, 그리고 “CNA Bus”의 차이
CAN vs. CAN Bus
-
CAN (Controller Area Network):
– 프로토콜 자체와 그 통신 원리를 의미한다.
– 메시지 기반의 통신 방식, 비트 수준의 충돌 회피, 에러 검출 및 복구 메커니즘 등이 정의되어 있다. -
CAN Bus:
– CAN 프로토콜을 실제로 구현한 물리적 네트워크를 가리킨다.
– 배선, 트랜시버, 커넥터 등 하드웨어적인 요소가 포함되며, 네트워크 탑로지(버스형, 트위스티드 페어 와이어 등)와 같은 물리 계층의 설계가 중요하다.
“CNA Bus”의 의미
현재까지 정립된 표준 및 문헌에서는 “CNA Bus”라는 용어는 일반적으로 사용되지 않았다.
- 만약 “CNA Bus”라는 표현이 있다면, 이는 CAN Bus와 혼동되었거나, 특정 제조사 혹은 시스템에서 내부적으로 사용하는 용어일 가능성이 높다.
- 일반적으로는 CAN과 CAN Bus가 동일한 시스템을 지칭하며, 프로토콜과 물리 네트워크의 차이를 설명할 때 사용된다.
마치며
CAN 통신은 초기 자동차 네트워크의 복잡성을 해결하고, 다수의 ECU가 효율적으로 통신할 수 있는 환경을 마련했다. 에러 제어 메커니즘과 메시지 우선순위 결정 방식 덕분에 안정적인 통신이 가능했으나, 송신자 인증 부재 등의 문제로 인해 보안 취약점이 존재했다. 이에 따라 IDS나 인증 기반 방어 기법 등이 연구되었으나, 아직 완벽한 해결책은 나오지 않았다. 자동차 보안 분야에서 CAN 통신의 이해와 개선은 앞으로도 중요한 연구 주제가 될 것이다.
CAN 통신의 기본 구조와 에러 제어 메커니즘을 복습하는 동시에, 다양한 CAN 네트워크(Chassis CAN, P-CAN, E-CAN, G-CAN 등)의 명칭과 용도를 심층적으로 분석하였다. 또한, 차량 내 통신 환경과 컴퓨터 또는 산업용 환경에서의 CAN 통신 차이, 그리고 CAN 프로토콜과 물리적 구현체인 CAN Bus의 개념을 구분하여 정리를 해봤다.
제조사별로 용어와 네트워크 구성이 다를 수 있으므로, 특정 차량이나 시스템을 분석할 때는 해당 OEM 문서를 참고하는 것이 필요하다. 이러한 심층적인 분석이 차량 보안 및 통신 연구에 기여하여, 향후 더욱 안전하고 효율적인 네트워크 시스템 구축에 도움이 되기를 기대한다.
본 포스팅을 통해 CAN 통신의 원리와 보안 측면, 그리고 실제 적용 사례를 정리하였으며, 이를 토대로 향후 차량 보안 분야에서 더욱 안전한 통신 환경을 구축하는 데 기여하고자 한다.
댓글남기기