Ruby를 활용한 종단 간 암호화(End-to-End Encryption)와 MLS (Messaging Layer Security) 구현

[EN] You Can Save Lives With End-to-end Encryption in Ruby / Ryo Kajiwara @s01

3줄 요약

  • 본 강연은 억압과 전쟁 상황에서 생명을 구할 수 있는 종단 간 암호화(E2E)의 중요성을 강조합니다.
  • Ruby를 이용하여 상호 운용 가능한 메시징 레이어 보안(MLS) 프로토콜을 구현하는 복잡한 기술적 과정과 특징을 상세히 다룹니다.
  • Ruby 생태계에 현대 암호화 기술을 통합하고 통일된 API를 구축하여 Ruby의 지속적인 관련성과 인터넷의 자유로운 발전을 도모할 필요성을 역설합니다.

본 강연은 RubyConf 2023에서 Rio Kazumara(S01)가 발표한 'End-to-End Encryption Saves Lives and You Can Start Saving Lives with Ruby Too'의 내용을 요약합니다. 발표자는 종단 간 암호화(E2E)의 중요성과 함께, Ruby를 활용하여 상호 운용 가능한 메시징 레이어 보안(MLS) 프로토콜을 구현하는 기술적 접근 방식을 상세히 설명합니다. 특히, 기존 SMTP의 한계를 지적하며 E2E 암호화가 현대 통신에서 필수적인 이유와 그 사회적 의미를 강조합니다.

E2E 암호화의 사회적 중요성: 발표자는 E2E 암호화가 억압과 전쟁 상황에서 생명을 구할 수 있는 필수적인 통신 수단임을 강조하며, 범죄 악용 우려에도 불구하고 그 사회적 중요성을 역설합니다.

MLS 프로토콜 소개: MLS는 RFC 9420을 기반으로 하는 상호 운용 가능한 E2E 암호화 프로토콜로, 그룹 통신에서 전방향 비밀성(Forward Secrecy)과 사후 침해 보안(Post-Compromise Security)을 보장합니다. 이는 트리 구조를 활용하여 다인 그룹 암호화를 효율적으로 구현합니다.

MLS의 핵심 구성 요소 및 작동: MLS는 키 스케줄, 시크릿 트리, 그리고 가장 복잡한 트리KEM(TreeKEM)으로 구성됩니다. 트리KEM은 그룹 구성원 간에 커밋 시크릿을 일관되게 공유하는 메커니즘으로, 업데이트 경로와 공동 경로 노드 개념을 통해 안전한 키 전달을 수행합니다. 그룹의 사용자 추가/제거 및 키 업데이트는 ‘제안’과 ‘커밋’ 메시지를 통해 처리됩니다.

Ruby 구현의 기술적 접근: 발표자는 Ruby에서 MLS 이진 프로토콜 구현 시, 가변 길이 벡터 및 선택적 값 처리를 위한 사용자 정의 구조체와 MeoStructBase 클래스를 활용한 직렬화/역직렬화 방식을 소개합니다. 또한, Ruby 환경에서 트리를 배열 기반으로 효율적으로 표현하는 방법을 제시합니다.

Ruby의 현대 암호화 미래: 발표자는 Ruby 생태계에 하이브리드 공개 키 암호화(HPKE) 및 OpenSSL API 통합, 양자 내성 암호 도입의 필요성을 강조합니다. Ruby가 Rails를 넘어 클라이언트 측 E2E 암호화에도 활용될 수 있음을 보여주며, 다양한 환경에서 일관된 암호화 API 래퍼 구축 비전을 제시합니다.

강연의 결론에서 발표자는 Ruby에서 현대 암호화, 특히 종단 간 암호화 기술이 필요한 두 가지 핵심 이유를 제시합니다. 첫째, Ruby가 다른 언어에 뒤처지지 않고 관련성을 유지하기 위함입니다 (MLS 구현이 Python보다 앞서 있다는 점을 언급). 둘째, 인터넷의 자유를 보장하는 데 Ruby가 중요한 역할을 할 수 있기 때문입니다. 본 강연은 Ruby 개발 커뮤니티가 보안 및 암호화 분야에 더욱 적극적으로 참여하여 Ruby 생태계가 더욱 견고하고 혁신적으로 발전할 수 있는 잠재력을 보여줍니다.