본문으로 건너뛰기

1. 암호화(Encryption)

  • 메시지 전달 과정에서 제3자가 보더라도 이해하지 못하게 암호화할 수 있습니다.
  • 발신자는 평문을 암호화한 암호문을 전달하고 수신자는 암호문을 복호화해 평문을 얻을 수 있습니다.
  • 암호화는 해커들이 볼 수 없도록 메시지를 암호화하는 것뿐 아니라 저자를 증명하는 데도 사용될 수 있습니다.

1.1 용어

  • 암호: 메시지를 아무나 읽지 못하도록 인코딩하는 알고리즘
  • : 암호의 동작을 변경하는 숫자로 된 매개변수
  • 평문: 암호화되기 전의 원본 메시지
  • 암호문: 암호화가 적용된 메시지
  • 디지털 서명: 메시지가 위조 혹은 변조되지 않았음을 입증하는 체크섬
  • 디지털 인증서: 신뢰할 만한 조직에 의해서 서명되거나 검증된 신원 확인 정보
C = E(P, e)
  • 평문 메시지 P, 인코딩 함수 E, 디지털 인코딩 키 e가 주어지면 부호화된 암호문 C를 생성할 수 있습니다.
P = D(C, d)
  • 암호문 C, 디코딩 키 d, 디코딩 함수 D를 사용해서 원래의 평문 P로 디코딩할 수 있습니다.

2. 대칭키 암호 알고리즘

  • symmetric-key algorithm이라고도 합니다.
  • 대칭키란 암호문을 생성할 때 사용하는 키와 암호문으로부터 평문을 복원할 때 사용하는 키가 동일한 암호 시스템입니다.
    • 즉 인코딩 키 e와 디코딩 키 d가 같습니다.
  • 대칭키는 송신자와 수신자가 같은 키를 보유하고 그 키를 통해 송신자가 평문을 암호화해서 전송하면 수신자가 같은 키로 복호화합니다.

2.1 키 길이와 열거 공격

  • 키가 누설되면 안 된다는 것이 매우 중요합니다.
  • 대부분의 경우 인코딩 및 디코딩 알고리즘은 공개적으로 알려져 있습니다.
  • 좋은 암호 알고리즘은 우주에 존재하는 모든 가능한 키 값을 시도해보는 것 외에 다른 방법이 없게 만듭니다.
  • 무차별로 모든 키 값을 대입해보는 공격을 열거 공격이라고 합니다.
    • 가능한 키 값이 몇 가지 밖에 없다면 무차별 대입으로 암호를 깨뜨릴 수 있습니다.

2.1.1 가능한 키 값의 개수

  • 키 값의 개수는 몇 비트이며 얼마나 많은 키가 유효한지에 달려있습니다.
  • 대칭키 암호에서 보통 모든 키 값이 유효합니다.
  • 8비트라면 256가지 값이 가능하며
  • 40비트라면 2^40(약 1조)의 값이 가능합니다.
경고

현대 암호화 표준에서는 최소 128비트 이상의 키 길이를 권장합니다. 컴퓨터 성능이 발전함에 따라 짧은 키는 쉽게 깨질 수 있습니다.

2.2 장점

  • 키 크기가 상대적으로 작고 암호 알고리즘 내부 구조가 단순하여, 시스템 개발 환경에 용이합니다.
  • 비대칭키에 비해 암호화와 복호화 속도가 빠릅니다.

2.3 단점

  • 교환 당사자 간에 동일한 키를 공유해야 하기 때문에 키관리의 어려움이 있습니다.
    • 한 사람이 여러 사람과 대칭키 암호 알고리즘을 사용하면 여러 사람마다 각각 다른 비밀 키를 생성하고 기억해야 합니다.
  • 잦은 키 변경이 있는 경우에 불편함을 초래합니다.
  • 교환 당사자 간에 동일한 키를 공유하는 과정에서 탈취될 수 있습니다.
정보

대표적인 대칭키 암호 알고리즘으로는 DES, 3DES, AES, SEED, ARIA 등이 있습니다.

