
E2EE를 구현하기에 앞서 종단 간 암호화(E2EE)에 대해 학습합니다.
CloudFlare 사이트에 정리가 너무 잘 되어있어서 참고했습니다.
종단 간 암호화란 모든 사용자로부터 메세지를 비공개로 유지하는 메세징 유형이다.
E2EE를 사용하면 메세지를 보내는 사람과 받는 사람 모두에게 메세지가 해독된 형태로만 표시된다.
발신자와 수신자는 복호화된 상태의 메세지를 읽을 수 있고, 이 둘을 제외한 모든 것은 읽을 수 없다.
일반적인 암호화 프로토콜은 발신자 → 서버 → 수신자로 이어지는 도중에 암호화가 된다.
하지만 서버에 도착했을 때 잠시 해독된 후 다시 암호화가 된다.
E2EE는 서버에서조차 해독이 불가능하다.
E2EE: End to End Encrypt라는 뜻이다. 중간에서 메세지를 해독하는 것이 불가능하다.
보통 암호화라고 하면 쉽게 떠올릴 수 있는 SHA-256 같은 해시 함수를 떠오릴 수 있을 것이다. 여기서 조금 더 추가하고 싶다면 Salt 같은 추가 값들을 넣어서 해싱할 것이다.
해싱 알고리즘을 사용해서 해시 값을 얻고 그것을 통해 암호화와 복호화를 진행한다.
즉, 암호화는 특정 키를 가지고 그 키를 알고 있을 경우 데이터를 해석할 수 있도록 데이터를 변경하는 방식으로 작동한다.
A가 B에게 메세지를 보냈는데 이 메세지를 C가 훔쳤다고 가정하자.
이 메세지가 암호화가 되어있을 경우 C는 메세지를 읽을 수 없다. 키를 모르기 때문이다.
A와 B끼리는 해당 키를 알고 있으니 이 둘만 읽을 수 있는 것이다.
E2EE를 사용하면 메세지를 암호화하고 해독할 수 있는 키가 사용자의 장치에 저장된다.
A와 B가 메세징 앱을 사용하는 경우, 앱은 A와 B의 휴대폰에 키를 저장한다.
그래서 A가 메세지를 B에게 보낼 경우 휴대폰에 저장되어있는 키를 사용해서 메세지를 암호화하고 B에게 전송된다. B의 휴대폰에도 키가 자동으로 적용되고 메세지가 해독되므로 B도 메세지를 읽을 수 있다.
E2EE 암호화에서는 공개 키 암호화라는 특수한 형태의 암호화가 사용된다.
비대칭 암호화라고도 불린다.
대칭 암호화의 경우 하나의 키로 암호화와 복호화를 모두 사용한다.
흔히 SSL이라고 알고 있는 전송 계층 보안(TLS)는 E2EE와 같이 공개 키 암호화를 사용한다.
하지만 TLS는 E2EE처럼 사용자 간에 사용되는 것이 아니라 사용자와 서버 간에 구현된다.
그렇기 때문에 사용자가 서버로 전송하는 데이터는 보호가 될 수 있으나, 서버 자체의 데이터는 암호화가 해독되어있다.
즉, TLS만으로는 완벽한 암호화가 불가능하다는 뜻이다.
어딘가에서는 이 메세지가 해독되어있기 때문이다.
E2EE는 메세지를 전송 중일 때 안전하게 보호하나 도착한 이후에는 보호하지 못한다.
사실 학습할 때 이 내용이 좀 재밌었는데, 당연한 내용이다.
A가 B에게 메세지를 보냈는데 C가 B의 휴대폰을 훔치거나, 혹은 몰래 뒤에서 읽거나, 맬웨어를 심어서 메세지를 훔칠 수도 있는데 이러한 경우에는 보호할 수 없다.
위의 예시들은 워낙 흔하지 않은 예시들이라고 생각한다.
어쩌면 저정도가 최선이라는 것에 더 잘 구현되어진 암호화라고 생각된다.
학습 참조
https://www.cloudflare.com/ko-kr/learning/privacy/what-is-end-to-end-encryption/