Did you know that you can navigate the posts by swiping left and right?

[암호학] 일회성 패드(One-Time Pad)

21 Feb 2017 . category: Cryptology . Comments
#cryptology #one-time-pad

일회성 패드(One-Time Pad)

일회성 패드1는 절대적 보안 기능2을 제공한다. 일회성 패드는 패드라는 임의 데이터 블록을 이용하는 암호 시스템이다.

사용 및 특징

평문3과 길이가 같은(같거나 큰) 일회성 패드를 만든다. 일회성 패드에 있는 임의 데이터는 확실히 무작위로 있어야한다. (가능한 경우가 0과 1밖에 없기 때문에 난수가 50%의 확률로 임의적으로 생성되면 된다.) 또한, 송신자와 수신자가 같은 패드를 가지고 있어야한다. 왜냐하면, 이 패드가 암호를 복호화(해독)하는 키(Key)이기 때문이다. 송신자는 평문과 패드(키)를 서로 XOR연산4 해서 메세지를 보낸다. 메세지를 어떻게 보내더라도, 메세지를 받는 사람(공격자든 아니든)은 패드가 없으면 복호화할 수 없기 때문에 암호에 어떤 의미가 담겨있는지, 평문을 전혀 알 수 없다. 수신자는 패드를 다시 받은 메세지와 XOR 연산을 하여 평문을 얻을 수 있고 진짜 메세지를 읽을 수 있다. 그리고 패드는 한번 사용하였기 때문에 삭제하여야한다. (XOR 연산을 하는 이유는 A XOR B = C 라 할때, A XOR C = B, B XOR C = A 이란 특성이 존재하기 때문이다.)

예시

일회성 패드의 예시를 들어보자. 아래 주석에서 예시를 들었던 Apple 이라는 메세지를 수신자가 보내고 싶다고 해보자. 아래의 예시를 보자. 패드는 내가 그냥 랜덤으로 만들어봤다. (머릿속에서 나온 랜덤이라는건 0과 1이 나올 확률이 완벽하게 50%가 아니기 때문에 완벽한 예시는 아니다.)

<송신자가 보낼때>
평문 - 01000001 01110000 01110000 01101100 01100101
패드 - 01001000 01100101 01101100 01101100 01101111
XOR - 00001001 00010101 00011100 00000000 00001010

00001001 00010101 00011100 00000000 00001010 을 전송함

<수신자가 보낼때>
수신 - 00001001 00010101 00011100 00000000 00001010
패드 - 01001000 01100101 01101100 01101100 01101111
XOR - 01000001 01110000 01110000 01101100 01100101

XOR 연산 결과로 송신자가 보내고 싶었던 평문을 다시 얻었다!
그리고 패드(일회성 패드)를 삭제한다.

한계점

그러나, 일회성 패드에는 한계점이 있다. 실제로 사용하기에는 어렵다는 것이다. 일회성 패드의 보안성은 패드의 보안성에 있다. 패드를 사용하기 전에 다른 사람에게 노출되면, 평문이 노출되는 것과 같기 때문이다. 즉, 현실적으로 패드를 완벽히 안전하게 보내는 능력이 존재하면, 패드를 안전하게 보내는 것보다 평문을 안전하게 보내는 것이 더 합리적이기 때문이다.

  1. 원타임 패드(One-Time Pad)의 이니셜을 본따서 OTP라고도 하지만, 우리가 흔히 아는 OTP(One-Time Password)와는 무관하다. 

  2. 절대적 보안 기능이란 무한대의 컴퓨터 자원을 이용하더라도 깨뜨릴 수 없는 암호 시스템을 의미한다. 브루트포스(Brute-force, 전수조사) 공격으로 모든 키를 시도하더라도 어떤 키가 올바른 키인지 판단할 수 없는 경우이다. 즉, 이론적으로 암호문으로부터 키의 특성을 전혀 파악할 수 없는 완전한 암호시스템을 의미한다. 

  3. Plaintext, 전달하고자 하는 일반적인 메세지. 진짜 의미가 있는 메세지. 예를 들어서 ASCII 코드로 보내고 싶은 메세지가 ‘Apple’이라고 하면 우리는 0과 1로 이루어진 Binary로 보내야하기 때문에 본 포스트에서의 평문은 ‘0100000101110000011100000110110001100101’가 된다. (ASCII 코드상 A는 65(01000001), p(01110000), p(01110000), l(01101100), e(01100101)이기 때문.) 

  4. 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0


Me

Coding Future, Decoding Society.