암호학 분야에서 우리가 암호 알고리즘을 이야기 하기에 앞써 어떤 암호화 방식이 완벽한 비밀 유지가 가능한지를 이야기 해야한다.
따라서 이번 글에서는 Perfect Secret이란 무엇인지, OTP가 무엇인지 알아보려고 한다.
Threat Model
우리가 암호를 만들어서 통신을 할 때 이를 공격하는 유형은 크게 4가지로 나뉜다.
1. Cipher-text only attack
공격자가 가지고 있는 정보는 암호 뿐이고 이를 바탕으로 Brute force attack으로 공격하는 방식을 의미한다.
2. Know-plaintext attack
공격자가 무작위의 plaintext에 대해서 이에 대한 ciphertext를 가지고 있고 이를 바탕으로 pattern을 유추하거나 brute-force로 공격을 하는 것을 의미한다.
3. Chosen-plaintext attack
공격자가 선택한 plaintext에 대해서 이에 대한 ciphertext를 가지고 있고 선택한 plaintext들 사이의 관계를 통해 pattern을 유추하거나 brute-force로 공격을 하는 것을 의미한다.
4. Chosen-ciphertext attack
공격자가 선택한 ciphertext에 대해서 이에 대한 plaintext를 victim의 시스템에서 복호화 시켜 이를 바탕으로 관계를 유추하거나 brute-force로 공격을 하는 것을 의미한다.
우리가 Thread Model의 공격방식을 보면 pattern을 유추하거나 brute force방식을 통해 공격을 하는 것을 알 수 있다.
여기서 pattern이라는 것이 무엇인지를 살펴보아야하는데 pattern이란 plaintext가 암호화 되면서 생기는 ciphertext와의 관계 또는 규칙이다.
예를 들어
abcd (평문) -> efgh (암호문)
이라고 하면 암호문은 평문에서 아스키코드를 4를 더한 것으로 유추 할 수 있다. 이외에도 글자를 하나 바꿔 ciphertext가 어떻게 바뀌는지 등을 패턴이라고 이야기한다.
여기서 우리가 Perfect Secret을 이야기하게 된다.
Perfect Secrecy
패턴을 없애려면 어떻게 해야할까?
우리가 암호를 만들때 key라는 것을 바탕으로 암호문을 만든다.
완벽한 암호란 이러한 Key가 plaintext만큼 존재하는 것을 의미한다.
즉 우리가 plaintext를 생성할 수 있는 경우의 수가 n개라면 key또한 n개가 존재하는 것을 의미한다. 이렇게 되면 우리가 만드는 Plaintext-key pair는 각각 독립적으로 존재하기 때문에 어떤 Plaintext-Ciphertext의 쌍을 가지고 있든 key가 독립적으로 존재하기 때문에 패턴이 존재하지 않게 된다.
OTP
OTP(One-time Programmable)은 앞써 말한 Perfect Secrecy의 개념을 차용해서 만들어진 암호방식이다.
Message가 주어지면 해당 Message길이 만큼 Random한 Key가 생성되고 이러한 Key와 XOR이나 Mod연산 등으로 기존의 Plaintext를 암호화 하는 방식을 OTP라고 이야기한다.
여기서 주의할 점은 Key가 모든 Message에 독립적이여야하기 때문에 key는 재사용이 되지 않아야한다.
또한 key 또한 진정한 의미의 난수가 되어야 한다는 것이다.
여기서 문제가 발생한다.
1. Message 길이가 4GB이면 Key또한 4GB여야한다.
2. 컴퓨터에서 진정한 의미의 난수를 생성하기란 불가능하다.
보통 컴퓨터에서 생성하는 난수의 경우 주기 매우 긴 sequence를 잘라서 만든다.
OTP는 물론 이론적으로는 안전하지만 완전히 구현하기가 매우 힘든 암호 알고리즘이다.
출처
성균관대학교 최형기 교수님 정보보호개론 강의(SWE3025)
'Computer Science > Security' 카테고리의 다른 글
SSH란? (0) | 2023.06.05 |
---|---|
[보안] 암호(2) RC4 (0) | 2022.11.01 |
[보안] 디피-헬먼 키 교환 1편 (0) | 2022.10.29 |