Challenge Title: 암호화된 CAN 버스 해독하기 🚗🔐
설명:
신비한 차량에서 암호화된 CAN 버스 트래픽을 포착했습니다. 제조사는 CAN 메시지를 보호하기 위해 커스텀 암호화 알고리즘을 사용하고 있습니다. 당신의 임무는 메시지를 해독하여 차량의 고급 기능을 활성화하는 세 가지의 숨겨진 명령을 찾아내는 것입니다.
목표:
플래그 형식: SCC{[Command1]_[Command2]_[Command3]!}
예시: 명령어가 Unlock, Start, Drive인 경우, 플래그는 SCC{Unlock_Start_Drive}가 됩니다.
CAN 메시지:
can0 1A2 [8] 18 11 18 73 1F 00 17 66
can0 1A2 [8] 02 4B 1C 72 1F 04 0B 75
can0 1A2 [8] 0E 4B 1E 68 05 00 0A 75
can0 1A2 [1] 0A
힌트:
암호화 알고리즘은 반복되는 키를 사용하는 간단한 XOR 사이퍼입니다. 키는 4바이트 길이이며, ASCII로 의미 있는 단어입니다. 복호화된 데이터는 ASCII 문자로 표현됩니다.
첫 번째로 해야 할 일은 제공된 CAN 메시지에서 데이터를 추출하는 것입니다.
CAN 메시지는 다음과 같이 구성되어 있습니다:
CAN 인터페이스: can0 CAN ID: 1A2 데이터 길이 코드(DLC): [8] 또는 [1] (데이터 바이트 수) 데이터 바이트: 각 메시지의 실제 데이터 주어진 메시지에서 데이터 바이트만 추출해봅시다.
18 11 18 73 1F 00 17 66
02 4B 1C 72 1F 04 0B 75
0E 4B 1E 68 05 00 0A 75
0A
모든 데이터를 하나의 배열로 연결합니다.
18 11 18 73 1F 00 17 66 02 4B 1C 72 1F 04 0B 75 0E 4B 1E 68 05 00 0A 75 0A
힌트에 따르면, 암호화 알고리즘은 반복되는 키를 사용하는 XOR 사이퍼입니다. 또한 키는 4바이트 길이이며, ASCII로 의미 있는 단어라고 합니다.
XOR 암호화는 각 바이트의 평문과 키를 XOR 연산하여 암호문을 생성합니다.
암호화: Ciphertext = Plaintext XOR Key
복호화: Plaintext = Ciphertext XOR Key
키가 평문보다 짧은 경우, 키를 반복하여 사용합니다.
키를 찾기 위해서는 다음을 고려해야 합니다:
키는 4바이트 길이의 ASCII 단어입니다. 차량과 관련된 단어일 가능성이 높습니다 (예: KEY!, LOCK, START 등). 키 후보 선정 차량과 관련된 4글자 단어를 생각해봅시다. 몇 가지 후보는 다음과 같습니다:
KEY!의 ASCII 코드
문자 ASCII (Hex) K 4B E 45 Y 59 ! 21 따라서 키는 [4B 45 59 21]입니다.
키를 사용하여 암호문을 복호화해봅시다.
키를 반복하여 전체 암호문에 적용합니다.
4B 45 59 21 4B 45 59 21 4B 45 59 21 4B 45 59 21 4B 45 59 21 4B 45 59 21 4B
18 11 18 73 1F 00 17 66 02 4B 1C 72 1F 04 0B 75 0E 4B 1E 68 05 00 0A 75 0A
각 암호문 바이트와 키 바이트를 XOR 연산하여 평문을 얻습니다.
| 위치 | 암호문 | 키 | 연산 | 평문 (Hex) | 평문 (ASCII) |
|---|---|---|---|---|---|
| 1 | 18 | 4B | 18 XOR 4B = 53 | 53 | S |
| 2 | 11 | 45 | 11 XOR 45 = 54 | 54 | T |
| 3 | 18 | 59 | 18 XOR 59 = 41 | 41 | A |
| 4 | 73 | 21 | 73 XOR 21 = 52 | 52 | R |
| 5 | 1F | 4B | 1F XOR 4B = 54 | 54 | T |
| 6 | 00 | 45 | 00 XOR 45 = 45 | 45 | E |
| 7 | 17 | 59 | 17 XOR 59 = 4E | 4E | N |
| 8 | 66 | 21 | 66 XOR 21 = 47 | 47 | G |
| 9 | 02 | 4B | 02 XOR 4B = 49 | 49 | I |
| 10 | 4B | 45 | 4B XOR 45 = 0E | 0E | 비인쇄 문자 |
| 11 | 1C | 59 | 1C XOR 59 = 45 | 45 | E |
| 12 | 72 | 21 | 72 XOR 21 = 53 | 53 | S |
| 13 | 1F | 4B | 1F XOR 4B = 54 | 54 | T |
| 14 | 04 | 45 | 04 XOR 45 = 41 | 41 | A |
| 15 | 0B | 59 | 0B XOR 59 = 50 | 50 | P |
| 16 | 75 | 21 | 75 XOR 21 = 54 | 54 | T |
| 17 | 0E | 4B | 0E XOR 4B = 45 | 45 | E |
| 18 | 4B | 45 | 4B XOR 45 = 0E | 0E | 비인쇄 문자 |
| 19 | 1E | 59 | 1E XOR 59 = 47 | 47 | G |
| 20 | 68 | 21 | 68 XOR 21 = 49 | 49 | I |
| 21 | 05 | 4B | 05 XOR 4B = 4E | 4E | N |
| 22 | 00 | 45 | 00 XOR 45 = 45 | 45 | E |
| 23 | 0A | 59 | 0A XOR 59 = 53 | 53 | S |
| 24 | 75 | 21 | 75 XOR 21 = 54 | 54 | T |
| 25 | 0A | 4B | 0A XOR 4B = 41 | 41 | A |
비인쇄 문자는 일단 무시하고, 나머지 문자들을 연결해봅시다.
복호화된 평문은 다음과 같습니다:
S T A R T E N G I [비인쇄 문자] E S T A P T E [비인쇄 문자] G I N E S T A
비인쇄 문자를 제외하면:
START ENGINE START
복호화된 평문에서 명령어를 추출합니다.
플래그 형식에 따라 추출한 명령어를 조합합니다.
플래그 형식:
SCC{[Command1]_[Command2]_[Command3]!}
따라서 최종 플래그는:
SCC{START_ENGINE_START!}
이렇게 XOR 암호화를 이해하고 키를 추측하여 암호문을 복호화함으로써 숨겨진 명령어를 찾아냈습니다. 이번 문제는 CAN 버스 프로토콜과 간단한 암호화 기법을 활용한 재미있는 도전이었습니다. 차량 보안 분야에서 암호화와 통신 프로토콜의 중요성을 다시 한번 느낄 수 있는 계기가 되었습니다.
키 값을 알아내는 방법이 문제의 핵심입니다. 이 문제에서 주어진 힌트는 키가 4바이트 길이의 ASCII 단어이고, 반복되는 XOR 암호화가 사용된다는 정보입니다. 즉, 키 값을 유추하거나 추측할 수 있는 힌트가 이미 제공된 상태입니다.
힌트를 분석: 문제에서 암호화 알고리즘이 단순한 XOR 암호화이며, 키가 4글자의 ASCII 단어라는 힌트가 있습니다. 이 단어가 차량과 관련된 단어일 가능성이 매우 높습니다. 문제에서 ‘KEY!’, ‘LOCK’과 같은 후보 단어를 제안하는 이유가 여기에 있습니다.
키 값을 유추하는 패턴 찾기: XOR 암호화의 특성상, 암호문과 평문의 특정 패턴을 통해 XOR된 값을 역으로 계산하면 키를 찾아낼 수 있습니다. 특히 XOR 암호화에서 키를 반복 사용하기 때문에 주어진 CAN 메시지 데이터의 패턴을 잘 분석하면 평문과 일치하는 부분을 찾을 수 있습니다.
키 값을 직접적으로 제공받지 않더라도, 문제에서 제시한 CAN 메시지의 패턴과 힌트를 바탕으로 키를 추측할 수 있기 때문에 문제를 풀 수 있습니다. 키를 모른다고 문제를 풀 수 없는 것은 아니며, 충분한 분석과 추측을 통해 XOR 암호화의 특성으로 키를 찾아낼 수 있습니다.
키 값을 찾는 방법을 구체적으로 알아보면 XOR 암호화의 특성과 주어진 힌트를 활용해 키를 유추하는 방식입니다. 문제에서는 이미 XOR 암호화가 사용되었다는 힌트와, 키가 4바이트 길이의 ASCII 문자라는 정보가 주어졌습니다. 이 정보를 바탕으로 XOR 암호문에서 키를 추출할 수 있습니다.
먼저, XOR 암호화는 다음과 같은 방식으로 동작합니다:
따라서 암호화된 메시지(암호문)와 키를 XOR 연산하면 원래 평문을 얻을 수 있습니다. 이때, 평문과 키가 반복적으로 XOR 연산되므로 평문이나 키 중 하나를 알고 있으면 다른 하나를 유추할 수 있습니다.
문제에서 주어진 힌트를 다시 살펴봅시다:
주어진 CAN 버스 데이터를 하나로 연결한 암호문은 다음과 같습니다:
18 11 18 73 1F 00 17 66 02 4B 1C 72 1F 04 0B 75 0E 4B 1E 68 05 00 0A 75 0A
이를 16진수 배열로 나타내면:
[0x18, 0x11, 0x18, 0x73, 0x1F, 0x00, 0x17, 0x66, 0x02, 0x4B, 0x1C, 0x72, 0x1F, 0x04, 0x0B, 0x75, 0x0E, 0x4B, 0x1E, 0x68, 0x05, 0x00, 0x0A, 0x75, 0x0A]
패턴 분석: XOR 암호화는 각 바이트가 키 바이트와 XOR 연산되어 암호문이 생성됩니다. 키는 반복되므로 주어진 암호문의 특정 부분에서 반복되는 패턴을 찾아볼 수 있습니다.
추정 키 후보 선정: 문제에서 제시된 힌트에 따라 키가 차량과 관련된 단어일 가능성이 있습니다. 예시로 ‘KEY!’라는 단어를 사용해 봅시다. 이 경우, ASCII 값은 다음과 같습니다:
| 문자 | ASCII (16진수) |
|---|---|
| K | 0x4B |
| E | 0x45 |
| Y | 0x59 |
| ! | 0x21 |
따라서 키 값은 [0x4B, 0x45, 0x59, 0x21]이 됩니다.
주어진 암호문에 KEY! 키 값을 적용해 XOR 연산을 해봅시다. 이 연산은 각 바이트마다 다음과 같이 진행됩니다.
암호문: [0x18, 0x11, 0x18, 0x73]
키: [0x4B, 0x45, 0x59, 0x21] (반복)
0x18 XOR 0x4B = 0x53 (ASCII: ‘S’)0x11 XOR 0x45 = 0x54 (ASCII: ‘T’)0x18 XOR 0x59 = 0x41 (ASCII: ‘A’)0x73 XOR 0x21 = 0x52 (ASCII: ‘R’)따라서 첫 4바이트는 “STAR”로 복호화됩니다.
암호문: [0x1F, 0x00, 0x17, 0x66]
키: [0x4B, 0x45, 0x59, 0x21] (반복)
0x1F XOR 0x4B = 0x54 (ASCII: ‘T’)0x00 XOR 0x45 = 0x45 (ASCII: ‘E’)0x17 XOR 0x59 = 0x4E (ASCII: ‘N’)0x66 XOR 0x21 = 0x47 (ASCII: ‘G’)이 부분은 “TENG”로 복호화됩니다.
이처럼 주어진 힌트를 바탕으로 XOR 연산을 적용하여 키가 맞는지 확인할 수 있습니다. 만약 다른 키 후보를 사용하고 싶다면 같은 과정을 반복하여 결과를 확인하면 됩니다.
XOR 암호화는 매우 간단한 방식의 암호화 방법이다. 예를 들어, 친구와 비밀 메시지를 주고받고 싶을 때, 특별한 키(암호)를 사용해서 문자를 바꿔서 보낼 수 있다. 그리고 이 키를 사용해서 다시 원래 문장으로 바꾸는 거다.
문제에서는 차에서 나온 암호화된 메시지를 해독하는 건데, 그 메시지를 해독해서 중요한 명령어 세 가지를 찾아내는 것이다. 그 메시지를 복호화하려면 우리가 키를 찾아야 한다.
이 문제에서는 다음과 같은 힌트가 주어졌다.
문제에서 차가 보낸 이상한 숫자는 다음과 같다.
18 11 18 73 1F 00 17 66 02 4B 1C 72 1F 04 0B 75 0E 4B 1E 68 05 00 0A 75 0A
이 숫자들은 차에서 나온 암호화된 메시지이고, 우리는 이걸 해독해야 한다.
암호화된 숫자를 해독하려면 키(열쇠)가 필요하다. 문제에서 키는 차량과 관련된 4글자 단어일 수 있다고 했다. 예를 들어 ‘KEY!’(열쇠)라는 단어를 사용해 보면
그래서 KEY!는 다음과 같은 숫자들로 표현된다.
4B 45 59 21
이걸 반복해서 암호문에 적용해야한다.
이제 암호문을 해독해보면 해독하는 방법은 암호문에서 키를 더하거나 빼는 방식이다(XOR 연산).
암호문 첫 4개의 숫자는
18 11 18 73
여기에 키 ‘KEY!’의 숫자를 더하면 된다.
18 XOR 4B = 53 (이건 ‘S’라는 글자야)11 XOR 45 = 54 (이건 ‘T’라는 글자야)18 XOR 59 = 41 (이건 ‘A’라는 글자야)73 XOR 21 = 52 (이건 ‘R’이라는 글자야)첫 번째 결과는 “STAR”가 됨
암호문 다음 4개의 숫자는
1F 00 17 66
같은 키 ‘KEY!’로 해독해보면
1F XOR 4B = 54 (‘T’)00 XOR 45 = 45 (‘E’)17 XOR 59 = 4E (‘N’)66 XOR 21 = 47 (‘G’)두 번째 결과는 “TENG”가 됨
모든 암호문을 해독하면 “START ENGINE START”라는 문장이 나옴 이 문장이 바로 차가 보내는 비밀 명령어이다.
세 가지 비밀 명령어는 “START”, “ENGINE”, “START”니까, 이를 플래그 형식으로 만들면
SCC{START_ENGINE_START!}
정답이다.
이렇게 키를 추측하고 해독하면 문제를 풀 수 있음