E2E 암호화


암호화란 무엇일까? 영어로는 Cryptography crypto (비밀) + graphy (그리다). 말 그대로 비밀을 만드는 것이 암호화이다. 우리는 데이터를 비밀로 만들기 위해 평문 (평범한 텍스트)를 암호문으로 변환하기 위해 암호를 사용한다. 암호를 해독할 수 있는 키가 없으면 암호문을 쓸모없는 횡설수설이 되어버린다. Encryption(암호화)를 했다면 반드시 Decryption(해독)이 필요할 것이다. 수신자는 메시지를 해독하기 위한 '키' 역할을 하는 알고리즘과 이동한 숫자를 모두 알고 있어야 한다.

우리는 이번 글에서 암호화 중 대칭 암호화 (Symmetric Encryption)과 비대칭 암호화(Asymmetric Encryption)이 무엇인지 알아보고, 각 암호화에서 대표적으로 사용되는 알고리즘인 AESRSA에 대해서 알아볼 것이다. 렛츠코!

대칭 암호화 (Symmetric Encryption)

대칭 암호화는 한 개의 비밀키로 암호화와 복호화가 가능하다. 수신자와 발신자 모두가 알고 있는 키 (대칭 키)를 사용한다. 보낸 사람은 해당 키를 사용하여 메시지를 암호화하고, 받는 사람은 동일한 키를 사용하여 메시지를 해독한다. 암호화와 복호화에 같은 키를 사용하기 때문에 보안에 취약하다는 단점이 있다. 사용되는 알고리즘으로는 AES, DES, MASK 등 암호 알고리즘 방식이 있다. 여기서는 AES 알고리즘에 대해 알아보도록 하자.

AES (Advanced Encryption Standard)

AES는 국립 표준 기술 연구소 (NIST)에서 2001년 설립한 고급 암호화 표준이다. AES는 1997년 IBM과 NASA가 개발한 데이터 암호화 표준 (Data Encryption Standards)를 대체하게 되었다. 56비트 길이의 이진 키를 사용하는 DES는 1999년 기술 수준으로 이틀이면 모든 경우의 수를 시도해볼 수 있다고 한다. 그리하여 2001년 완성된 DES를 대체하는 암호화 표준이 바로 AES다. 미국 NSC (National Security Agency)는 이 정보를 사용하여 국가의 일급 비밀 정보를 보호하고 있다고 한다.

AES는 128, 192 또는 256비트 크기의 키로 침입자가 무차별 대입하기 훨씬 어렵게 만들었다. 128 비트 키의 경우 모든 조합을 시도하는데 무려 1조 년이나 걸린다고 한다. 오늘날 AES는 아이폰의 파일 암호화부터 WPA2를 통한 WIFI 데이터 전송, HTTPS 사용하여 웹 사이트에 액세스하는 등 모든 곳에서 사용된다.

참고 자료: Announcing the ADVANCED ENCRYPTION STANDARD (AES)

비대칭 암호화 (Asymmetric Encryption)

비대칭 암호화는 두 개의 다른 키 (공개 키와 비공개 키)를 사용한다. 공개키(Public Key)로 암호화하고, 개인 키(Private Key)로 복호화 할 수 있다. 반대로 개인 키를 이용해서 암호화 (전자 서명) 후 공개키 (서명 검증)으로 복호화도 가능하다. 하나의 키로 암호화 복호화를 하는 대칭 키 방식과는 다르다. 소유자만이 개인 키를 사용하여 암호화 할 수 있기 때문에 위조 불가능한 서명처럼 작동하는 것이다. 예를 들면 도로에 있는 우편함과 같다. 우편함은 공개적이지만, 우편함을 열 수 있는 사람은 열쇠를 가지고 있는 사람 (개인 키를 가진 사람)으로 한정되어있는 것처럼 말이다.

비대칭 암호화의 대표적인 알고리즘 RSA 알고리즘에 대해 살펴보도록 하자!

RSA (Rivest–Shamir–Adleman)

무슨 단어의 조합인가 싶지만, 바로 공동 발명가 세 명의 이름을 합친 것이다. RSA는 암호화를 위해 공개 키를 사용하고, 의도된 수신자에게만 알려진 다른 키 (개인 키)가 필요한 비대칭 알고리즘이다. RSA 방식으로 암호화를 하기 위해선 먼저 키를 만들어야 한다. 개인 키와 공개 키를 만들었다면, 만든 공개키를 이용해서 데이터를 암호화한다. 수신자는 암호화되어 온 정보를 복호화하기 위해 개인 키를 이용한다. 키를 발급받는 방법에 대한 내용은 아래 참고 자료에서 확인할 수 있다.

RSAAES보다 계산이 집약적이기 때문에 훨씬 느리다. 그 때문에 적은 양의 데이터만 암호화하는 데 사용된다고 한다. 일반적으로 사용자 데이터를 직접 암호화하는 데 사용되지 않고, 대칭키 암호화를 위한 공유 키를 전송하는 데 사용되는 경우가 많다. 여기서 AES과 RSA가 함께 사용되게 된다. AES는 동일한 키로 암/복호화를 하므로 키 관리 문제가 있다. 이 과정에서 키를 손상하지 않고 전 세계에 있는 수신자에게 배포할 수 있는 방법이 바로 AES 와 RSA 암호화의 장점을 결합하는 것이다. RSA를 사용하여 데이터를 해독하는 데 사용할 수 있는 자신의 비밀 AES 키를 암호화하고 각 수신자에게 전달함으로써 두 암호화의 이점을 모두 얻을 수 있다. 그건 바로 보안과 속도! 짝짝짝.

참고 자료: A Method for Obtaining Digital Signatures and Public-Key Cryptosystems

마무리

암호화를 공부하면서 해킹에 대해서도 조금 찾아보게 되었다. 버그를 찾고 시스템의 안정성을 높이기 위해 소프트웨어의 보안 허점을 폐쇄하려는 해커인 white hat, 그리고 컴퓨터 취약점과 데이터를 도용하여 판매할 의도가 있는 악의적인 해커인 black hat. 또 해킹 방법도 가지각색이다. 피싱 전자메일 링크를 보내어 사용자가 들어오게 하는 social engineering, 공격자가 신분을 속이고 기밀 세부 사항을 공개하도록 지시하는 pretexting, 사진이나 인보이스 같은 무해한 첨부파일로 가장했지만, 악의적인 소프트웨어를 포함한 트로이 목마, 웹 사이트를 공격하는데 일반적으로 사용되는 코드 삽입 등이 있다. 이 전에는 그저 코드를 작성하는 웹 개발만을 생각했다면, 지금은 인프라나 보안에 대한 중요성을 알게 되며 조금 더 넓은 시야로 바라보게 된 것 같다. 하드웨어 암호화인 애니그마 부터 차근차근 암호화의 연대기를 살펴보니, 마치 역사 기록을 한 편 훑은 것 같은 기분도 든다. 역시 프로그래밍 세상은 참 넓고도 흥미진진하다!