본문 바로가기
놀기/VoIP

SRTP (정리 중...)

by Hi~ 2021. 6. 28.

길고 영어고 그렇지만 RFC 문서를 참조하는 것은 상당히 효율적이다.

그러지만 만만치 않다. ㅠㅠ

 

https://datatracker.ietf.org/doc/html/rfc3711 

 

rfc3711

 

datatracker.ietf.org

 

Secure RTP의 구조는 다음과 같다. (BBS 시절을 보내서 인가 이런 도식이 너무 좋다. ㅎ)

 

wireshark에서 보면 이런 모양이다.

 

 

집적 구현하기에는 무리가 있어 Open Source를 찾아보았다.

 

https://github.com/cisco/libsrtp

 

cisco/libsrtp

Library for SRTP (Secure Realtime Transport Protocol) - cisco/libsrtp

github.com

 

다양한 것이 있지만, RTOS로 포팅도 용이한 libsrtp를 선택하였다.

빌드는 간단히 ./configure를 실행하면 된다.

 

RTOS 기반으로 포팅을 원한다면

https://github.com/nvannote/esp_ports

 

nvannote/esp_ports

A component build for Cisco SRTP on the ESP32. Contribute to nvannote/esp_ports development by creating an account on GitHub.

github.com

 

RTOS 기반의 다른 환경으로도 빌드하면서 나타나는 오류 몇 개만 잡으면 손쉽게 빌드가 가능하다.

 

먼저 포함되어 있는 TEST program (rtpw)을 사용해 보자.

문서에서는 set으로 k값을 설정하게 되어 있는데 export를 사용하자.

 

wireshark로 보면 아래와 같이 나오고 0x80으로 시작하는 RTP Packet 임을 알 수 있다.

테스트에서 사용된 값은 key/salt이 되는 k (b 옵션으로 base64 string을 넣을 수 있음), key size 그리고 SSRC (소소 코드 내에 하드코딩) 값이다.

 

먼저, LinPhone으로 캡쳐한 데이터와 비교해보자.

key 정보는 SDP 협상 과정에서 전달된다. (key가 노출되니 암호화라고 하기에는... TLS 기반으로 해야만 함)

LinPhone과 직접 통신하여 확인하면 좋겠지만 여러 변수가 생기는 관계로 데이터만 추출해서 정상적으로 동작하는지 확인해보자.

 

그리고 SIP에 붙어 잘 동작하는지에 대한 검증도 필요하다. 어떻게 할까...

 

... 여전히 작업 중 ...

댓글