여러분들의 일코를 위해 간단하게 암호 만드는 방법을 알려드릴게요.
2013.06.10 04:39
네타 |
---|
<괴델수> 방식에 의한 암호를 만드는 방법
우선 알파벳의 26 문자의 n 번째의 문자에 n 번째의 소수를 대응시켜서 암호표를 만듭니다.
암호표
A 2 | N 43 |
B 3 | O 47 |
C 5 | P 53 |
D 7 | Q 59 |
E 11 | R 61 |
F 13 | S 67 |
G 17 | T 71 |
H 19 | U 73 |
I 23 | V 79 |
J 29 | W 83 |
K 31 | X 89 |
L 37 | Y 97 |
M 41 | Z 101 |
그리고, 보내고 싶은 평문을 생각합니다. 일단 여기서는 예시문으로 I LOVE YOU를 들겠습니다. 저는 여러분을 사랑하니까요.
위 암호표를 보면,
I = 23
L = 37
O = 47
V = 79
E = 11
Y = 97
O = 47
U = 73
입니다.
자, 이제 슬슬 괴델수를 만들어봅시다.
괴델수 생성 함수를 g(x)라고 하며, a가 임의의 알파벳이라고 할 때(a_n은 원하는 문구의 n번째 자리에 있는 알파벳을 의미),
1. g(a)=암호표에서 대응되는 소수
2. g(a_1 a_2 a_3 … a_n) = (2^g(a_1)) × (3^g(a_2)) × (5^g(a_3)) × …… × (p_n)^g(a_n)입니다.
즉, g(I)는 1번에 따라 23이고
g(LOVE) 는 2번에 따라 (2^g(L)) × (3^g(O)) × (5^g(V)) × (7^g(E)) = (2^37) × (3^47) × (5^79) × (7^11) 이 되는 거죠.
비슷한 방식으로 g(YOU) = (2^97) × (3^47) × (5^73) 이 됩니다.
그런데 뭔가 숫자가 세 개 있으면 약간 그렇잖아요? 숫자 하나짜리 암호가 좋아요. 띄어쓰기가 어디 있는지 걱정할 필요도 없고 말이죠.
그렇기에 2중 암호를 합니다. 안전해지고, 숫자 하나로 줄어들고!
이번에는 g(I LOVE YOU)를 구합니다.
I, LOVE, YOU를 단일 알파벳이라고 생각한다면,
g(I LOVE YOU)
= (2^g(I)) × (3^g(LOVE)) × (5^g(YOU))
= (2^23) × (3^((2^37) × (3^47) × (5^79) × (7^11))) × (5^((2^97) × (3^47) × (5^73))) 가 최종 암호가 됩니다.
참 쉽죠? 오일러의 법칙이나, 타원곡선 암호 알고리즘같이 어려운 수학공식이 아닌, 곱셈과 거듭제곱만으로 암호가 만들어진다니!
암호 푸는 것도 쉽답니다! 숫자를 받으면, 2로 나눠보고, 3으로 나눠보고, 5로 나눠보고, 7로 나눠보고……그렇게 나눠본 뒤에, 몇 개로 나뉘어지는지 확인하면 된답니다.
저 숫자를 받았으면 일단 2로 나눠본 뒤에 "어라, 23번 나누니까 더 이상 나누어떨어지지 않네? 23이면……101보다 작네? 그러면 이건 그냥 I구나", "흐음, 3으로 나누니까 101보다 큰 숫자 이후에 나누어떨어지지 않네? 그러면 이건 다시 소수들로 나눠봐야겠구나." 하고 나누시면 평문이 나옵니다!
이로서 여러분은 수학 공부를 하는 척 하면서 몰래 친구들과 암호문으로 덕질 이야기를 주고받을 수 있어요!
HAVE U WATCHED THE LATEST EPISODE OF HATARAKU MAOUSAMA 같은 문장을 암호화해서 주고받아도 들키지 않아요!
이런 암호화 방식을 모르는 사람에게는 그저 이상한 숫자의 나열로밖에 안 보일 테니까요!
여러분, 모두 계산기를 꺼내들고 암호를 만들어 봐요!
끝.