개요

ROS2는 DDS(Data Distribution Service) 프로토콜을 기반으로 노드 간 통신을 수행하며, 보안 문제를 해결하기 위해 다양한 보안 메커니즘을 제공한다. DDS 보안은 ROS2의 SROS2(Secure ROS2) 구현을 통해 제공되며, 주로 인증, 권한 관리, 데이터 암호화 및 무결성 검증을 다룬다. 이 과정에서 주요 요소는 DDS 보안 프로파일(Security Profile)과 각 노드 및 통신의 보안 설정이다.

DDS 보안 개념

ROS2의 보안 설정은 DDS 보안 사양을 따르며, 이를 위해 다음과 같은 보안 영역이 설정된다.

인증(Authentication)

인증은 각 노드가 통신 전에 자신의 신원을 증명하는 과정이다. 이를 위해 X.509 인증서를 사용하며, 각 노드는 CA(Certificate Authority)로부터 발급받은 인증서를 가지고 있어야 한다.

  1. X.509 인증서
    각 노드의 인증은 X.509 인증서를 기반으로 이루어지며, 이 인증서는 CA에 의해 발급된다. 각 노드는 자신을 나타내는 고유한 인증서를 가지며, 통신을 시작하기 전에 상대방 노드와 인증서를 교환한다. 이때 사용하는 프로토콜은 TLS(Transport Layer Security)이다.

    인증 과정은 다음과 같이 이루어진다.

    • 노드 A는 자신의 인증서를 노드 B에게 보낸다.
    • 노드 B는 노드 A의 인증서를 확인하고 CA를 통해 검증한다.
    • 검증이 완료되면 노드 B는 자신의 인증서를 노드 A에게 보낸다.
    • 노드 A도 같은 방식으로 노드 B의 인증서를 검증한다.

    이 과정을 통해 양쪽 노드는 서로의 신원을 확인하고 통신을 시작한다.

권한 관리(Authorization)

인증이 완료된 후, 각 노드는 권한을 관리하기 위한 정책을 적용한다. 이 정책은 각 노드가 어떤 데이터를 퍼블리싱(publish)할 수 있고, 어떤 데이터를 구독(subscribe)할 수 있는지 정의한다. 권한 관리는 XML 권한 정책 파일을 사용하여 설정된다.

권한 정책 파일은 다음과 같은 구조로 정의된다.

<dds xmlns="http://www.omg.org/spec/DDS-Security-OMG-Ext/1.0">
  <permissions>
    <grant name="NodeA">
      <subject_name>CN=NodeA,OU=Robotics,O=ROS2,L=Seoul,C=KR</subject_name>
      <validity>
        <not_before>2023-01-01T00:00:00</not_before>
        <not_after>2024-01-01T00:00:00</not_after>
      </validity>
      <allow_rule>
        <publish>
          <topics>
            <topic>camera_data</topic>
          </topics>
        </publish>
        <subscribe>
          <topics>
            <topic>sensor_data</topic>
          </topics>
        </subscribe>
      </allow_rule>
    </grant>
  </permissions>
</dds>

데이터 암호화(Encryption)

데이터 암호화는 DDS의 보안 확장에 의해 제공되며, 퍼블리셔와 서브스크라이버 간의 메시지를 안전하게 보호하기 위한 방법이다. 이를 통해 데이터를 중간에 가로채거나 수정할 수 없도록 보장한다.

암호화 방식은 다음과 같다.

암호화된 데이터를 전송하는 과정은 다음과 같이 수식으로 표현될 수 있다.

\mathbf{C} = \mathbf{E}(\mathbf{M}, \mathbf{K})

여기서:

복호화는 다음과 같이 이루어진다.

\mathbf{M} = \mathbf{D}(\mathbf{C}, \mathbf{K})

여기서:

무결성 검증(Integrity)

무결성 검증은 데이터를 송수신하는 과정에서 그 내용이 변조되지 않았음을 보장하기 위한 과정이다. 이를 위해 메시지 인증 코드(MAC, Message Authentication Code)를 사용하며, 퍼블리셔가 메시지를 전송할 때 MAC을 생성하고, 서브스크라이버가 이를 검증한다.

무결성 검증 과정은 다음과 같이 수식으로 나타낼 수 있다.

  1. MAC 생성
\mathbf{MAC} = \mathbf{H}(\mathbf{M}, \mathbf{K})

여기서:

메시지를 받은 서브스크라이버는 수신한 메시지와 MAC을 사용하여 무결성을 검증한다.

\mathbf{MAC}_{\text{received}} = \mathbf{H}(\mathbf{M}_{\text{received}}, \mathbf{K})

만약 \mathbf{MAC}_{\text{received}}가 퍼블리셔가 보낸 \mathbf{MAC}과 일치하면, 메시지가 변조되지 않았다고 판단한다. 그렇지 않다면 메시지가 전송 중 변조되었을 가능성이 있다.

보안 프로파일 설정

ROS2에서 노드 간의 보안 설정은 DDS 보안 프로파일을 사용하여 이루어진다. 이는 퍼블리셔와 서브스크라이버 간의 통신에서 보안 기능을 활성화하는 방법을 정의한다. 보안 프로파일은 security.xml 파일을 통해 설정되며, 이 파일에는 각 노드의 보안 정책이 포함된다.

보안 프로파일 예시

<dds xmlns="http://www.omg.org/spec/DDS-Security/20170901/">
  <security>
    <authentication>
      <enable>true</enable>
    </authentication>
    <encryption>
      <enable>true</enable>
      <algorithm>AES-256</algorithm>
    </encryption>
    <access_control>
      <enable>true</enable>
    </access_control>
  </security>
</dds>

위의 XML 구성에서:

네트워크 보안 설정

ROS2에서 노드 간 통신은 주로 네트워크를 통해 이루어지므로 네트워크 보안 설정이 중요하다. ROS2의 보안 기능을 사용하면 네트워크를 통해 송수신되는 모든 데이터가 암호화되고, 보안 채널을 통해 전송된다.

네트워크 보안 구성

ROS2에서는 보안 기능을 활성화하기 위해 다음과 같은 단계를 수행해야 한다.

  1. 보안 설정 파일 생성 각 노드는 security.xml 파일을 사용하여 보안 설정을 정의한다. 이 파일에는 각 노드의 인증, 암호화, 권한 관리 설정이 포함된다.

  2. 보안 설정 활성화 ROS2 노드를 실행할 때 보안 설정을 활성화하려면, 다음과 같이 명령어를 사용한다.

    bash export ROS_SECURITY_ENABLE=true

  3. 보안 설정 확인 노드 간 통신이 보안 설정에 따라 정상적으로 이루어지는지 확인한다. 이를 위해 ros2 security list 명령을 사용할 수 있다.

보안 적용 시나리오

ROS2에서 보안 설정이 활성화된 상태에서 노드 간 통신이 이루어지는 예시를 들어 보겠다.

이때, 퍼블리셔와 서브스크라이버 간의 모든 통신은 암호화된 상태로 이루어지며, 데이터가 중간에 가로채이거나 변조되는 위험을 방지할 수 있다.