암호화와 복호화, 양방향 알고리즘(공개키, 비공개키)

|

개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)


암호란?

평문을 암호문으로 변환하거나 암호문을 평문으로 변환하는 기술을 의미합니다.

  • 평문: 해독 가능한 형태의 텍스트. 예: “123456”
  • 암호문: 해독 불가능한 형태의 텍스트. 예: “aWfwlknr!”

암호화와 복호화

  • 암호화: 평문을 암호문으로 변환하는 과정
    • 예: 평문(“123456”) -> 암호화 -> 암호문(“aEerwlrkn!”)
  • 복호화: 암호문을 평문으로 변환하는 과정
    • 예: 암호문(“aQwqlen!”) -> 복호화 -> 평문(“123456”)

암호화의 종류

암호화 종류에는 단방향 암호화와 양방향 암호화가 있습니다.

  • 단방향 암호화: 암호화 후 복호화를 할 수 없는 것이 특징입니다.
    • 예: 사용자 비밀번호. 사용자가 입력한 비밀번호를 암호화하여 DB에 저장이 될 때, 모든 접근자(개발자 포함)는 암호화 된 코드를 다시 평문으로 볼 수 없습니다. 이는 해킹이 되어도 복호화가 매우 힘든것이 특징입니다.
    • 해시 방식이 대표적
    • 해시 함수: 해시함수는 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환 시켜주는 함수로 입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환되며 동일한 값이 입력되면 언제나 동일한 출력값을 보장하는 함수를 의미합니다.
  • 양방향 암호화: 암호화와 복호화 모두 가능한 것이 특징입니다.
    • 예: 이메일, 번호 또는 전자 서명. 이와 같이 재사용성이 있는 정보는 암호화, 복호화 모두 이루어져야 합니다.
    • 대칭키, 비대칭키 방식이 대표적

양방향 알고리즘

  • 대칭형(비밀키 암호): 암호화, 복호화 시 모두 동일한 키를 사용
  • 비대칭형(공개키 암호): 암호화, 복호화에 서로 다른 키를 사용

1. 대칭형(비공개키 암호) 알고리즘

암호화, 복호화에 서로 동일한 키가 사용되는 암호화 방식으로 키를 비공개하는 것이 특징입니다. 속도가 빠르다는 장점이 존재하지만 키 배송 위험성이 존재하여 송신 측에서 수신측에 암호키를 전달하는 과정에서 키가 노출될 우려가 있다는 단점이 존재합니다. 대표적으로는 AES가 있습니다.

대칭키(비공개키)는 사용하는 키와 복호화 할때 사용하는 키가 동일한 암호화 기법으로, 대게 암호화 알고리즘이라 하면 위 알고리즘을 가리킵니다. 현재 가장 보편적으로 쓰이는 암호화 방식은 현 미국 표준 방식인 AES로 128~256비트 키를 적용할 수 있어 보안성이 뛰어나며 공개된 알고리즘이라 누구나 사용 가능합니다. 그 전에는 DES(Data Encrytion Standard)라는 알고리즘이 1975년부터 사용되고 있었으나 너무 오래되어 취약점이 발견됨에 따라 이를 대체 하기 위해 등장한 것이 AES라고 합니다.

대칭형 암호는 훌륭한 암호화 방식이긴 하지만 키 배송 관련으로 결정적인 문제가 존재합니다. 어떻게든 송신 측에는 수신 측에 암호키를 전달해야만 하고, 이 키가 배송과정에서 털리게 되면 아무리 뛰어난 암호화 알고리즘을 사용했더라도 속절없이 평문이 드러나게 됩니다. 안전하게 평문을 전달하기 위해 만든 것이 암호문인데, 정작 키는 안전하게 전달할 방법이 없다는 것이 가장 큰 단점입니다. 따라서 이 키 배송에 대한 방법이 여러가지 연구되었지만 결국 발상의 전환으로 키 배송 문제를 해결하기 위해 나타난 방식이 바로 비대칭형 암호 입니다.

AES를 간단하게 실습해 볼 수 있는 사이트가 있습니다. > AES encryption 홈페이지 바로가기

