종단간 암호화 (E2EE, 단대단) 초보용 쉬운 설명

영어로하면 End to End Encryption(E2EE) 입니다. 사람에 따라 다르겠으나 일반적으로 봤을 때 한국어로 옮기면 종단간, 단대단 이렇게 직관적으로 이해하기가 어려워집니다.

종단간 암호화의 핵심은 매우 간단합니다. ‘데이터(파일, 대화, 문자 등)를 암호화해서 나 혹은 내가 주고 받고자 하는 사람만 확인 가능’하게 하는 것입니다.


가장 친숙한 예를 들면, ‘메신저’가 있습니다. 좀 더 구체적으로 이야기하면 텔레그램 ‘비밀 대화’를 예로 들 수 있어요. 카카오톡 비밀 채팅도 마찬가지 입니다.

종단간 암호화는 어떻게 작동하나요?

텔레그램 비밀 채팅을 시작하면 아래와 같은 메세지가 뜹니다.

  • 단대단 암호화(종단간, E2EE 모두 같은 말)를 사용합니다.
  • 서버에 어떤 흔적도 남기지 않습니다.
  • 자동 삭제 타이머가 있습니다.
  • 전달 기능이 허용되지 않습니다.

[나 – 메신저 회사 – 상대방] 이렇게 대화가 오갑니다. 서로 대화는 주고 받아야 하니 ‘뀘쀙쀹뚫2#$뤱웲’ 이런 암호화 문자만 주고받을 수는 없습니다. 그럼 이렇게 되어야겠죠.

  1. 내가 “우리 거기서 몰래 만나자”라고 쓰면
  2. ‘암호화’되어 누구도 알아볼수 없게 바뀝니다.
  3. ‘암호화 된 상태’로 회사 서버를 지나서
  4. 상대방에게 도착 된 후에 ‘복호화’
  5. 내가 보낸 메세지를 확인
  6. 상대방이 나에게 보낼 때도 동일하게

이렇게 되면 나와 상대만 알 수 있는 대화가 가능하고, 중간에 해커가 훔쳐봐도 그리고 서비스 회사가 내용을 저장한다 하더라도 내가 무슨 이야기를 주고 받았는지 알 수 없게 됩니다.

간단 복습 예제

발신자(Netxhack)와 수신자(Anonymous)가 대화를 주고 받는다고 가정하고 이해를 돕기위해 간단하게 설명하면

  1. 저의 스마트폰에서 “야 오늘 그 물건 가지고 네비에 ‘익명로 123’ 찍고와“라는 메세지를 보내면
  2. 메세지는 기기에서 먼저 암호화 되어 “orAi17Qiy2E9WZJSb3mvSMIuQ5V0CTYDx56C8EKT1WmkG04QqWtRsF2WpyXIxWJDuwWH/2Pyo5+IO0Yx0oN/m2uLVabcYM4mbciH4CKYpxE=“와 같은 형태로 변합니다.
  3. ‘암호화 된 상태’로 메신저 서버로 전송되어 수신자에게 전달.
  4. 수신자의 기기에 도착하면 우리 둘만 가지고 있는 ‘암호화 키’로 해독됩니다. 다시 Anonymous가 Netxhack에게 답장할 때도 동일합니다.
  5. 중간에서 전달해주는 서버 및 관리자, 혹은 중간에서 메세지를 가로채려고 하는 해커 등 그 누구도 이 암호를 해독할 수 없으므로, 제3자는 메시지 내용을 볼 수 없습니다.

그렇기 때문에 시그널 서버에서 채팅 내용을 저장한다 하더라도 ‘암호화 된 내용’만 쌓여있기 때문에 서버르 압수 수색 당한다 하더라도 내가 어떤 내용을 주고받았는지는 알 수 없습니다.

종단간 암호화 작동 원리

이렇게 하면 됩니다.

위대하신 AI영도자께 여쭈어 보았더니 기술적으로 아래와 같이 이루어진다고 설명해주셨습니다. (제가 정리를 더 잘할 자신이 없어서 무릎꿇고 여쭤봤습니다.)

1. 키 생성 및 교환

  • 비대칭 암호화: 송신자와 수신자는 각각 공개 키(public key)와 비밀 키(private key) 쌍을 생성. 공개 키는 다른 사람에게 공유하며 비밀 키는 본인만 소유.
  • 키 교환: 송신자와 수신자는 (주로 Diffie-Hellman 키 교환 방식을 통해) 서로의 공개 키를 안전하게 교환.

2. 메시지 암호화

  • 세션 키 생성: 내가 보낼 메시지를 암호화하기 위해 일회성 대칭 키(세션 키)를 생성(대칭 키 암호화는 비대칭 암호화보다 속도가 빠름)
  • 메시지 암호화: 생성된 세션 키를 사용하여 메시지를 암호화.
  • 세션 키 암호화
    • 비밀 키를 사용하여 세션 키 암호화
    • 암호화된 세션 키는 메시지와 함께 전송.

3. 메시지 전송

  • 암호화된 데이터 전송: 위의 암호화 메시지와 세션 키는 네트워크를 통해 수신자에게 전송됩니다. 이 과정에서 데이터는 암호화된 상태로 유지됩니다.

4. 메시지 복호화

  • 세션 키 복호화: 암호화 된 메세지를 받은 수신자는 자신이 가지고 있는 비밀 키를 사용하여 암호화된 세션 키를 복호화.
  • 메시지 복호화: 복호화된 세션 키를 사용하여 메시지를 복호화. 그러면 내가 보낸 원본 메시지 확인 가능!

주요 단계 요약

  1. 키 생성: 나 그리고 대화 상대는 각각 공개 키와 비밀 키를 생성.
  2. 키 교환: 서로의 공개 키를 교환.
  3. 메시지 암호화: 나는 세션 키로 메시지를 암호화 후 이 세션 키를 자신의 비밀 키로 암호화.
  4. 메시지 전송: 암호화된 메시지와 세션 키를 수신자에게 전송.
  5. 메시지 복호화: 수신자는 자신의 비밀 키로 세션 키를 복호화해서 이를 사용해 메시지를 복호화.

클라우드 저장소도 E2EE 되나요?

우리가 많이 사용하는 드롭박스, 구글드라이브 등은 EE2E를 지원하지 않습니다.(한국 기업은 언급도 하지 않겠음) 애플의 iCloud는 일부 데이터에 한해 제공합니다. 종단간 암호화를 지원하는 클라우드 서비스는 그리 많지 않습니다. 꽤 비싸기도하고.

그런 경우에는 조금 귀찮지만 방법이 있습니다.

  • 암호 걸린 압축파일로 업로드 하기
  • cryptomator로 실시간 암호화시켜 업로드하기

이정도면 정말 쉽게 설명했다고 생각하는데 혹시 이해가 안되시면 댓글 주세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다