대칭키& 비대칭키

양치는 하셨나요·2024년 7월 16일
0
post-thumbnail

대칭키와 비대칭키.. 이름부터 감이 안오는 친구들이 나왔다.
감이 안잡힐 땐 가장 기본적인 개념을 먼저 살펴보는 것이 빠르니 개념 먼저 빠르게 살펴보겠다.


대칭키와 비대칭키의 개념

  • 둘 모두 암호화 방식이며 특정 숫자를 이용해 암호화 - 복호화 하는 알고리즘을 의미한다.
    • 대칭키 암호화 방식은 암호화와 복호화에 쓰는 숫자(키)가 동일하다는 의미에서 대칭키라고 불린다.
    • 비대칭키 암호화 방식은 암호화 - 복호화 각각 사용하는 키가 다르다는 의미에서 비대칭키 라고 불리며 이후 살펴볼 알고리즘에서 두개의 키 중 하나는 공개되어있는 상태이기 때문에 공개키 암호화 방식이라고 부르기도 한다.

위의 개념을 보면 알 수 있듯이 둘 모두 암호화 방식의 분류이다.

암호화.. 이것 분명 이전 글에서 본 기억이 있다. 바로 HTTPS!!

지난번 공부할 때 HTTP의 정보 전달 방식이 중간에 데이터를 빼가면 정보를 쉽게 알아볼 수 있다는 보안적 이슈가 있기 때문에 여기에 암호화 레이어를 추가해 HTTPS를 만들었다고 배웠다. 이런 암호화 레이어에 사용 되는 방식이 바로 대칭키와 비대칭키 이다.

아래쪽의 알고리즘에 대한 설명을 보면 알 수 있지만 키를 이용한 통신은 암호화와 복호화가 양방향으로 가능하기 때문에 이런 통신과 같은 곳의 암호화 방식으로 많이 쓰인다.


암호화 방식들을 이용하기 전에 암호화 방식들의 장단점을 이해하기 위해선 보안의 핵심 요소들이 무엇인지 알고 가야 이해하기 수월하다. 아래의 보안 3요소를 기억하고 다음 글을 읽어보는 것이 좋다.

보안의 3요소

  • 기밀성
    • 송신하고자 하는 정보의 내용을 외부에서 알아보지 못하도록 하는 기능
    • 암호화를 하는 가장 근본적인 이유이다.
  • 무결성
    • 암호화한 정보의 변동의 유무를 확인하는 기능
    • 무결성을 지원한다면 제 3자의 개입 여부를 확인 가능하다.
  • 가용성
    • 서비스를 이용하는 대상에게 제공되어지고 해당 사용자가 정보를 사용할 수 있도록 하는 것.
    • 가용성이 있어야 허가된 사람이 해당 정보를 이용 가능하다.

대칭키 암호화 방식

  • 하나의 키를 이용해 암호화와 복호화를 진행하며 양뱡향으로 가용 가능한 암호화 방식이다.
    • Session key, Secret Key, Shared Key, 대칭키, 단용키 등등 다양한 말로 불리지만 가장 핵심인 것은 하나의 키를 이용해 암호화를 한다는 것이다.

방식과 종류

블록 암호 방식

기밀성 있는 정보를 정해진 크기(블록)로 나눠서 암호화 하는 시스템. 암호화 하려는 정보가 블록보다 크다면 이를 위한 특정 방식이 사용된다.

  • SEED: 한국인터넷진흥원(KISA) 에서 1999년에 개발한 128비트 키를 사용하는 알고리즘
  • HIGHT (High security and light weight): KISA를 비롯한 우리나라 연구소에서 저전력, 경량화 컴퓨팅에 맞게 2005년에 설계한 64비트 키를 사용하는 알고리즘
  • ARIA: 국정원을 비롯한 우리나라 정부기관과 학계, 연구소가 협력해 2003년에 개발한 128비트 키를 가지는 알고리즘이다.
  • LEA (Lightweight Encryption Algorithm): 국가보안기술연구소에거 개발한 128비트 키를 가지는 알고리즘이다. 연산의 형태를 간소화하여 128비트 키를 사용하면서 AES보다 빠른 연산속도를 가지면서도 HIGHT보다 높은 수준의 보안을 보이는 알고리즘이다.
  • DES (Data Encryption Standard): 1975년에 IBM에서 개발, NBS(현 NIST, 미국 국림 표준 기술 연구소)에서 국가 표준 암호화 알고리즘으로 지정한 알고리즘.
  • AES (Advanced Encryption Standard): 고급 암호화 표준 이라는 의미로 NSA(미국의 국정원)에 의해 1급 기밀에 사용할 수 있도록 승인되어 전세계에서 가장 많이 사용하는 대칭키 블록 암호화 알고리즘이다.

스트림 암호 방식