3. 비대칭키 암호 알고리즘

  • 공개키 암호 알고리즘(public key cryptosystem)이라고도 불립니다.
  • 암호화 알고리즘의 한 종류로, 암호화할 때 사용하는 암호키와 복호화할 때 사용하는 암호키가 서로 다릅니다.
  • 공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 탄생했습니다.
  • 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키입니다.
  • 공개키 암호화 방식은 암호학적으로 연관된 두 개의 키를 만들어서 하나는 자기가 안전하게 보관하고 다른 하나는 상대방에게 공개합니다.
  • 개인키로 암호화한 정보는 그 쌍이 되는 공개키로만 복호화가 가능하고, 공개키로 암호화한 정보는 그 쌍이 되는 개인키로만 복호화가 가능합니다.
  • 개인이 비밀통신을 할 경우엔 대칭키 암호를 사용할 수 있지만, 다수가 통신을 할 때에는 키의 개수가 급증하게 되어 큰 어려움이 따릅니다.

3.1 통신 절차

  1. 송신자는 수신자의 공개키를 구합니다.
  2. 송신자는 수신자의 공개키로 평문을 암호화합니다.
  3. 송신자는 암호화된 메시지를 상대방에게 전달합니다.
    • 메시지는 암호화되어 있기 때문에 전달 도중에 유출되거나 도청이 되더라도 암호문으로부터 원문을 알아내기 어렵습니다.
  4. 수신자는 자신의 비밀키로 암호화된 메시지를 해독해서 평문을 얻습니다.

비대칭키는 암호화 외에도 디지털 서명에 활용됩니다. 개인키로 서명하고 공개키로 검증함으로써 발신자의 신원을 확인할 수 있습니다.

3.2 장점

  • 공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 할 수 있습니다.
    • 각 사용자가 개인키와 공개키 2개만 보유하면 됩니다.
    • 암호화 통신을 할 경우에는 각자의 공개키를 공개하여 필요할 때 상대방이 이용할 수 있도록 합니다.
  • 각 사용자는 자신에게 전송하기 위해 사용될 키를 공개하고, 공개된 키의 정보로 암호화된 정보를 복호화할 수 있는 키를 비밀로 보유하고 있음으로써 누구나 암호화할 수 있지만 공개키에 대응되는 비밀키를 가진 사람만이 복호화할 수 있는 특징을 가집니다.

3.3 단점

  • 공개키 암호는 수학적인 난제를 기반으로 설계되었기 때문에, 암호화나 복호화를 수행하기 위한 연산이 복잡한 수학 연산을 기반으로 구성되기 때문에 효율성은 대칭키 암호에 비해 높지 않고, 대칭키 알고리즘보다 속도가 대략 1000배 느립니다.

3.4 혼성 암호 체계

  • 비대칭키 암호 방식의 알고리즘은 계산이 느린 결과가 있어 실제로는 대칭과 비대칭 방식을 섞어서 사용합니다.
  • 노드들 사이의 안전한 의사소통 채널을 수립할 때는 비대칭키 암호화 방식을 사용하고 이렇게 만들어진 채널을 통해 임시의 무작위 대칭 키를 생성하고 교환하여 나머지 데이터를 암호화할 때는 빠른 대칭키 방식을 사용합니다.
정보

대표적인 비대칭키 암호 알고리즘으로는 RSA, ECC, DSA, ElGamal 등이 있습니다. 특히 RSA는 웹 보안에서 널리 사용되는 알고리즘입니다.

4. 실제 활용 사례

4.1 HTTPS 통신

  • 웹 브라우저와 웹 서버 간의 통신을 암호화하는 HTTPS는 비대칭키와 대칭키 암호화를 모두 사용합니다.
  • 초기 핸드셰이크 과정에서는 비대칭키 암호화를 사용하여 안전하게 세션 키를 교환합니다.
  • 이후 실제 데이터 통신에는 빠른 처리를 위해 합의된 대칭키를 사용합니다.

4.2 디지털 서명

  • 전자문서의 무결성과 발신자의 신원을 확인하는 디지털 서명은 비대칭키 암호화를 기반으로 합니다.
  • 발신자는 자신의 개인키로 문서의 해시값을 암호화하여 서명을 생성합니다.
  • 수신자는 발신자의 공개키로 서명을 검증하여 문서의 진위와 발신자를 확인할 수 있습니다.

4.3 PGP(Pretty Good Privacy)

  • 이메일 암호화에 사용되는 PGP도 대칭키와 비대칭키를 혼합하여 사용합니다.
  • 메시지 자체는 빠른 대칭키로 암호화하고, 대칭키는 수신자의 공개키로 암호화하여 함께 전송합니다.

참고 자료