보안의 필요성
ROS2 시스템은 분산된 네트워크 상에서 다양한 노드들이 상호 통신하는 구조로 설계되어 있다. 따라서, 보안 취약점이 존재할 가능성이 높으며, 이를 방치할 경우 해커의 공격으로 인해 시스템이 오작동하거나 민감한 데이터가 노출될 수 있다. ROS2는 보안을 강화하기 위해 DDS(Datadistribution Service) 기반의 보안 프레임워크를 도입하여 안전한 통신을 지원하고 있다.
DDS 보안 프레임워크
ROS2 보안 기능은 DDS 보안 프레임워크를 기반으로 설계되었으며, DDS 보안은 다음과 같은 기능들을 제공한다.
-
인증(Authentication): 네트워크 상의 각 참여자는 적절한 인증 과정을 통해 자신의 정당성을 증명해야 한다. 이를 통해 악의적인 참여자의 접근을 차단할 수 있다.
-
접근 제어(Access Control): 인증된 참여자들 사이에서도 권한을 기반으로 자원에 대한 접근을 제한한다. 각 노드는 자신이 허가된 주제(Topic)나 서비스에만 접근할 수 있다.
-
암호화(Encryption): 통신 데이터는 암호화되어 전송되므로, 중간에 데이터가 가로채지더라도 내용을 알아낼 수 없다. 주로 퍼블리셔와 서브스크라이버 사이의 토픽 통신에서 이 기능이 활용된다.
-
무결성(Integrity): 통신 데이터가 손상되지 않도록 보호하는 기능이다. 이는 메시지가 전송 중에 수정되거나 변조되지 않도록 보장하는 메커니즘이다.
ROS2 보안의 아키텍처
ROS2 보안 아키텍처는 크게 네 가지 핵심 요소로 구성된다:
-
ID 기반의 인증: 각 노드에 할당된 인증서와 비밀키를 이용하여 해당 노드의 신뢰성을 검증하는 방식이다. 이는 공개 키 기반의 인증 체계를 따르며, 각 노드는 인증서를 통해 자신을 증명한다.
-
제어된 접근: 노드가 각기 다른 주제 또는 서비스에 접근할 수 있는 권한을 미리 설정된 정책에 따라 제한한다. 이를 위해 정책 파일에서 권한을 명시하며, 노드별로 권한이 다르게 설정된다.
-
암호화된 통신: ROS2의 모든 통신은 퍼블리셔와 서브스크라이버 사이에서 암호화되어 데이터가 전송된다. 이때 퍼블리셔는 암호화된 데이터를 보내고, 서브스크라이버는 해당 데이터를 복호화하여 통신을 유지한다.
-
통합된 보안 정책: 각 노드가 통신에 사용할 보안 정책을 통합적으로 관리한다. 정책은 ROS2 네임스페이스와 결합되어 각 네임스페이스에서 일관된 보안 규칙이 적용될 수 있다.
인증(Authentication)
ROS2에서는 노드 간의 통신을 시작하기 전에 각 노드가 자신을 신뢰할 수 있는지 확인하는 과정이 필요하다. 이는 인증서 기반의 인증을 통해 이루어진다. 인증 과정에서는 다음과 같은 단계가 포함된다:
-
인증서 발급: 각 노드는 인증 기관(CA)으로부터 인증서를 발급받는다. 이 인증서는 공개 키와 비밀 키로 구성된다. 공개 키는 타 노드에게 공유되며, 비밀 키는 해당 노드가 자신만 알고 있어야 한다.
-
인증서 교환: 통신을 시작하려는 노드들 간에는 먼저 인증서가 교환된다. 노드는 자신이 신뢰할 수 있는 타 노드인지 확인하기 위해 타 노드의 인증서를 검증한다.
-
서명 확인: 노드가 데이터를 전송할 때, 그 데이터에 서명을 붙인다. 타 노드는 그 서명을 검증하여 데이터가 신뢰할 수 있는 노드로부터 온 것인지 확인한다.
-
세션 키 생성: 인증이 완료된 후, 양쪽 노드는 세션 키(Session Key)를 생성하여 이 키를 통해 암호화된 통신을 진행하게 된다.
접근 제어(Access Control)
ROS2 보안 기능에서 접근 제어는 노드들이 허용된 자원(토픽, 서비스 등)에만 접근할 수 있도록 보장한다. 접근 제어는 정책 파일을 통해 관리되며, 정책 파일은 주로 XML이나 JSON 형식으로 작성된다.
- 정책 파일의 구성 요소:
- 주체(Subject): 접근을 요청하는 노드나 사용자
- 자원(Resource): 접근하려는 주제(Topic)나 서비스
- 행동(Action): 주체가 자원에 대해 수행하려는 동작(읽기, 쓰기 등)
- 허용 여부(Allow/Deny): 해당 행동이 허용되는지 여부
<access_control>
<subject>Node1</subject>
<resource>TopicA</resource>
<action>Read</action>
<allow>true</allow>
</access_control>
암호화(Encryption)
ROS2에서 통신은 DDS의 보안 계층을 사용하여 암호화된다. 암호화는 퍼블리셔와 서브스크라이버 간의 통신에서 사용되며, 송신자는 데이터를 암호화하여 보내고, 수신자는 데이터를 복호화한다.
AES 대칭키 암호화 방식
암호화 방식으로는 주로 AES(Advanced Encryption Standard) 대칭키 방식이 사용된다. AES는 빠르고 효율적인 암호화 알고리즘으로, 특히 실시간 통신에 적합하다. 대칭키 방식에서는 하나의 키를 사용하여 데이터를 암호화하고 복호화한다. 이 키는 세션 키 생성 과정에서 노드 간에 안전하게 공유된다.
AES 암호화는 다음의 수식을 따른다:
여기서: - \mathbf{C}는 암호화된 데이터(암호문), - E는 암호화 함수, - \mathbf{K}는 대칭키(세션 키), - \mathbf{M}은 원본 데이터(평문)이다.
복호화는 다음과 같은 수식을 따른다:
여기서: - D는 복호화 함수이다.
무결성(Integrity)
ROS2의 보안 프레임워크는 무결성 검증을 통해 통신 중 데이터가 손상되거나 변조되지 않았는지를 확인하는 기능을 제공한다. 무결성 검증은 데이터를 전송할 때 해당 데이터의 해시 값을 생성하고, 이를 수신자에게 함께 전송하여 수신자가 데이터를 받았을 때 동일한 해시 값을 계산해 일치하는지 확인하는 방식으로 이루어진다.
해시 함수
무결성을 보장하기 위해 주로 해시 함수가 사용되며, 해시 함수는 입력 데이터의 임의 크기를 고정된 크기의 해시 값으로 변환하는 함수다. 일반적으로 SHA-256 같은 해시 함수가 사용되며, 이를 통해 데이터의 손상 여부를 확인할 수 있다.
해시 함수 H는 다음과 같은 수식을 따른다:
여기서: - \mathbf{H}는 데이터 \mathbf{M}에 대해 생성된 해시 값이다.
무결성 검증 과정
무결성 검증은 다음의 절차를 따른다:
- 송신자가 데이터를 전송하기 전에 해당 데이터의 해시 값 \mathbf{H}를 계산한다.
- 데이터를 암호화하고, 해시 값을 함께 전송한다.
- 수신자는 암호화된 데이터를 복호화한 후, 동일한 해시 함수를 사용하여 데이터를 해시한다.
- 송신자가 보낸 해시 값과 수신자가 계산한 해시 값이 일치하는지 비교하여 데이터의 무결성을 검증한다.
여기서: - \mathbf{M}은 송신자가 보낸 원본 데이터, - \mathbf{M'}는 수신자가 받은 데이터이다.
만약 해시 값이 일치하지 않으면, 이는 데이터가 전송 과정에서 변조되었거나 손상되었음을 의미한다.
DDS 보안 플러그인
ROS2는 기본적으로 DDS를 기반으로 통신을 수행하며, DDS 보안 플러그인을 통해 다양한 보안 기능을 확장할 수 있다. 보안 플러그인은 ROS2에서 직접 보안 정책을 설정하거나, 노드 간의 통신을 안전하게 보장하기 위한 추가 기능을 제공한다.
보안 플러그인의 주요 역할
- 인증: 각 노드가 통신에 앞서 서로를 신뢰할 수 있는지 확인하는 인증 기능을 수행한다.
- 접근 제어: 노드가 허용된 자원에만 접근할 수 있도록 제어한다.
- 암호화: 노드 간의 통신 데이터를 암호화하여 기밀성을 보장한다.
- 로그 및 감사: 보안 관련 이벤트를 기록하고, 나중에 이를 감사할 수 있도록 로그 데이터를 저장한다.
보안 정책
ROS2에서는 보안 정책 파일을 이용해 네트워크 상의 각 노드가 어떤 권한을 가지고 있는지를 명시할 수 있다. 정책 파일은 노드가 접근할 수 있는 주제(Topic), 서비스(Service), 행동(Action) 등을 정의하며, 이러한 정책 파일은 네트워크의 보안을 강화하는 데 필수적인 요소이다.
정책 파일은 주로 XML 또는 JSON 포맷으로 작성되며, 노드의 권한과 접근 제어를 설정하는데 사용된다.
<permissions>
<grant>
<subject>NodeA</subject>
<allow rule="read">Topic1</allow>
<allow rule="write">Topic2</allow>
</grant>
<grant>
<subject>NodeB</subject>
<deny rule="write">Topic2</deny>
</grant>
</permissions>
이와 같이, 정책 파일에서 각 노드의 권한을 세분화하여 관리할 수 있으며, 필요에 따라 읽기/쓰기 권한을 설정할 수 있다.
SROS2 (Secure ROS2)
SROS2는 ROS2 보안 기능을 설정하고 관리하기 위한 도구로, 다음과 같은 기능을 제공한다:
- 보안 인증서 생성 및 관리: 노드 간의 보안 통신을 위해 필요로 하는 인증서를 생성하고 관리할 수 있다.
- 보안 정책 생성 및 배포: 각 노드에 대해 정책을 설정하고, 이를 네트워크 상의 모든 노드에 배포한다.
- 노드 간의 안전한 통신 관리: SROS2를 통해 노드들이 안전하게 통신할 수 있도록 설정한다.
SROS2는 ROS2의 기본 보안 기능을 활용하여 더 안전한 통신을 보장하며, 사용자가 쉽게 보안 기능을 설정하고 관리할 수 있도록 돕는다.