[암호학] 0. 암호 시스템의 기초

Soowon Jeong·2021년 12월 27일
3

암호학

목록 보기
1/9
post-thumbnail

이 글은 카이스트 정보보호개론(CS448) 강의를 참고하여 작성되었습니다.

암호학

암호학은 보안과 정보를 보호하는 방법에 대한 학문입니다.
보안은 무결성, 기밀성, 가용성을 제공해야합니다.

  • 무결성
    중간에 위조와 변조가 불가능해야 합니다.
  • 기밀성
    정보를 보내는 사람과 받는 사람 이외에는 정보를 알 수 없어야 합니다.
  • 가용성
    적절한 시기에 허용된 사용자만 접근 가능해야합니다.

보안을 위해서는 이러한 보안의 요소들을 필수적으로 지켜야합니다.
현대에 들어, 많은 정보가 컴퓨터로 다루어지기 시작했고, 따라서 컴퓨터를 사용한 암호가 보편화 되었습니다.
고전 암호의 경우, 암호화 알고리즘을 알아냈을 경우 모두 해독이 가능합니다. 그래서 현대 암호에서는 암호화 알고리즘이 공개되어도 빠른 해독이 불가능하게 만드는 것이 중요해졌습니다.

암호 시스템

컴퓨터는 모든 정보를 이진수로 다룹니다. 그렇기 때문에 정보를 보호해야 한다면, 이러한 이진수를 다른 형태로 변환하는 형태가 되어야합니다.
원래 정보를 다른 정보로 변환하는 것을 암호화, 그 정보를 다시 원래 정보로 변환하는 것을 복호화라고 합니다.

암호화

암호화는 간단하게는 다음과 같은 형태를 가집니다.

원래 정보 E\xleftrightarrow{E}​ 암호화된 정보

원래 정보는 평문(Plain text), 암호화된 정보는 암호문(Cipher text)라고 부릅니다.
암호화에는 크게 두가지 종류가 있는데, 암호문을 평문으로 변환할 수 있는 양방향 암호화와 평문으로 변환할 수 없는 단방향 암호화가 있습니다. 단방향 암호화에서는 위에서 본 형태에서 암호화된 정보가 원래 정보가 되는 과정이 존재하지 않습니다. 우선 이 글에서는 양방향 암호화에 집중해서 설명하겠습니다.


평문을 암호문으로 변환하는 것을 암호화, 암호문을 평문으로 변환하는 것을 복호화라고 합니다.
평문을 암호문으로 변환하는 것에는 무엇이 필요할까요?
바로 알고리즘입니다.

어떤 평문 pp가 있을 때, 암호문 cc는 암호 함수 EE를 통해 얻어지는 E(x)E(x)입니다.
(pp는 plain text, cc는 cipher text를 뜻합니다.)

그럼 이 암호 함수는 어떻게 만들어져야 할지 알아보겠습니다.
위에 언급했듯이, 컴퓨터의 연산 속도는 매우 빨라 고전 암호의 경우 EE를 알아낼 경우 cc에서 pp를 매우 빠른 시간에 계산할 수 있습니다.
따라서 현대 암호에서는 임의의 문자열 값인 '키(key)'를 도입하게 되었습니다.
키는 간단하게 말하면 난수(random number)입니다. 이 키와 pp의 연산으로 EE를 정의하게 됩니다.
이 키가 어떻게 구성되어 있느냐에 따라서 양방향 암호화는 크게 두가지 방식으로 나뉩니다.

대칭 암호

대칭 암호 알고리즘은 키가 하나 존재합니다. 그 키를 이용해 암호화와 복호화를 모두 할 수 있습니다.
정보를 보내는 사람과 받는 사람만이 키를 알고 있다면 기밀성이 지켜질 수 있습니다.
대칭 암호 알고리즘에는 DES, AES, SEED, ARIA 등이 있습니다.
대칭 암호에 대한 설명은 생략하겠습니다.

비대칭 암호

비대칭 암호 알고리즘은 공개키 암호 알고리즘이라고도 불립니다. 비대칭 암호 알고리즘은 공개키(public key), 개인키(private key)를 이용합니다.
비대칭 암호 알고리즘은 대칭 암호 알고리즘에서 키를 전달하는 과정의 어려움때문에 만들어졌습니다.
가장 처음 만들어진 비대칭 암호 알고리즘은 디피-헬만 키 교환 알고리즘이며 이에 영향을 받아 ElGamal, RSA 암호 시스템이 만들어졌습니다.

비대칭 암호 알고리즘은 간략하게 다음과 같은 과정으로 수행됩니다.

  1. 정보를 보내는 사람은 받는 사람의 공개키로 평문을 암호화한다.
  2. 정보를 보내는 사람이 암호화된 메시지를 받는 사람에게 전달한다.
  3. 정보를 받는 사람은 자신의 개인키로 암호문을 복호화해서 평문을 얻는다.

자세하게 그 과정에 대해 알아보겠습니다. 비대칭 암호 알고리즘은 비밀통로 일방향 함수(trapdoor function)를 사용합니다.
비밀통로 일방향 함수는 암호화는 쉽게 가능하고, 특정한 정보(여기서는 개인키)를 알지 못할 경우 복호화를 어렵게 합니다.
어떤 함수 ff에 대해, 정의역이 XX, 공역이 YY라고 하겠습니다. xXx \in X이고 yYy \in Y일 때, y=f(x)y = f(x)를 구하는 것은 쉽지만 x=f1(y)x = f^{-1}(y)를 통해 xx를 구하기 어려운 함수를 일방향 함수라고 합니다. 비밀통로 일방향 함수는 특정 정보 kk를 안다면 역함수 f1f^{-1}를 알아낼 수 있는 함수 ff를 말합니다. 여기서 어려움이란 간단히 역을 구하는데 있어서 어떤 방법을 쓰더라도 오랜 시간이 걸리거나 혹은 만약 성공할 수 있더라도 무시할 수 있는 확률로만 성공한다는 뜻입니다.

더 엄밀한 정의는 위키백과의 일방향 함수 페이지나 다른 자료를 참고해주시기 바랍니다.

현재 알려진 비밀통로 일방향 함수의 후보로는 대표적으로 RSA가 있습니다. (후보인 이유는 특정 정보 이외에도 역함수를 구할 수 있는 가능성이 존재하기 때문입니다. 엄밀하게 아직 완벽한 비밀통로 일방향 함수는 존재하지 않으며 현재는 비밀통로 일방향 함수의 후보를 비밀통로 일방향 함수로 가정하고 다루고 있습니다)

다음 글에서는 어려운 문제에 관해 설명하겠습니다.
[암호학] 1. RSA
[암호학] 2. 이산 로그 문제

0개의 댓글