임베디드 디자인 추세가 컴퓨터와의 통신 쪽으로 이동함에 따라 USB 연결에 대한 수요는 점점 증가하고 있다. USB에는 버스에서 전달된 데이터의 안전을 보호하는 기본 보안 메커니즘이 없다. 이로 인해 일부 애플리케이션에는 이것이 문제가 될 수 있다.
글 | 데이비드 플라워즈(David Flowers), 선임 애플리케이션 연구원
첨단 마이크로컨트롤러 아키텍처 부서
마이크로칩 테크놀로지
USB에서는 이 장치들이 동작하는 방법을 지정하는 여러 개의 장치 클래스 세트를 정의한다. 대부분 이러한 장치에는 정확한 작동을 위해 따라야 하는 미리 결정된 통신 데이터가 있다. 이 데이터를 통해 마우스, 키보드 및 USB 메모리 같은 장치는 처음 연결할 때 드라이버를 설치하지 않고도 모든 플랫폼에서 작동한다. 이러한 장치는 데이터 페이로드(payloads)가 이미 알려져 있으므로 어떠한 종류의 보안도 요구되지 않는다. 미리 결정된 데이터 형식을 사용하지 않는 다른 장치는 유연성이 있어 사용자 지정 애플리케이션 데이터를 전송한다. USB가 사용자 지정 애플리케이션이 아니라 미리 결정된 데이터 애플리케이션용으로 디자인되었으므로 이러한 장치 유형에 적합한 기본 보안 또는 암호화 메커니즘은 존재하지 않는다.
USB 분석기가 저렴하고(혹은 무료이고) 사용하기 쉽기 때문에 사용자 지정 USB 개발자의 문제가 더 복잡하게 됐다. 이러한 USB 분석기는 모든 사람이 USB 트래픽을 보고 전문전인 기술 없이도 기밀 정보를 가져올 수 있도록 USB 트래픽을 캡처할 수 있다.
디자인 고려사항
더욱 안전한 사용자 지정 USB 애플리케이션을 작성하는 첫 번째 단계는 해당 애플리케이션 요구에 적합한 암호화 알고리즘을 선택하는 것이다. 제공되는 보안, 크기, 데이터 블록을 암호화하거나 암호화를 해제하는 데 걸리는 시간 및 다양한 컴파일러에서의 네이티브(native) 지원 측면에서 다른 여러 개의 알고리즘을 선택할 수 있다. AES(Advanced Encryption Standard)는 꽤 안전하므로 좋은 선택이 될 수 있다. 예를 들어, 미국 정부는 다양한 키 크기 요구사항을 갖는 SECRET와 TOP SECRET라는 애플리케이션에 AES를 사용하는 것을 승인했다(http://www.cnss.gov/Assets/pdf/cnssp_15_fs.pdf). AES는 중소형 코드 크기(약 8 Kbyte)로 구현할 수 있다. 제공되는 보안 레벨의 경우 AES는 훌륭한 알고리즘 중 하나다. 마지막으로 AES는 .NET Framework에서 제공되는 기본 알고리즘이다.
대체 알고리즘을 찾는 데 너무 많은 시간을 소비할 필요 없이 몇 개의 다른 알고리즘을 찾을 수 있다. DES(Data Encryption Standard)와 TDES
(Triple Data Encryption Standard)는 .NET Framework에서 기본적으로 지원되는 두 개의 알고리즘이다. 이러한 알고리즘은 AES보다 느리고, 덜 안전하고, 더 큰 코드 크기를 사용하지만 많은 애플리케이션에서 여전히 사용하고 있다(http://www.nist.gov/public_affairs/releases/aesq&a.htm) .
XTEA(Tiny Encryption Algorithm)의 두 번째 버전이 상당한 가능성을 가진 후보 알고리즘이다. 이 알고리즘은 기본적으로 컴파일러 도구에서 지원되지는 않지만 간단하고 구현이 용이하다. XTEA는 사용 가능한 알고리즘 중에서 가장 소형의 알고리즘으로 소형 메모리 공간에 적합한 애플리케이션용이다. XTEA의 보안 레벨은 엄격하게 테스트되지 않았기 때문에 AES처럼 분명하지는 않다. 하지만 지금까지 수행된 테스트를 통해 본다면 비교적 안전한 듯 보인다(http://en.wikipedia.org/wiki/XTEA). 다양한 암호화 알고리즘에 대한 자세한 정보는 그림 1과 Microchip 애플리케이션 노트 AN953과 AN1044를 참조할 수 있다.
암호화 알고리즘을 선택할 때 고려해야할 사항은 효율적인 키 크기와 우선적으로 암호화를 사용해야 할지 여부이다. 미국을 비롯한 일부 국가에서는 군수품에 적용되는 특정 키 크기를 가진 알고리즘을 고려한다. 따라서 이러한 알고리즘의 수출은 통제된다. 사용되는 알고리즘의 유형과 키 크기에 따라 정부가 애플리케이션을 승인한다. 미국 수출 통제에 대한 자세한 정보는 다음 웹 사이트에서 확인할 수 있다.
http://www.bis.doc.gov/encryption/한 알고리즘이 선택되면 다음 단계는 알고리즘의 블록 크기가 애플리케이션에 미치는 모든 영향을 고려하는 것이다. 이 예제에서 AES의 블록 크기는 16바이트이다. 이는 애플리케이션이 USB를 통해 전송한 데이터가 16바이트의 배수이어야 한다는 것을 의미한다. 16바이트 미만의 데이터 페이로드를 전송해야 할 경우 필요한 블록 크기를 충족시키기 위해 데이터를 채워야 한다. 나머지 데이터 블록을 채우기 위해 패딩을 사용할 경우, 이 바이트는 암호화 장치로 전송된다. 이러한 방식으로 암호화 알고리즘이 디자인되었으므로 하나의 비트 오류나 손실로 인해 데이터 블록이 암호화되지 못할 수 있다.
마이크로칩은 AES, DES, XTEA 및 기타 암호화 알고리즘의 구현뿐만 아니라 여러 개의 사용자 지정 애플리케이션 스타일 데모가 포함된 무료 USB 스택을 제공한다. 스택은 http://www.microchip.com/usb 사이트에서, 그리고 암호화 라이브러리(부품 번호: SW300052)는 http://www.microchip.com 사이트에서 찾아볼 수 있다. 암호화된 사용자 지정 USB 애플리케이션을 작성하기 위해 스택과 라이브러리를 Microsoft Visual Studio C++ Express Edition 컴파일러 및 AES 알고리즘의 네이티브 지원과 결합할 수 있다.
고려해야할 마지막 항목은 암호화 키의 생성 및 유지보수이다. 오늘날 고급 암호화 알고리즘을 사용할 수 있기 때문에 데이터 도난의 원인은 암호화 알고리즘이 아니라 시스템에 침투하거나 사용하는 인간이다. AES, TDES 및 XTEA 같은 대칭 암호화는 빠르면서도 소형이고 안전하다는 이점을 갖는다. 주요 단점은 데이터를 암호화하고 암호화를 해제하기 위해 양측에서 동일한 키를 알아야 한다는 것이다. 시스템이 침투당하면 암호화도 같이 침투당해 향후에는 아무런 노력 없이 전송을 방해할 수 있게 된다. 이는 비대칭 암호화 알고리즘이 존재하는 주된 이유이다. 비대칭 알고리즘은 공유 키를 갖지 않고도 정보를 교환할 수 있는 공공 및 개인 키를 생성한다. 이를 통해 서로 연결하기 위해서 새 알고리즘이 생성된 이후 시스템의 공유 키가 누출되어 “침투당해도” 시스템을 안전하게 보호할 수 있다. 비대칭 알고리즘은 일반적으로 향후 안전하고 빠른 통신을 위해 사용할 수 있도록 고유하게 생성된 대칭 키와 교환하는 데 사용한다. 비대칭 알고리즘의 주요 단점은 구현하는 데 많은 양의 펌웨어 공간이 필요하고 대칭 암호화 알고리즘에 비해 매우 느리다는 것이다. 이 글의 예제에서 대칭 암호화 알고리즘이 사용됐지만 비대칭 알고리즘 구현 프로세스는 매우 유사하다.
예제 애플리케이션 작성
이 예제는 마이크로칩 USB 펌웨어 예제에서 제공하는 사용자 지정 HID 애플리케이션 예제에 기반하고 있다. 이 애플리케이션은 USB의 HID(Human Interface Device) 클래스를 사용하여 사용자 지정 데이터를 전송한다. 장치와 통신하기 위해 C++로 작성된 예제 프로그램이 펌웨어에 추가하여 제공된다. 이 예제에서 PIC18F46J50 USB 데모 보드(부품 번호: MA180024)가 하드웨어 플랫폼으로 사용된다.
암호화를 추가하기 전에 버스를 통해 전송된 데이터를 USB-프로토콜 분석기로 볼 수 있다(그림 1 참조). 그림 1에서 호스트는 버튼을 누른 상태에 대한 요청을 전송하고 보드는 상태를 반환한다. 0x81의 첫 번째 바이트는 이 패킷이 버튼 상태(button status)임을, 0x01의 두 번째 바이트는 버튼이 눌러지지 않았다는 것을 의미한다.
이 예제에서 펌웨어를 작성하려면 다음 단계를 따라야 한다.
1. 암호화 소스 코드를 추가한다. 즉, USB 예제 프로젝트에 소스 코드를 추가한다.
2. 16바이트의 배수로 송수신할 데이터를 패드(pad)하여 이 예제에서 AES 알고리즘을 위한 블록 크기로 일치시킨다.
3. 암호화/암호해독용 키를 작성한다. 이 예제에서는 AES의 128비트 버전을 사용하므로 16바이트 키가 필요하다.
4. 버스에서 나가는 모든 데이터를 암호화하고 버스에서 수신된 모든 데이터를 암호 해독한다.
그림 2의 바이트 1과 바이트 2는 이전과 같이 같은 의미를 갖지만 암호화됐다. 따라서 바이트 1과 바이트 2의 경우 키 없이는 버스에서 더 이상 암호를 해제할 수 없다. 이러한 패킷 각각을 서로 약간씩 다르게 하기 위해 카운터가 추가됐다. (이후 섹션에서 이 기능이 추가되는 이유를 설명한다.)
PC측 전송의 경우 첫 번째 단계는 필요한 암호화 라이브러리를 포함시키는 것이다. 이는 기본 암호화 모듈에 참조를 추가하여 수행한다. 펌웨어에서 사용한 동일한 키를 사용하여 암호화/암호해독용 키 인스턴스를 작성한다. 버스를 통해 전송된 데이터는 안전하다. 이는 시스템이 완벽하게 안전하다는 것이 아니라 보다 안전하다는 것을 의미한다.
반복 공격
전송되는 데이터 값이 안전하지만 반복 공격으로 인해 시스템은 여전히 불안전할 수 있다. 반복 공격은 누군가가 전송된 트래픽을 캡처하고 나중에 동일한 데이터를 재생할 때 발생한다. 여기에서 제시된 예제에서는 눌러진 버튼의 암호화된 반응으로 단순히 응답하는 장치를 생성하기 위해, 누군가가 버튼 반환 패킷뿐만 아니라 버튼 상태를 요청하는 이벤트 시퀀스를 캡처하여 사용했다. 공격자는 어떤 값을 전송하고 있는지 알 수 없지만 USB 호스트는 버튼이 눌러졌다고 생각할 수 있다.
앞에서 언급한 암호화 알고리즘의 기능으로 이 애플리케이션을 보호할 수 있다. 암호화 알고리즘이 이러한 방식으로 생성되었으므로 비트가 약간만 변경되어도 완전히 다른 블록 값이 생성되며, 이는 각 패킷에 추가될 수 있는 임의의 숫자이다. 이를 통해 통신에서 예측할 수 없는 임의의 동작이 발생한다. 이는 반복 공격을 완벽하게 제거할 수 없지만 애플리케이션을 공격하기 더 복잡하게 만든다. 자신만의 고유한 결함을 가지고 있는 임의의 숫자 기능을 구현하는 데에는 여러 가지 접근방식이 존재한다.
호스트에서 장치로 전환되는 하나의 임의의 숫자는 초기 통신 시 구축할 수 있다. 이 숫자는 전송된 데이터에 포함된다. 이를 통해 세션 사이에서 데이터처럼 보이는 것의 임의의 순서를 정할 수 있지만 통신 세션 패턴이 알려지면 공격자가 버스 중간 통신을 가로채는 것을 막을 수 없다.
고유한 임의의 숫자는 모든 통신에서 전송될 수 있다. 이를 통해 시스템은 공격이 더 어려워지며, 공격자가 알려진 요청이 알려진 반응을 전송하기를 기다려야 하므로 데이터 페이로드에서 더 많은 공간을 차지하게 된다. 이 방법은 비대칭 암호화를 사용하는 경우에만 유용하다. 대칭 암호화가 사용될 경우 전체 요청 및 반응의 표는 시간이 지나면 알려지게 되어 결국 공격이 용이해진다.
PC 기반 공격
USB 데이터 전송 암호화를 통해 누군가가 시스템을 공격하는 것을 제지할 수 있지만, 한 사람이 시스템을 공격하게 되면 공격 방법이 알려져 향후 모든 사람이 시스템을 공격할 수 있게 된다.
데이터가 PC에 도착했을 때, 민감한 데이터는 고려해야 할 문제이다. 암호화가 되어있다고 해도 PC의 어떤 것도 안전하지 않다. 더 노련한 공격자가 잠재적인 키나 암호화된 데이터를 찾아 PC의 RAM을 스캔하는 애플리케이션을 작성할 수 있다. USB를 통해 전송된 데이터가 PC에서 암호화된 후 일정 시간이 지나면 키와 암호화된 원시 데이터가 RAM에 상주하게 되어 해당 애플리케이션을 읽을 수 있게 된다. 이는 시스템을 공격하는데 더 많은 시간과 전문성이 필요하지만 여전히 공격의 가능성은 존재한다는 것을 의미한다. 이 경우 비대칭 암호화를 통해 데이터를 보호할 수 있다. 시스템을 공격하려면 사용자가 장치를 모두 연결한 후 새 키를 검색해야 하기 때문이다. 하지만 시스템을 완벽하게 보호하지는 못한다.
보안 컴퓨터의 암호화된 데이터만 포함된 애플리케이션이 공격당할 가능성이 가장 낮다. 이 모델이 효율적으로 작동하는 일부 애플리케이션이 존재한다. 예를 들어, 암호화된 부트로더는 보안 서버의 .hex 파일을 암호화할 수 있지만 공격자의 손에서 벗어나야 마이크로컨트롤러의 데이터만을 암호 해독한다. 다른 예제는 캡처된 데이터 파일을 PC에 전송한 후 로컬에서 데이터를 암호 해독하고 그 결과를 표시하는 대신, 인터넷을 통해 암호화된 데이터를 보안 서버로 전송하여 데이터를 암호 해독하고 중요한 데이터가 없는 결과 요약 정보를 사용자에게 제공한다.
결론
고유한 또는 임의의 기밀 데이터를 생성하여 전송하는 애플리케이션의 경우 암호화는 매우 간단하게 최소의 비용으로 추가할 수 있다. 매우 정적이고 예측 가능한 전송 동작을 갖는 애플리케이션은 보호하기가 약간 더 복잡하다. 모든 암호화 시스템에서 데이터가 안전하다고 가정해서는 안 되며, 오히려 데이터 도난을 암호화로 지연시킬 수 있다고 가정해야 한다. 더 큰 키 크기, 데이터 페이로드에 임의성 추가 및 데이터를 훔치는 공격 제지율을 증가시키는 비대칭 키 교환 같은 여러 가지 기법이 존재한다. 전송된 데이터를 보호하기 위해 각자 장점과 단점을 갖는 여러 가지 다른 방법을 사용할 수 있다. 암호화를 애플리케이션에 디자인하는 것은 공격 제지량과 제지하기 위한 구현 비용과의 관계를 고려해야 한다.
마이크로칩은 대칭 암호화 알고리즘, 비대칭 암호화 알고리즘의 소스 코드와 임의의 숫자 생성기, USB 펌웨어 예제를 http://www.microchip.com/usb 웹 사이트에서 제공하고 있다.
MOSFET 드라이버 내장 고전압 아날로그 벅 PWM 컨트롤러 마이크로칩은 전력 변환 컨트롤러 제품군과 자사 최초의 파워 MOSFET 디바이스 제품군을 발표했다. 새로운 PWM 컨트롤러(MCP19035)와 낮은 FOM (Figure of Merit: 성능 지수)의 MOSFET 제품군(MCP87xxx)은 고효율 DC/DC 전력 변환 설계를 지원해 다양한 소비자 및 산업용 애플리케이션을 지원한다. |
<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>