자, 암호란 무엇인가? 글을 나만 읽을 수 있고 남은 못 읽게 하는 기술이다.
기본적으로 현대 컴퓨터 암호의 원리는 다음과 같다.
일단 우리가 이렇게 글을 쓰고 그림을 그린다 해도 이건 인간 언어로 표현되는 모습이고,
컴퓨터의 프로그램 상에선 14715980943832467.....이런 수로 나타난다.
아예 기계 단위로 가면 10010100101010010010....이렇게 보일 거고.
자, 이 수에다가 어떤 계산을 적용해서 마구 뒤섞는 것이 암호화다.
예를 들어 보자.
오렌지라는 단어를 암호화한다 칠 때,
1. '오렌지'는 컴퓨터 프로그램에선 19721121 이라고 기록된다.
2. 자, 그럼 19721121을 암호화 프로그램에 집어넣자.
이 암호화 프로그램의 구조는 (((n+1)*4)/5)*10+4 다. n이 암호화하려는 텍스트다.
3. 즉 암호화 과정은 (((19721121+1)*4)/5)*10+4=157768980.
암호문은 157768980이 된다.
이 메시지를 가로챈다 한들, 숫자들이 계산에 따라 엉망으로 뒤틀렸기에
어떤 과정으로 암호화한 건지 모른다면 읽을 수 없다.
4. 암호문을 받았다면 계산을 거꾸로 해서 19721121(오렌지)이라는 원문을 얻어낼 수 있다.
이렇게 계산을 거꾸로 해서 암호문을 평문으로 바꾸는 것을 복호화라고 한다.
꼭 거꾸로 할 필요는 없고 같은 계산을 한 번 더 해서 복호화할 때도 있다.
1에 -1을 곱한 다음 다시 -1을 곱하면 1로 돌아오듯이 말이다.
물론 계속 똑같은 암호만 쓰면 당연히 걸린다. 그래서 현대에 와선 이런 방식을 쓴다.
다시 (((n+1)*4)/5)*10+4 로 돌아오면, 계속 이 식을 쓴다면 언젠가는 뚫릴 수도 있다.
그럼 이렇게 하는 건 어떨까.
(((n+1)*4)/5)*10+x
이렇게 계산에 x라는 미지수를 넣은 다음, 암호화를 할 때마다 서로 다른 x값을 사용하는 것이다.
(((n+1)*4)/5)*10+1
(((n+1)*4)/5)*10+100
(((n+1)*4)/5)*10+3817
뭐 이런 식으로.
이렇게 하면 매번 사용하는 암호화 공식이 조금씩 달라지므로, 해독하기가 더더욱 어려워진다.
시드값이 달라지면 결과가 크게 달라지니까.
해독할 때는 무슨 x값을 썼는지만 알면 쉽게 복호화가 가능하다.
그리고 바로 암호화할 때마다 이렇게 시드값으로 쓰이는 x 같은 숫자를 키라고 한다.
암호란 화랑! 담배! 다
이게 많이 복잡해서 이젠 개발자 데려와서 협박 혹은 고문한 뒤 풀게한다면서요?