3 건의
BACKGROUND KNOWLEDGE/Mathematics 검색결과


Image result for xor encryption


비밀 값을 저장하는 방법 중의 하나를 소개하고 증명과정까지 정리해보겠습니다. 


저는  비밀 값 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


궁금하신 점이나 오류가 있으시면 댓글로 알려주세요