이진화 되어있는 평문 스트림과 이진 키 스트림의 XOR 연산으로 암호문을 생성한다.

  • RC4: 256바이트의 키 스트림을 0~255까지 초기화하고 두개의 256자리 벡터를 이용해 랜덤하게 섞어 이를 키로 사용하는 알고리즘이다.
    • 최근에는 랜덤이 완벽한랜덤이 아니라는 점과 값이 어느정도 편향되게 나온다는 점 때문에 잘 사용하지 않는다고 한다.
  • A5/1, A5/2, A5/3: 여러개의 시프트레지스터를 이용해 랜덤한 스트림 키를 생성해 사용하는 알고리즘이다. 휴대전화 통신을 위한 네트워크에서 사용되고 있다고 한다.

장점

  • 하나의 키를 이용해 암호화와 복호화를 하기 때문에 간단한 구조로 만들 수 있어 구현이 용이하다.
  • 데이터를 암호화 하기 위한 연산이 하나의 키에 국한되기 때문에 연산 속도가 빠르다.
  • 스트림 방식과 같이 사용하면 용량에 제한이 없어 큰 파일에 대한 암호화에 효과적이다.

단점

  • 하나의 키를 사용하기에 보안 유지를 위해서 주기적인 키의 교체가 필요하다.
  • 키가 탈취 당했을 때 이 키를 이용한 정보를 빼가는 것을 막기가 어려우며 이런 점에서 키에 대한 보안성이 높아야 하기에 관리에 어려움이 생길 수 있다.
  • 하나의 키를 이용하기 때문에 무결성 지원이 어렵거나 부분적으로만 가능하다.
    • 키를 탈취한 외부의 개입으로 정보를 중간에 바꾼다 해도 정보를 받는 쪽에선 키로 이를 복호화 할 뿐이니 전체적인 무결성을 지원하기는 어렵다.
  • 부인 방지 기능을 제공하지 못한다. 아래쪽에서 비대칭키를 설명할 때 이에 대한 개념도 같이 설명하는 것이 이해가 쉬워서 아래에서 설명하겠다.

비대칭키 암호화 방식

  • 대칭키 암호화 방식은 하나의 키를 탈취하면 데이터를 빼낼 수 있는 환경이라는 문제점이 있기 때문에 이런 문제점을 해결하기 위해 등장한 암호화 방식이다.
  • 암호화와 복호화에 사용되는 키가 상이한 방식.
    • 외부에 절대 노출되어선 안되는 개인키(private key)와 공개적으로 사용하는 공개키(public key)가 쌍으로 이뤄져 있다.
    • 위의 그림에서 보이듯 공개키-개인키 하나의 쌍을 이용해 공개키로 암호화한 데이터를 개인키로 복호화 해서 볼 수 있다.

장점

  • 키의 용도가 정해져 있기 때문에 분배와 관리가 수월해진다.
  • 정보를 이용하는 당사자만 가진 키를 이용하기 때문에 기밀성을 지원할 수 있고 또한 데이터가 변경하는 것도 이 개인키를 가지고 있어야만 가능하기에 무결성 또한 지원한다.
  • 부인 방지 기능을 제공한다.
  • 대칭키에서 보이는 암호학적 문제를 해결 가능하다.

단점

  • 두개의 키를 사용하고 개인키를 안전하게 전달하기 위해서 키의 길이가 상대적으로 길다.
  • 이런 키의 길이와 서로 상이한 키로 암호화-복호화를 하는 알고리즘의 복잡함 때문에 연산 속도가 느리다.

종류

  • RSA: 현재 SSL/TLS 에서 가장 많이 쓰이는 알고리즘. 대부분의 인터넷 뱅킹 등 보안이 중요한 곳에서 이 방식을 사용. 1977년에 개발되었으며 방법은 공개키와 개인키를 매우 큰 소수 두개를 이용하고 이 두 소수를 곱한 값을 인증에 사용하는 방식이다.
  • 디피 - 헬먼: RSA가 나오기 전에 먼저 소수를 이용한 방식을 제안한 알고리즘. 소수와 그 소수보다 작은 수, 임의의 정수 총 3개의 수를 이용해 공개키를 공유하는 방식이다.
  • 타원 곡선 암호: 타원 곡선의 방정식을 활용해 RSA보다 짧은 키를 이용하면서 그와 비슷한 보안 수준을 제공하기 위해 1985년에 제안된 알고리즘. 배경이론이 복잡하고 실제 구현을 위해선 이와 관련된 전문가가 필요해 실사용에 시간이 걸릴 것이라고 한다.
  • 전자서명: x509(1988년에 발표한 표준안으로 개발된 암호체계.)를 기반으로 한 V3(우리가 아는 그 V3가 이것이다. )를 이용해 개인키로 암호화한 전자서명을 주고 받는 시스템이다.

