Digital Cryptography Basic(디지털 암호학 기초)

디지털 암호학에 있어 기본적인 용어는 아래와 같다.

  • 암호: 텍스트를 아무나 읽지 못하도록 인코딩하는 알고리즘

  • 키: 암호의 동작을 변경하는 숫자로 된 매개변수

  • 대칭키 암호 체계: 인코딩과 디코딩에 같은 키를 사용하는 알고리즘

  • 비대칭키 암호 체계: 인코딩과 디코딩에 다른 키를 사용하는 알고리즘

  • 공개키 암호법: 비밀 메시지를 전달하는 수백만 대의 컴퓨터를 쉽게 만들 수 있는 시스템

  • 디지털 서명: 메시지가 위조 혹은 변조되지 않았음을 입증하는 체크섬

  • 디지털 인증서: 신뢰할 만한 조직에 의해 서명되고 검증된 신원 확인 정보

대칭키 암호법

인코딩 할 때 사용하는 키와 디코딩 키가 같은 암호화 방식으로, 발송자는 비밀 키로 메시지를 암호화하고 수신자는 같은 키로 메시지를 복호화한다. 잘 알려진 암호 알고리즘으로는 DES, Triple-DES, RC2, RC4 등이 있다.

키 길이와 열거 공격(Enumeration Attack)

무차별적으로 모든 키 값을 대입하는 공격을 열거 공격이라고 하는데, 만약 가능한 키 값 비트가 짧아 경우의 수가 몇 가지 되지 않는다면, 열거 공격을 통해 쉽게 키를 찾을 수 있게 된다. 때문에 키의 길이를 충분히 길게 설정하여 열거 공격을 통해 키를 찾는 것을 어렵게 하여 보안을 강화해야 한다.(보통 128비트 키를 사용한 대칭키 암호를 강력한 것으로 간주한다.)

단점 - 공유키 발급

대칭키 암호의 단점으로는 발송/수신자 둘 다 공유키를 가져야 하며, 공유키를 발급하는 것이 어렵다는 점이 있다. 모든 발송자가 같은 키를 가지면 안 되기 때문에 각 발송자마다 공유키를 발급해야 하며, 여러 발송자가 서로 통신을 하게 된다면 그만큼 많은 공유키를 발급해야 한다. 때문에 관리해야하는 공유키의 수가 많아지면 많아질수록 관리가 어려워지고, 키를 관리하는 데 드는 비용이 증가하게 된다.

공개키 암호법

두 개의 비대칭 키를 사용하는 암호화 방식으로, 인코딩 키는 공개키, 디코딩 키는 비밀키로 사용하게 되는데, 호스트만이 비밀키를 가지고 있고, 공개키는 모두에게 공개된다. 디코딩 키는 호스트만 가지고 있기 때문에, 공개키 암호법은 공유키 암호법보다 키 관리가 쉽다.

RSA

공개키 암호 체계 중 유명한 RSA 알고리즘은 아래의 정보를 가지고 있더라도 비밀키를 계산할 수 없다.

  • 공개키

  • 가로채서 얻은 암호문의 일부(네트워크 스누핑을 통한 획득)

  • 메시지와 해당 메시지를 암호화한 암호문

RSA 구현 소스 코드를 가지고 있더라도, 비밀키를 찾아내는 것은 거의 불가능에 가깝다고 한다.(알려진 큰 소수를 계산하는 문제만큼의 비용 발생)

디지털 서명

암호 체계는 메시지를 암호화하고 해독하는 것뿐 아니라, 발송자가 누군지 알려주고 메시지가 위조되지 않았음을 증명하기 위해 메시지에 서명하는 기능을 제공할 수 있다. 디지털 서명이라는 기법은 특별한 암호 체크섬으로 아래 두 가지 이점을 제공한다.

  • 메시지 작성자 식별: 작성자는 서명을 생성할 때 자신의 비밀키를 사용하기 때문에, 오직 작성자만이 체크섬을 계산할 수 있다.(이 체크섬은 개인 서명처럼 동작)

  • 메시지 위조 방지: 악의적인 공격자가 송신 중인 메시지를 수정하게 되면, 체크섬은 더 이상 기존 메시지와 일치하지 않게 된다.

디지털 서명은 보통 비대칭 공개키에 의해 생성되며, 개인 키는 작성자만이 가지고 있기 때문에 일종의 '지문'(유니크한 값)처럼 사용된다.

디지털 서명 과정

노드 A가 노드 B에게 메시지를 전송하고자 할 때의 과정은 아래와 같다.

  1. 노드 A는 가변 길이 메시지를 정제하여 고정된 길이의 요약(Digest)을 생성

  2. 해당 Digest에, 개인 키를 매개변수로 하는 서명 함수를 적용

  3. 노드 A는 서명이 계산되면 메시지 끝에 덧붙이고 전송할 메시지와 그에 대한 서명 정보를 노드 B에게 전송

  4. 메시지를 받은 노드 B는 개인 키로 변형된 서명에 공개키를 이용한 역함수를 적용하여 메시지의 요약(Digest)을 계산

  5. 노드 B는 풀어낸 메시지의 요약(Digest)과 가지고 있는 버전의 요약(Digest)과 일치하는지 확인(일치하지 않는다면 메시지가 위조되었거나 노드 A가 아닌 다른 노드가 서명한 것을 의미)

디지털 인증서

인터넷의 신분증인 디지털 인증서는, 신뢰할 수 있는 기관으로부터 보증 받은 사용자나 회사에 대한 정보를 담고 있다. 디지털 인증서에 대한 전 세계적인 표준은 없지만, 대부분의 인증서는 X.509 표준을 따른다.

디지털 인증서의 구조

디지털 인증서는 아래와 같은 정보를 담고 있다.

  • 대상의 이름(사람, 서버, 조직 등)

  • 유효 기간

  • 인증서 발급자(인증서 보증 기관)

  • 인증서 발급자의 디지털 서명

  • 대상과 사용된 서명 알고리즘에 대한 정보

  • 대상의 공개키

서버 인증에서의 인증서 사용

HTTPS를 통한 안전한 웹 트랜잭션을 시작할 때, 최신 브라우저는 자동으로 접속한 서버에서 디지털 인증서를 가져온다. 만약 서버가 인증서를 갖고 있지 않다면, 보안 커넥션은 실패하게 된다.

  • 웹 사이트의 이름과 호스트 명

  • 웹 사이트의 공개키

  • 서명 기관의 이름

  • 서명 기관의 서명

서버 인증서는 위의 정보를 담고 있으며, 브라우저는 서버 인증서를 받으면, 서명 기관을 검사한다. 만약 서명 기관이 신뢰할 수 있는 서명 기관이라면 브라우저는 이미 그것의 공개키를 알고 있기 때문에(브라우저에 미리 설치된 채로 제공), 서명 기관의 서명을 검증할 수 있다.

참고자료

Last updated