비밀 값을 저장하는 방법 중의 하나를 소개하고 증명과정까지 정리해보겠습니다.
저는 비밀 값 S를 은밀하고도 안전하게 보관하고 싶습니다.
현재는 비밀 값을 종이에 적어놓고 금고에 보관하고 있습니다.
금고가 털릴 가능성이 크진 않아보이지만, 언젠가는 털릴수도 있다는 걱정을 지울 수 없습니다.
그래서 비밀 값을 둘로 나누어 다른 장소의 금고에 각각 보관하고 싶습니다.
비밀 값을 둘로 나누어 저장하고자 할 때, 만약 비밀 값이 'abcd1234'라고 했을 때, 가장 먼저 떠오르는 방법은 한 금고에 'abcd'를 적은 종이를, 다른 금고에는 '1234'를 적은 종이를 보관하는 것입니다.
그리고 이렇게 했을 때 한 금고의 종이가 도난당하더라도 도둑은 비밀 값 전체를 알 수는 없습니다.
하지만 중대한 문제점이 있습니다.
비밀 값 전체는 아니지만 도둑은 그래도 절반의 비밀 값을 알게되었습니다.
이 정보를 통해 도둑이 저에게 어떤 손해를 끼칠 수 있을지는 미지수입니다.
그래서 한 곳의 정보가 유출되더라도 어떠한 정보도 도둑에게 주지 않도록 새로운 방법을 쓰려고 합니다.
먼저 무작위로 숫자 R(key)을 생성합니다.
그리고 비밀 값 S와 R을 XOR(배타적 논리합)연산을 시킨 값 S⊕R(ciphertext)을 연산합니다.
그리고 두 금고에 R과 S⊕R를 각각 저장합니다.
이렇게 되면 어느 한 금고에 저장된 값으로 어떠한 정보도 알 수 없게 됩니다.
R은 말그대로 무작위로 생성된 숫자이고, XOR연산으로는 어떠한 결과값도 나올 수 있기 때문입니다.
이제 저장된 두 값 R(key)과 S⊕R(ciphertext)를 통해 어떻게 비밀 값 S를 얻게 되는지 궁금하실겁니다.
S는 두 값을 다시 XOR연산 시켜주면 나오게 됩니다
S = R ⊕ (S⊕R)
매우 간단하고 효과적인 암호화입니다.
이제 어떻게 이러한 결과가 나오는지 궁금한데요,
그래서 증명해보았습니다.
XOR(배타적 논리합) 연산은 아래와 같습니다.
이를 이용해서 S = R ⊕ (S⊕R) 이 식이 성립함을 보이려 합니다.
XOR WIKIPEDIA
https://en.wikipedia.org/wiki/Exclusive_or
궁금하신 점이나 오류가 있으시면 댓글로 알려주세요
'BACKGROUND KNOWLEDGE > Mathematics' 카테고리의 다른 글
유클리드 호제법(Euclidean algorithm)으로 최대공약수 구하기 (1) | 2018.02.27 |
---|---|
소수(prime number)를 판별할 때 N까지가 아닌 √n 까지 나눠보는 이유 (0) | 2018.02.14 |