위 이미지에서 첫 번째 입력칸은 원하는 정보를 입력하는 칸을 의미하고, 두번째 입력칸은 우리가 사용할 키 즉, 절대로 노출되면 안되는 키를 입력하는 칸이 존재합니다. 마지막 은 비트를 선택해주게 되는데 이는 어떤 수준으로 암호화 할 것인지는 선택해주는 것입니다. 비트수가 높을 수록 그 암호화는 더욱 안전해지지만 그만큼 컴퓨팅 파워를 더 많이 사용하게 된다는 특징이 존재합니다.

홈페이지의 하단에 Encrypt 버튼을 눌러주면 아래와 같은 암호문이 등장합니다.

이 암호문을 그냥 단순히 바라보면 절대 원래 정보를 알아낼 수 없죠. 그러나 이 안에는 제가 적었던 ‘비밀 비밀’이라는 정보가 들어가져 있습니다.
이를 풀기 위해서는 많은 컴퓨팅 파워와 시간이 들게 되고 그만큼 안전한 것이 특징입니다.

그러면 이제 만들어진 암호를 복사하고 다시 첫번째 입력칸에 적어봅니다.

이 암호문을 풀기위해 같은 키를 사용해야겠죠? 이제 Decrypt 버튼을 눌러봅니다.

원래 제가 적었던 정보가 나타나게 됩니다.

2. 비대칭형(공개키 암호) 알고리즘

암호화, 복호화에 서로 다른 키가 사용되는 방식으로 하나의 키는 공개키로 사용하는 것이 특징입니다. 키 배송의 문제를 근본적으로 차단하여 안정성이 높지만 대칭키 방식에 비해 속도가 느리다는 단점이 존재합니다. 대표적으로는 RSA가 있습니다.

  • RSA: 공개키 암호 시스템의 하나로 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 주로 적은양의 데이터나 전자서명에 사용합니다. 대칭키인 DES, AES보다 속도가 느리기 때문에 메시지 암호화에는 쓰이지 않고 주로 키를 암호화하는데에 사용됩니다.

비 대칭형 암호는 이름 그대로 암호화 키와 복호화 키가 다른 것 입니다. 암호화를 하면 하나의 키 쌍이 생기고 이 두개의 키는 수학적으로 밀접한 관계를 가지게 됩니다. 두개의 키를 각각 A키, B키 라고 했을 때 A키로 암호화 한 암호문은 B키로만 복호화 할 수 있고, B키로 암호화 한 암호문은 A키로만 복호화 할 수 있습니다. 따라서 이 중 하나의 키만 비밀로 하고(이를 비밀키, 개인키라고 합니다) 다른 하나의 키는 누구에게 공개해도(이를 공개키라고 합니다) 가능한 키가 됩니다.

이렇게 둘 중 하나의 키는 반드시 공개 되어야 통상적인 사용이 가능함으로 공개키 암호라고도 불립니다. 공개키로 암호화한 암호문은 어짜피 개인키를 가진 사람만이 풀어볼 수 있기 때문에 상호간에 공개키만 교환하고 상대의 공개키로 암호화를 해서 데이터를 교환하면 자신의 개인키로 복호화를 하게 됩니다. 따라서 키 배송 문제는 근본적으로 발생하지 않게 됩니다.

예로 들어 인터넷 뱅킹을 생각해 봅시다.

  1. 사용자가 인터넷 은행 사이트에 접속하게 되면 사용자 컴퓨터에는 공개키와 비밀키가 생성 됩니다.
  2. 사용자 컴퓨터에서 공개키가 은행으로 전송되면 은행에서는 중요한 정보를 공개키로 암호화하며 암호문을 사용자에게 전달합니다.
  3. 사용자는 비밀키로 암호문을 해독하여 중요한 정보를 은행과 공유하며 통신을 하게 됩니다.

이러한 공개키 방식은 공인인증서, 전자서명 등에서 사용하고 있는 것이 특징입니다.

하지만 비대칭형 암호는 암호화, 복호화가 대칭형 암호에 비해 현저하게 느리다는 문제점이 존재합니다. 따라서 현실적으로는 비대칭형 암호를 이용해 대칭형 암호의 키를 배송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호 보완적으로 이용하는 것이 일반적입니다. 그리고 비대칭형 암호도 약점이 없는것은 아닙니다. 중간자 공격이 바로 그 예시 입니다.

중간자 공격: 해커가 중간에서 통신을 가로채어 수신자에게는 송신자인 척하고 송신자에게는 수신자인 척 해서 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법을 의미합니다.