근래들어 텔레그램 수사 협조, 카카오톡 검열 등등 메시지와 보안에 관한 논란이 많다
관심이 없는 사람들은 별로 궁금하지 않겠지만 이런 질문이 생길 수 있다:
1. 내가 서버에 어떤 정보를 보내고 상대방은 그 정보를 받을 수 있는데 서버가 털리면 끝인거 아님?
2. 그게 아니라는 일부 메신저는 어떻게 그게 가능한거임?
3. 서버가 협조 안 해줘도 내 핸드폰 털리면 끝 아님?
먼저 3번은 이전 글을 참고해서 그런 불상사가 없도록 하자. 3번이 참이되지 않도록 할 여러 방법들이 있지만 애초에 그럴 일이 없도록 하는 것이 제일 안전하다.
1, 2번이 이 글의 핵심인 종단간 암호화에 대한 내용이다.
먼저 카카오톡을 예로 들어보자:
카카오톡은 아주 단순하게 중간 서버를 거쳐 3일간 평문으로 저장이된다. 이론적으로 이 3일간 카톡 서버가 압수수색이 되고 일사천리로 진행되면 내가 어떤 내용을 보냈는지 100% 확인을 할 수 있다.
물론 그런 초단기간동안 영장이 나온다든가 하는 일은 현실적으로 없지않음? 할 수 있는데 카톡은 감청도 시켜준다.
카톡이 중요한건 아니고 중요한건 다른 서버에 넘어가는 것은 필연적으로 어떤 신뢰를 요한다는 점이다.
여기서 잠깐 짚고 넘어가야할 중요한 개념이 세가지가 있다:
프라이버시: 프라이버시는 너의 데이터가 너가 의도한 사람들에게만 보이도록 하는 것과 관련된 개념이다. 1:1 메시지라면 나와 내 상대 이외의 사람들에게 접근을 내어주지 않는 것이 프라이버시의 개념이다.
보안: 보안은 내가 쓰는 하드웨어/소프트웨어에 대한 신뢰와 관련된 개념이다. 중국 휴대폰을 쓰지 않는다든가, 정체를 알 수 없는 메신저를 사용하지 않는 것이 보안의 개념이다.
익명성: 익명성은 내가 지속적으로 특정될만한 정보 없이 활동하는 것과 관련된 개념이다. 여기서도 카톡의 예시를 들고자하는데, 카톡은 3일이 지나면 내용 확인은 안돼도 수/발신 기록은 90일 내에 법원을 통해 받아낼 수 있다. 카카오톡은 무조건 내 실명과 연결이 될 수 밖에 없기때문에(해외 등등 우회해서 쓰거나 대포폰을 쓰면 모르겠지만) 이렇게 조회가 되면 내가 안 보냈어요 하는 부정을 할 수가 없게된다. 이게 익명성과 관련된 개념이다.
종단간 암호화는 기본적으로 프라이버시와 관련이 있다. 기본적으로 카카오톡은 프라이버시도 보장되지 않는 상황이다.
그렇다면 아래의 상황을 가정해보자:
A와 B는 각각 열쇠와 자물쇠를 하나씩 가지고있다. 당연하지만 A의 열쇠로 B의 자물쇠를 열 수 없다.
하지만 열려있는 자물쇠를 잠굴때에는 열쇠가 필요 없으니 A는 B에게 자신의 열쇠와 상응하는 자물쇠를, B도 마찬가지로 자신의 자물쇠를 건네줄 수 있다.
A는 B의 자물쇠를 사용해 심한말을 담은 박스를 잠궈 서버를 통해 B에게 전달시킨다. 서버는 열쇠가 없기때문에 내용을 확인 할 수 없다. 프라이버시가 생긴 것이다.
B는 자신의 열쇠를 통해 자물쇠를 열고, 심한 말을 볼 수 있다. 이게 (공개키 암호화를 사용한) 종단간 암호화의 기본 원리이다.
자물쇠와 열쇠는 비유인거고, 중요한 점은 상대방은 공개돼있는 정보를 통해 암호화를 하고, 그 암호화를 풀 수 있는 사람은 나, 또는 다른 수취자뿐이라는 점이다.
카카오톡은 사찰 논란 이후 비밀채팅 기능을 도입했는데, 이게 종단간 암호화를 사용한 방식이다.
그럼 카카오톡을 믿을 수 있나? 일단 익명성이 보장되지 않는다는 사실은 둘째치고 카카오톡이 내부에서 키를 어떤식으로 만들고 주고받는지 우리는 확인 할 길이 없기때문에.. 당장 내 키가 노출되면 암호화고 뭐고 없는거다.
참고로 텔레그램도 일반채팅은 종단간암호화를 사용하지 않는다. 그렇기때문에 텔레그램의 보안성은 온전히 텔레그램이 좆까라는 식으로 나왔기 때문에 보장돼왔던 것이다.
대표적인 보안 메신저 Signal은 클라이언트와 프로토콜이 전부 소스코드가 공개돼있기때문에 신뢰 할 수 있다고 할 수 있다. 물론 핸드폰 번호를 필요로한다는 점에서 익명성 문제는 있다. 더 찾아보면 Session 등등 익명성 문제도 해결해보려 노력하는 메신저들도 있고, Briar처럼 P2P랑 Tor만 쓰는 메신저도 있다.
그래서 어쩌라노? 어차피 다 카톡쓰는데 뭔 소용?
그래서 유용할 수도 있는 툴을 하나 소개해보려한다
보통 이메일을 암호화할땐 PGP라는걸 쓰는데, PGP가 딱히 복잡한건 아니지만 이 글에서는 조금 더 단순한 age라는 포맷을 사용하는 방법을 보여주려한다. 누구든 종단간 암호화를 케이크처럼 쉽게 먹을 수 있다. 사실 실제로 쓰는걸 보면 아 이런식이구나 감이 와서 보여주는거임
먼저 키를 만들면 위에서 볼 수 있듯 Private key와 Public key가 한쌍 나온다. Private key는 말 그대로 소중히 보관해야하고 노출이 되어서는 안된다.
앞서 받은 Public key로 짧은 텍스트를 암호화하면 아래처럼 긴 랜덤한 문자열이 나오는데, 서버에는 실제로 저게 보내지는 것이다. 해커가 서버를 뚫어내도 저걸로 얻을 수 있는 정보는 없다.
이제 다시 Private key를 사용해서 복호화를 하면 저 랜덤하게 문자열을 제대로 평문으로 풀어내는 것을 볼 수 있다.
Age도 그렇고 PGP도 그렇고 모두 파일도 암호화가 가능하다. Private key만 제대로 보관해두면 안전하게 파일도 보관 할 수 있는 것이다.
당장 고소갤러리 가면 구글 드라이브에 페도짤 받아두고 징징거리는 병신들이 많은데 페도는 죽어도 되는건 둘째치고 기본적으로 그런 민감한 데이터를 제 3자의 서버에 올릴때엔 암호화는 필수적이다.
싱붕이들도 김유식도 모를(사실 Private key가 공개돼있기때문에 알 수 있다) 비밀 메시지를 보내고싶으면 위에서 받은 Pubkey를 사용해서 보내보도록 하자
age1rcmu9x8h7myl3h3kaykvxd06nlpnf4jqjqv88y4j54rtz23savjs2mhl4p
참고로 예시로 사용한 웹사이트는 WASM을 사용한 Age 웹앱인데 서버로 보내는 것은 일체 없으니 안심하고 써도 된다. 평소에도 간단히 파일 암호화 할 것 있으면 써도 좋음:
https://age-wasm.ey.r.appspot.컴/
물론 age cli가 매우 쉬워서 컴퓨터에 익숙하면 그쪽이 훨씬 낫다.
{{_DCCON_7eeccc70b48177a760bcdab418d2286cb80ad2dc9d62dad191236fb35e1349417e2cfbd71f5c963f471fd94e813884ae3d40_}}
비밀얘기할래?