개발자가 개발을 할 때 고뇌하는 순간이 있습니다.

개인정보를 저장할 때 어떤 암호화를 어떻게 사용할 것인가에 대한 고민을 하게됩니다.
언제나 고민이 되는 이 암호화를 파해쳐 보려고자 합니다.
암호화란 무엇일까?
위키에서는 이렇게 설명하고 있다.
승인된 당사자만이 해독할 수 있는 방식으로 정보를 변환하는 과정
예를 들어 카카오톡 이라는 단어를 c3baec90e45684dc59c1846fff005... 처럼 나만 아는 문자로 변환하여 외부로부터 데이터를 보호하는 방법입니다.
특히 개인정보 같은 민감한 데이터는 큰 피해를 줄 수 있기에 개인정보의 암호화는 법적으로 명시 되어 있을 만큼 개인정보의 암호화는 중요합니다.
암호화의 과정
암호화의 과정은 크게 3단계로 나눌 수 있습니다.
평문(Plain Text) -> 암호화 알고리즘 & 키 (Key) -> 암호문
평문 Plantext
암호화의 평문은 암호화를 하기 전의 원본 데이터입니다. 텍스트 뿐만 아니라 이미지, 동영상, 파일 등등 컴퓨터로 다룰 수 있는 모든 데이터가 평문에 해당됩니다.
암호화 알고리즘 & Key
암호화의 알고리즘 & Key는 평문의 데이터를 암호화 시키는 중요한 과정입니다.
- 암호화 알고리즘 : 데이터를 암호화 하는 수학적인 공식이나 절차
- 키 : 공개된 알고리즘을 사용하기 위한 값
이해를 돕기 위해 카이사르 암호를 예를 들어보겠습니다.
- 평문 : ABC
- 알고리즘 : "알파벳을 뒤로 n칸씩 밀어라"
- 키 : 3
- 결과 : DEF
암호화 알고리즘은 이처럼 평문의 데이터를 알파벳을 뒤로 n칸씩 밀어라와 같이 암호화 하는 수학적인 공식이나 절차이고 키는 그 암호화를 수행하기 위한 값으로써 그 역할을 담당합니다.
암호문 Ciphtertext
암호문은 평문의 데이터를 암호화 알고리즘과 키로 만들어진 결과물입니다.
이렇게 생성된 암호화문은 슈퍼컴퓨터로 수만년이 걸릴정도로 복잡하고 안전하게 데이터를 보호할 수 있다.
암호화 알고리즘
암호화 알고리즘은 데이터를 다시 되돌릴 수 있는지(복호화 가능 여부)에 따라 크게 두 가지로 나뉩니다.
단방향 암호화
평문을 암호문으로 바꿀 수는 있지만, 암호문을 다시 평문으로 되돌리는 것은 불가능한 비가역적 알고리즘입니다. 좀 더 정확히는 암호학적 해시 함수(Hash Function)라고 부릅니다.
ABC -> DEF 가능 O, 다시 DEF -> ABC 가능 X
우리는 비밀번호를 입력할 때 ••• 표시가 되는건 시각적인 보호 일 뿐 진짜 보안은 DB에 저장 될 때 일어나게 됩니다. 서버에서는 사용자의 비밀번호를 있는 그대로 저장하지 않고, 대신 해시 함수를 통해 알 수 없는 결과 값으로 저장합니다. 로그인 등 비밀번호 일치여부를 확인하기 위해서는 평문의 비밀번호를 해쉬 함수를 통해 저장된 DB에 해시값과 비교하여 비밀번호 일치 여부를 확인합니다.
여기서 중요한 점은 해시함수를 통해서만 비밀번호의 일치여부만 확인할 수 있다는 점입니다.
이러한 점은 단방향 암호화의 비가역적 특성이 DB에서 비밀번호를 탈취한다고 하더라도 평문의 데이터를 알아 낼수 없다는 점을 알려줍니다.
초창기 단방향 암호화는 MD5, SHA-1이 사용되었으나 컴퓨터의 발달로 인해 우리가 흔히 아는 SHA-2계열 (SHA-256, SHA-512)이 현재 사용되고 있고 SHA의 취약점을 개선한 SHA-3가 2015년에 표준으로 제정되었으나 아직은 SHA-2 계열을 많이 사용하고 있고 그럼에도 양자 내성 암호로 뜨고 있습니다.
양방향 암호화
평문을 암호문으로 만들고, 다시 평문으로 복구(복호화)할 수 있는 가역적 알고리즘입니다.
ABC -> DEF 가능 O, 다시 DEF -> ABC 가능 O
양방향 암호화는 주민등록번호, 주소, 신용카드 결제 정보등 매우 중요한 데이터가 사용자에게 다시 노출 되어야 하는 경우에 사용됩니다.
양방향 암호화는 크게 대칭키 암호화(Symmetric Key), 비대칭키 암호화(Asymmetric Key)으로 나뉩니다.
대칭키 암호화 Symmetric Key
대칭키 암호화는 암호화하고 복호화하는 과정에서 완전히 동일한 하나의 비밀키를 이용하는 방식입니다.
복잡한 연산이 없어 처리속도가 매우 빠른 특징을 가지고 있고 대용량 데이터를 일괄적으로 암호화하는데 최적화되어 있습니다.
하지만 하나의 키로 암호화 하고 복호화하는 과정을 거쳐야 하기에 키를 안전하게 공유 보관하는 보안에 리스크가 존재합니다.
AES(AES-128, AES-256), DES, 3DES, SEED가 대칭키 알고리즘의 주요 알고리즘입니다.
비대칭키 암호화 Asymmetric Key
비대칭키 암호화는 타인애게 공개하는 공개키로 암호화를 진행하고 자신만이 소유한 개인키로 복호화 하는 2개의 수학적 키를 쌍으로 사용하는 방식입니다.
대칭키의 리스크 문제를 근본적으로 해결하고 암호화 뿐만 아니라 전자 서명을 통해 신원 인증과 같은 곳에서도 사용 가능합니다.
하지만 소수 판병을 위해 복잡한 수학적인 연산이 필요해 대칭키 대비 데이터 처리 속도가 매우 느리다는 단점을 가지고 있습니다.
RSA, ECC가 비대칭키의 주요 알고리즘입니다.
현재는 TLS/SSL과 같이 하이브리드도로 대칭키, 비대칭키를 사용하는 경우도 존재하여 두개의 장점만 합친 양방향 알고리즘을 사용하기도 하여 많은 부분에서 이 양방향 알고리즘을 사용하고 있습니다.
마치며
이번에는 암호화에 대해 간단하게 알아보았습니다.
암호화의 단계, 단방향, 양방향에 대해 알아보았습니다.
암호화는 현재 단순한 단방향, 양방향을 넘어 MSA(Microservice Architecture)라는 거대한 환경에서 KMS(Key Management Service)와 봉투 암호화(Evelope Encryption)을 이용하여 더 나은 보안을 제공하고 있습니다.
추후 단방향 암호화와 양방향 암호화, KMS등등 많은 암호화를 다루어 보려고 합니다.
긴글 읽어주셔서 감사합니다.