커리큘럼 소개
암호학 : 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다루는 학문
현대에는 컴퓨터에 대한 의존도가 높아지면서 네트워크를 통해 민감한 정보가 빈번하게 오가게 되었고, 컴퓨터 환경에서 암호학은 매우 중요한 역할을 담당하게 되었다.
메신저를 개발할 때는 메세지를 도청 및 감청으로부터 보호해야하며, 사용자의 비밀번호를 보관할 때는 해킹으로부터 안전하도록 암호화해서 저장해야 한다.
커리큘럼 목표 : 기존에 암호학을 공부해본 적 없는 사람들에게 암호학을 넓고 얕게 알려드리는 것
실제 프로그램에 쓰이는 암호 알고리즘의 특징을 이해하고, 안전한 서비스를 개발하기 위해 어떤 암호 기술을 사용할 지 공부할 수 있다.
암호학
암호학(Cryptography) : 좁은 의미에서 제 삼자로부터 정보를 보호하는 방법에 대한 연구
핵심 연구 주제 : 키 생성(Key generation), 암호화(Encryption), 복호화(Decryption)

키 생성은 암호화 및 복호화에 사용할 키를 만드는 과정이고, 암호화는 키를 이용해 평문(Plaintext)을 암호문(Ciphertext)으로 변환하는 과정이다.
송신자가 암호문을 전송하면 수신자는 키를 이용해 암호문을 평문으로 복호화한다.
암호화와 복호화로 정보가 전달되는 체계를 암호 시스템(Cryptosystem)이라고 한다.
암호화와 비교되어 자주 소개되는 개념이 인코딩이다.
인코딩(Encoding)은 암호화와 유사하게 데이터를 다른 형태로 변환하는 것이다.
그러나 인코딩은 데이터의 기밀성을 고려하지 않으며, 누구나 디코딩하여 원문을 구할 수 있다.
따라서 데이터를 숨기기 위해 사용하기 보다는 크기를 줄이거나 컴퓨터가 이해하기 쉬운 형식으로 변형하려고 사용한다.
압축도 인코딩의 예시 중 하나이다.
현대에는 암호학의 역할이 확장되어 수신자와 송신자가 서로의 신원을 확인하는 방법, 메세지가 중간에 조작되지 않았음을 보증하는 방법 등을 연구하는 것이 폭넓게 암호학의 분야로 연구되고 있다.
배타적 논리합
배타적 논리합(eXclusive OR, XOR) : 입력으로 들어온 두 인자가 서로 다를 때, 참을 반환하는 연산
암호학에서 배타적 논리합은 일반적으로 비트 단위로 이뤄진다.
두 입력 값을 2진법으로 표기했을 때, 각 자릿수의 값이 다르면 1, 같으면 0이 출력된다.
입력 | 출력 | |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
다음은 배타적 논리합 연산의 예시이다.
5 ⊕ 7 = \(101_2\) ⊕ \(111_2\) = \(010_2\) = 2
3 ⊕ 10 = \(0011_2\) ⊕ \(1010_2\) = \(1001_2\) = 9
임의의 정수를 자기 자신과 배타적 논리합 하면 결과 값은 0이다.
즉, 임의의 정수 \(x\)에 대해 \(x\) ⊕ \(x\) = 0이다.
합동식
합동식 : 두 정수 \(a\) 를 각각 정수 으로 나눴을 때 나머지가 같은지를 판별하는 식
와 \(b\) 각각을 \(m\)으로 나눈 나머지가 같을 때, 수학적으로 \와 \(b)가 mod 에 대해 합동(congruent)이다.
예를 들어, 7과 17은 10으로 나눈 나머지가 같기 때문에 7과 17은 mod 10에 대해 합동이며 기호로는 7 \(equiv\) 17 (mod 10)로 나타낸다.
반대로 12와 5는 3으로 나눈 나머지가 다르므로 12와 5는 mod 3에 대해 합동이 아니며, 기호로는 12 \(not\equiv\) 5 (mod 3)로 나타낸다.
\(a, b\) 가 \(mod m\)에 대해 합동일 경우 \(a, b\) 각각에 정수 \(x\)를 더하거나 빼거나 곱해도 여전히 합동이다.