부인 방지

  • 송신자나 수신자가 메시지를 주고 받았다는 사실을 다르게 인지 하지 못하도록(부인 하지 못하도록) 방지하는 것.

    • ex) A가 B에게 돈을 빌린 후 차용증을 썼다고 하자. 이때 A는 차용증을 쓰지 않았다고 부인할 수 있기에 B는 A가 차용증을 쓴 사실을 부인하지 못하도록 할 필요가 있다. 이를 위해 아래의 프로세스를 따라간다.

      1. B는 A에게 개인키/공개키를 생성 후 공개키를 공개하도록 한다.
      2. B는 A에게 문서(차용증)을 개인키로 암호화 할 것을 요구한다.
      3. B는 암호화된 문서를 받고 이를 A의 공개키로 해독해 A가 해당 공개키의 짝이 되는 개인키로 암호화했음을 검증할 수 있다.
      4. 이때 해독되지 않는다면 해당 문서에 사용한 공개키/개인키의 짝이 맞지 않다고 할 수 있기에 공개키 혹은 A가 사용한 개인키가 잘못되었다고 할 수 있다.
  • 이렇게 암호화하고 데이터를 주고 받는다고 하면 A만이 가질 수 있는 개인키로 암호화했음을 증명할 수 있기 때문에 A가 서명한 차용증임을 증명할 수 있게 된다. 이런 방식을 똑같이 서버와 클라이언트 사이에서도 적용해 통신 연결된 서버-클라이언트 짝이 공개키-개인키를 서로 하나씩 가지고 해당 통신에 대한 보안을 지킬 수 있다.


암호학적 문제 해결

  • 비대칭 키를 사용한다면 위의 부인 방지를 활용해 데이터 보안과 인증 두가지 측면의 암호학적 문제(암호화를 하는 이유이자 목표)를 해결할 수 있다.
    • 데이터 보안 (공개키 암호화 → 개인키 복호화): 개인키를 가지고 있는 서버만이 해당 데이터를 복호화 가능하기 때문에 데이터 보안을 강화할 수 있다.
    • 인증 (개인키 암호화 → 공개키 복호화): HTTPS를 이용한 연결 시 클라이언트와 서버가 서로의 인증을 한다고 했는데 이때 사용되는 과정이다.
      1. handshake로 서버와 클라이언트 연결

      2. 이때 CA에서 받은 인증서를 서버가 개인키로 암호화해서 클라이언트로 전송

      3. 클라이언트는 이 데이터를 CA의 목록에서 확인해 공인인증기관이 서명한 인증서인지 확인

      4. CA에 등록된 공개키로 인증서 복호화

      5. 복호화를 통해 서버의 공개키 획득

        이를 통해 서버와 클라이언트는 서로 키를 나눠 가지면서 CA의 인증도 확인 할 수 있다.


대칭키와 비대칭키의 혼합

대칭키는 빠르지만 보안적 허점이 있고 비대칭키는 보안에 강하지만 구조적으로 느릴 수 밖에 없다. 그렇다면 이 두가지를 섞어서 사용할 수 있을까?

답은 Yes. 대칭키 암호화의 가장 큰 문제점이 대칭키가 탈취 당하면 문제가 생긴다는 것이다. 그렇다면 이 대칭키를 보안적 강점이 있는 비대칭키 암호화를 이용해서 주고 받는다고 하면 보다 안전하게 대칭키를 주고 받을 수 있다. 키는 한 번 주고 받으면 더이상 주고 받는 데이터 상에는 있지 않으므로 보안적 문제점을 보완할 수 있고 대칭키의 속도적 강점도 활용할 수 있게 된다.
→ 대칭키 방식를 이용해 빠른 통신을 하기 위해선 키를 안전하게 전달해야 한다. 이런 보안적인 문제를 해결하기 위해 대칭키 방식의 키를 비대칭키 방식으로 전달한다.


결론

  • 보안은 기밀성, 무결성, 가용성 3가지의 요소를 만족해야 안전하다고 할 수 있고 이런 점을 통신에도 활용하기 위해 다양한 암호화 프로세스가 나왔는데 그 중 암호키를 주고 받아 통신을 하는 방식에는 대칭키 암호화 방식과 비대칭키 암호화 방식이 있다.
  • 대칭키 암호화 방식
    • 하나의 키를 이용하기 때문에 속도가 빠르고 연산량이 비공개키 암호화에 비해 적기 때문에 큰 데이터의 암호화에 유리하다. 또한 키를 잘 전달하기만 한다면 통신 대상 이외의 대상이 키를 알 수 없기 때문에 기밀성을 가지기도 쉽다.
    • 이런 키를 주고 받는 것이 까다롭고 하나의 키를 이용하는 구조상 무결성 지원이 부분적으로만 제공 가능하다. 또한 통신을 하는 대상 이외의 대상이 통신을 빼돌렸다는 것을 알 수 있는 방법이 없다.
  • 비대칭키 암호화 방식
    • 한쌍의 키를 가지며 서버만 가지고 있는 개인키와 클라이언트가 볼 수 있는 공개키를 이용해 암호화 한다. 키가 2개이다 보니 분배와 관리가 수월하고 키를 자주 바꿀 필요가 적어지기에 관리할 키의 개수가 적어지고 키의 변화 빈도가 적어진다. 또한 기밀성과 무결성을 지원하고 가장 중요한 부인 방지 기능을 제공한다.
    • 키를 안전하게 주고 받기 위해 키의 길이가 상대적으로 길고 이에 따라 연산 속도가 느리다.

profile
프로그래밍을 잘하고 싶어요..

0개의 댓글

관련 채용 정보