Professional Documents
Culture Documents
J 06920231433
J 06920231433
출품번호
1433
제69회 전국과학전람회
2023. 8. 18.
출품학생
지도교원
구 분 학생부
출품부문 산업 및 에너지
비고 1) ‘구분’란은 학생부 또는 융합
산업 및 에너지(SW‧IT 교원⋅일반부로
분야 포함), 명기하고, ‘출품부문’란은
지구 및 환경 중 해당하는물리,부문으로
화학, 생물,
명기
2) A4용지 규격 30쪽 이내 좌철 제본용으로,
결론, 전망과학작품대회·지도논문연구대회 작품연구의 동기, 목적,
및 활용성 등을 체계적으로 기술작품설명서 작성요령 참고 연구내용, 연구과정,
3) [작성요령]
- 1 -
- 목 차 -
1. 연구목적 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··1
가. 이전에 수행한 나의 연구 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··1
나. 동기 및 목적 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··2
2. 사전 연구 ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··3
가. 암호화 기법 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··3
나. 삼각형의 특성 ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··3
3. 제작과정 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··6
가. 암호화 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··6
나. 복호화 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··16
4. 프로그램 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··19
가. 개발 환경 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··19
나. 프로그램 리스트 ·
·
···
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··19
5. 프로그래밍 중 어려웠던 점 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··26
6. 전망 및 활용성 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··28
7. 참고자료 ·
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··
··29
1. 연구목적
가. 이전에 수행한 나의 연구
- 1 -
만들어진 삼각형에서 법선벡터를 구하여 3개의 숫자를 얻는다. 이 법선벡터에서 각 삼각형이
그림 1-1의 구성되는 점과 그 순서를 알려주는 표에 따라서 4번째와 5번째 자리를 얻는다. 법
선벡터가 같더라도, 삼각형이 틀린 경우가 있기 때문이다. 예를 들어 그림 1-1의 삼각형 ABC,
ABD, BCD, ACD는 같은 법선벡터를 갖는다. 이를 구별하기 위해서 4번째와 5번째 자리를 추가
해야만 했다. 정육면체에서 만들 수 있는 모든 법선벡터에 대해서 만들 수 있는 삼각형을 모두
찾아내고 일일이 표로 미리 만들어 놔야 하는 불편함이 있었다.
그림 1-2처럼 그룹화를 했는데, 서로 같은 그룹이 생기면 꼭짓점이 겹쳐져서 삼각형이 만들
어지지 않으므로, 삼각형이 될 수 있도록 점을 옮기기 위해 임의로 만든 규칙에 따라 그룹 내
의 숫자를 바꾸고, 바꿨다는 것을 기록하는 6번째 자리를 추가하였다.
4자리의 십진수를 암호화하면 총 12자리의 암호화된 문자열로 바뀐다. 예를 들어 숫자 6234
는 이진수로 1100001011010이다. 이를 앞에 설명한 방법으로 암호화하면 010ad5100da1의 12자
리 문자열로 바뀐다. 암호화된 문자열에서는 원래의 4자리 비밀번호를 쉽게 유추할 수 없다.
이 방법은 암호화를 위해서 괜찮은 아이디어를 제공한 것으로 생각되지만, 몇 가지 개선할
점이 보였다. 4진수가 12자리의 문자열로 변경되므로, 자릿수만으로만 생각해도 3배가 늘어나
저장공간이 더 많이 필요하다. 4자리보다 더 큰 자리 수를 암호화할 경우의 확장성에 대해서도
제한이 있다. 게다가, 중간에 설명을 하였지만, 암호화의 4번째와 5번째 자리에 표를 만들어서
처리하는 부분도 임의성이 들어가 있어서, 깔끔하게 수학적으로 설명되지 않는 부분이 있었다.
암호화하는 측면에서는 임의의 표가 더 나을 수도 있기는 하다.
나. 동기 및 목적
- 2 -
간단해질 수 있을 것이라는 생각이 들었다.
본 연구를 통해서 3진법으로 변환하여 입체공간에서 삼각형의 특성을 활용한 암호화 방법을
찾아보고 거기에 맞는 복호화 방법을 찾아보려고 한다.
2. 사전 연구
가. 암호화 기법
암호화는 컴퓨터 기술의 발전과 함께 빠르게 진화해왔다. 암호화 기법은 대칭키 암호와 비대
칭키 암호 두 가지로 구분할 수 있다.
대칭키 암호는 암호화와 복호화에 같은 함수를 사용하며, 송신자와 수신자가 모두 함수를 알
고 있어야 한다. 1979년에 국가표준암호알고리즘으로 지정되었던 DES와 미국표준기술연구소
에 의해 연방정보처리표준으로 지정된 암호화 방식인 AES가 대표적이다.
비대칭키 암호(혹은 공개키 암호)는 암호화와 복호화에 각각 다른 함수를 사용하며, 암호화하
는 함수인 암호키는 널리 퍼져 있지만 복호화하는 함수인 공개키는 해당 정보를 가지고 있는
단일 기관만이 가지고 있다. 따라서 암호키가 유출되어도 안전하다는 장점이 있다. 그러나 복
호화에 필요한 시간이나 성능이 대칭키 암호보다 높은 단점도 있다 [2].
RSA는 엄청나게 큰 숫자는 소인수분해하기 힘들다는 점을 이용한 공개키 암호로 1973년에
개발되었다. 정수론에 대한 지식을 가지고 쉽게 이해도 가능하고 보안성이 뛰어나서 많이 사용
되고 있다. 우리나라를 포함한 인터넷 뱅킹이 RSA-2048을 사용한다고 한다. 또 다른 공개키
암호로는 소인수분해기반이며 중국인의 나머지정리를 활용한 공개키 암호인 라빈 암호가 있으
며, 이산대수 문제의 어려움을 근거로 해서 만든 엘가말 암호 등이 있다 [3].
비대칭키 암호는 암호화와 복호화에 각각 다른 함수를 사용하기 때문에 암호 체계를 구축하
기가 어렵고, 정수론적인 연산을 이용하기 때문에 컴퓨터 기술이 발전하면서 쉽게 풀릴 가능성
이 있다.
이러한 한계를 극복하기 위해 최근에는 기하학적 특성을 이용한 암호가 개발되고 있다. 대표
적인 예로는 타원곡선암호(ECC)가 있으며, 이는 덧셈 연산을 통해 암호화를 수행하며, 계산하
기는 쉽지만 역으로 연산하는 것이 어렵다. 또한 격자 암호는 기하학적 특성을 이용하여 개발
된 암호로, 양자컴퓨터에서도 활용할 수 있는 강력한 보안성을 가지고 있다 [4].
나. 삼각형의 특성
- 3 -
1) 수심
2) 외심
3) 내심
- 4 -
여기서
,
,
이다.
4) 방심
,
여기서 , ,
이다.
5) 무게중심
- 5 -
3. 제작과정
가. 암호화
1) 2×2×2 정육면체에서의 좌표
입력 1234
3진법으로 치환 1200201
3자리씩 묶어 그룹으로 묶기 (1)(200)(201)
3자리가 안되는 그룹에 0을 집어넣기 (001)(200)(201)
- 6 -
그룹의 개수가 3의 배수가 아닌 경우에는 3의 배수가 될 때까지 0을 앞에 채운다. 예를 들어
123456은 3진법으로 20021100110이다. 그룹으로 나누면 (20) (021)(100)(110)이다. 제일 앞 그룹
이 2개의 숫자로만 구성되었으므로 0을 추가하여 (020) (021)(100)(110)로 변환시킨다. 그룹이 4
개로, 두 번째 삼각형을 구성할 수 없으므로, 앞에 0을 6개를 추가하여 그룹을 6개가 되게 한
다. 이런 방법으로 입력된 숫자 123456을 (000)(000)(020) (021)(100)(110)로 바꾼다.
입력 123456
3진법으로 치환 20021100110
3자리씩 묶어 그룹으로 묶기 (20) (021)(100)(110)
3자리가 안되는 그룹에 0을 집어넣기 (020) (021)(100)(110)
그룹 개수를 3의 배수가 되도록 0 추가 (000)(000)(020) (021)(100)(110)
3) 외접벡터 구하기
- 7 -
c3-a3)를 구할 수 있다. 삼각형의 법선벡터는 두 벡터의 외접을 구하고 그 길이로 나누어서 얻
어진다. 외접벡터는 × = (t2×s3-t3×s2, t3×s1-t1×s3, t1×s2-t2×s1)가 된다. 그림 3-3은
숫자 520을 변환하여 얻어진 (000)(201)(021)의 그룹으로 만든 삼각형에서 외접벡터를 표시한
예이다.
나) 외접벡터가 중복되는 경우
- 8 -
<그림 3-4. 외접벡터가 겹치는 사례>
합동인 삼각형이 나옴으로 인해서 외접벡터가 중복되는 경우가 발생되었다. 따라서, 암호화를
위해서는 합동인 삼각형이 나오지 않는 방법을 찾아야 한다. 위의 그림에서 합동인 삼각형은
각 변의 길이가 같고, 꼭짓점 만 틀리다는 특징을 가지고 있다.
좌표점이 달라지면 변의 길이가 달라지게 만들면 합동인 삼각형이 없어질 것이다. 가장 쉬운
방법은 삼각형이 위치하는 꼭짓점 간의 간격을 다르게 하는 것이다. 이해가 쉽도록 하기 위해
서 2차원에서 살펴보자. 그림 3-5의 왼쪽은 y=0인 평면에서 합동인 4개의 삼각형을 보여주고
있다. 왼쪽 그림처럼 원래대로 하면 그룹의 첫 번째 값이 0이면 x=0에 위치하고, 1이면 x=1에
위치하고, 2이면 x=2에 위치하여야 한다. 이때 외적을 구하면 4개의 삼각형에서 모두 (0,-1,0)을
얻게 된다. 이렇게 되면 암호화된 결과가 중복이 되어버리므로, 복호화가 불가능해진다.
- 9 -
숫자 3진법(꼭짓점) 수정꼭짓점 ×
- 10 -
경우에 따라서는 위의 예에서 보이는 13645와 7589처럼 꼭짓점 매칭을 수정하더라도 변의 길
이 변경이 같은 경우에는 외접벡터가 같은 경우가 발생한다. 이 수와 같은 경우를 구별하여 다
른 암호화가 진행되도록 다른 삼각형의 특징을 추가적으로 사용할 필요성이 생긴다.
4) 무게중심 구하기
가) 무게중심 중복
나) 무게중심의 중복 피하기
- 11 -
4]에 대응되도록 조정을 하면, 각 조합의 합은 0, 1, 4, 2, 5, 8, 3, 6, 9, 12로 다른 값을 갖게
된다. 이런 식으로 변경되어 구하는 무게중심을 각 좌푯값에 가중치를 두어 계산을 했다는 의
미로 편의상 가중치 무게중심이라고 부르기로 한다.
향후에 대응되는 값의 조합 즉, [0, 1, 4]나 [1, 2, 5]를 암호키로 사용할 수도 있다. 무게중심
을 구하려면 3으로 나누어야 하나 편의상 3으로 나누지는 않고 합을 그대로 사용했다. 본 연구
에서는 [1, 2, 5]를 이용하여 사용하였다.
다) 외적 벡터가 같은 경우 무게중심 비교
- 12 -
라) 무게중심이 같은 경우 외적 벡터 비교
3진수로 얻어진 숫자를 3차원 공간상의 꼭짓점으로 매치시키는 방법을 바꾼다고 하더라도 유
일한 외적벡터를 얻을 수 없는 경우가 있고, 유일한 가중치 무게중심을 얻을 수 없는 경우가
있다. 다만, 같은 외적벡터라고 해도 가중치 무게중심 좌표가 틀리게 되고, 같은 가중치 무게중
심 좌표이더라도 다른 외적벡터를 얻게 된다. 외적벡터와 가중치 무게중심 좌표가 같게 되는
경우는 없다.
5) 순서 구하기
6) 문자 치환
앞에서 언급한 순서대로 진행하면 3진법의 9자리가 외적벡터 x, y, z값 3개, 가중치 무게중심
좌표(합 좌표) x, y, z값 3개, 순서의 7개 숫자로 바뀐다. 각 자리에 음수나 두 자리 수가 있을
수 있으므로, 이를 한 자리로 바꾸기 위해서 다음의 방법을 사용했다. 먼저 두 자리 수는 영문
자의 대문자로 치환한다. 즉 10, 11, 12, 13은 A, B, C, D로 치환한다. 음수는 소문자로 치환한
다. 즉 –1, -2, -3, -4는 a, b, c, d이다. 이렇게 하면 3진법 9자리가 최종적으로 7개의 문자리스
- 13 -
트로 변환된다.
7) 암호화의 예
(0,0,1), (1,2,0), (1,2,0)의 그룹과 (0,0,1), (0,0,1), (1,2,0)의 그룹은 3차원 공간 상에서는 같은 선
분으로 나타날 뿐이지만 가중치 무게중심(좌표합)을 구하면 (5,11,4)와 (4,7,5)로 서로 다른 값어
- 14 -
서로 구별이 된다.
예를 들어 1149을 암호화 해보자. 이 숫자는 3진법으로 1120120이며, (0,0,1),(1,2,0),(1,2,0)의
그룹이 만들어진다. 외적을 구하려면 (0,0,1), (1,3,0), (1,3,0)으로 바뀌며 (0,0,0)으로 변환된다. 좌
표합를 구하기 위해 위에서 설명한 좌표 매칭에 따라 (1,1,2), (2,5,1), (2,5,1)로 바뀐 뒤 (5,11,4)
로 변환된다. 세 번째와 두 번째가 같고 첫 번째가 가장 작으므로, 6이 지정된다. 얻어진 숫자
는 0, 0, 0, 7, 11, 4, 6이고, 문자로 치환하면 0005B46으로 암호화가 된다.
9) 암호화 결과의 비교
- 15 -
<그림 3-8. 암호화 알고리즘>
나. 복호화
1) 암호화 문자의 처리
2) 각 좌표의 구성 얻기
- 16 -
좌표합으로 나타난 수를 보면 암호화에서 언급한 좌표값들이 [0,0,0], [0,0,1], [0,0,2], [0,1,1],
[0,1,2], [0,2,2], [1,1,1], [1,1,2], [1,2,2], [2,2,2]의 구성 중 어느 것에 해당하는지 알 수 있다. 각
구성에 따라 다른 숫자가 나오도록 조정을 하였기 때문이다. 위의 예에서 좌표합은 (11,3,5)이
다. 11은 세 점의 x좌표가 순서는 모르지만 [0, 2, 2]임을 의미하며 3은 세 꼭짓점의 y좌표가
[0, 0, 0]이며, 5는 세 점의 z좌표가 [0, 1, 1]임을 의미한다.
좌표합에서 얻어진 x1, x2, x3, y1, y2, y3, z1, z2, z3를 가지고 만들 수 있는 삼각형의 조합은
모두 6^3개 즉 216개이다. x좌표로만 보면 가능한 순서가 [x1,x2,x3], [x1,x3,x2], [x2,x1,x3],
[x2,x3,x1], [x3,x1,x2], [x3,x2,x1]으로 6개이다. 이를 모두 나열하면 다음과 같은 형태이다.
4) 순서가 맞는지 확인
5) 복호화의 알고리즘
- 17 -
<그림 3-9. 복호화 알고리즘>
- 18 -
4. 프로그램
가. 개발 환경
python은 list, tuple, set, dictionary같은 기본 자료형이 사용하기 편리하고 여러가지 내장함수
를 제공하여 많은 동작을 할 수 있고, 이 덕분에 좌표를 쉽게 하나의 리스트로 묶어서 구현할
수 있을 것 같았다. 또한 함수지향적 프로그래밍과 객체지향적 프로그래밍을 동시에 사용할 수
있다. 이를 이용하면 코드를 단순화시켜서 간단하게 구현을 할 수 있어서 사용하게 되었다. 실
제로 전 선행연구는 C++로 코딩을 하여4자릿수만 사용 가능했으며 복호화 600줄, 암호화 500
줄에 이르는 반면, 파이썬을 사용하여 어떤 정수든지 입력받아서 200줄 이네에 암호화, 복호화
가 동시에 진행되도록 함수를 만들수 있고, 함수에 그냥 넣으면 암호화, 복호화가 진행되도록
코딩할 수 있었다.
나. 프로그램 리스트
import sys
- 19 -
def convert_char_to_int(char: str) -> int:
if 'a' <= char <= 'j': # 'a'~'c'
return ord('a') - ord(char) - 1
elif 'A' <= char <= 'J': # 'A'~'C'
return ord(char) - ord('A') + 10
elif '0' <= char <= '9': # '0'~'9'
return int(char)
else:
return None # 입력값이 올바르지 않은 경우 None 을 반환
def convert_num(num):
# 10 진법 정수를 3 진법 정수로 변환하고, 문자 2 를 문자 3 으로 바꾸기
num_str = ''
quotient = num
while quotient > 0:
quotient, remainder = divmod(quotient, 3)
num_str = str(remainder) + num_str
num_str = num_str.replace('2', '3')
# 결과 리스트 반환
return groups
convert_num 함수는 입력된 숫자인 num으로 ‘가) 암호화’중‘2) 3진수 변환을 통한 삼각형
꼭짓점 얻기’를 수행한다. ‘3) 외접벡터 구하기’중‘다) 외접벡터가 중복을 피하는 방법’
에서 설명한 것처럼 외접벡터의 중복을 피하기 위해서 3진법의 숫자가 2이면 3으로 변경을 한
다. 최종적으로는 입력된 num을 3숫자로 구성된 리스트를 3의 배수인 갯수로 포함한 groups으
로 변환하여 반환한다.
def convert_list_to_decimal(lst):
# 모든 리스트를 하나의 리스트로 합치기
flattened = [elem for sublst in lst for elem in sublst]
- 20 -
# 모든 원소의 3 을 2 로 변경
replaced = [2 if elem == 3 else elem for elem in flattened]
# 합친 리스트를 문자열로 변환
str_repr = ''.join(str(elem) for elem in replaced)
# 3 진법 문자열을 10 진법 정수형으로 변환
decimal = int(str_repr, 3)
return decimal
def encrypt(a,b,c):
s = []
t = []
aa = 1
bb = 2
cc = 5
wmid = [0,0,0]
for k in range(len(a)):
temp = [0,0,0,0]
x = a[k] - b[k]
t.append(x)
y = a[k] - c[k]
s.append(y)
temp[a[k]] += 1
temp[b[k]] += 1
temp[c[k]] += 1
wmid[k] = aa*temp[0]+bb*temp[1]+cc*temp[3]
wmid = tuple(wmid)
vec = (t[1]*s[2]-t[2]*s[1], t[2]*s[0]-t[0]*s[2], t[0]*s[1]-t[1]*s[0])
lexi_order = 0
if a > b:
if b > c:
lexi_order = 1
else:
if a > c:
lexi_order = 2
else:
lexi_order = 5
else:
if a > c:
lexi_order = 3
- 21 -
else:
if b > c:
lexi_order = 4
else:
lexi_order = 6
result = (
convert_num_to_string(vec[0])
+ convert_num_to_string(vec[1])
+ convert_num_to_string(vec[2])
+ convert_num_to_string(wmid[0])
+ convert_num_to_string(wmid[1])
+ convert_num_to_string(wmid[2])
+ convert_num_to_string(lexi_order)
)
return result
def cmp(a,b,c):
if a > b:
if b > c:
return [c,b,a]
else:
if a > c:
return [b,c,a]
else:
return [b,a,c]
else:
if a > c:
return [c,a,b]
else:
if b > c:
return [a,c,b]
else:
return [a,b,c]
def decrypt(a):
lexi_order = convert_char_to_int(a[6])
vec = [convert_char_to_int(a[0]), convert_char_to_int(a[1]), \
- 22 -
convert_char_to_int(a[2])]
wmid = [convert_char_to_int(a[3]), convert_char_to_int(a[4]), \
convert_char_to_int(a[5])]
d = dict()
d[3] = [3,0,0]
d[4] = [2,1,0]
d[7] = [2,0,1]
d[5] = [1,2,0]
d[8] = [1,1,1]
d[11] = [1,0,2]
d[6] = [0,3,0]
d[9] = [0,2,1]
d[12] = [0,1,2]
d[15] = [0,0,3]
order = [[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]]
if a > b:
if b > c:
p = 1
else:
if a > c:
p = 2
else:
p = 5
else:
if a > c:
p = 3
else:
if b > c:
p = 4
else:
p = 6
if(p != lexi_order):
continue
s = []
t = []
- 23 -
for k in range(len(a)):
x = a[k] - b[k]
t.append(x)
y = a[k] - c[k]
s.append(y)
- 24 -
for i in range(0, len(b)//7):
c = b[i*7:i*7+7]
lst += decrypt(c)
return convert_list_to_decimal(lst)
- 25 -
<그림 4-2. 실행 예2, 1234의 복호화와 암호화>
5. 프로그래밍 중 어려웠던 점
- 26 -
else:
print(sent[1], sent[1], sent[0])
elif isbc == 1and isca+isab == 0:
if lexi_order == 2:
print(sent[1], sent[0], sent[0])
else:
print(sent[0], sent[1], sent[1])
elif isca == 1and isab+isbc == 0:
if lexi_order == 4:
print(sent[0], sent[1], sent[0])
else:
print(sent[1], sent[0], sent[1])
else:
print(sent[0], sent[0], sent[0])
if True:
if lexi_order == 6:
print(sent[0], sent[1], sent[2])
elif lexi_order == 5:
print(sent[1], sent[0], sent[2])
elif lexi_order == 4:
print(sent[0], sent[2], sent[1])
elif lexi_order == 3:
print(sent[1], sent[2], sent[0])
elif lexi_order == 2:
print(sent[2], sent[0], sent[1])
elif lexi_order == 1:
print(sent[2], sent[1], sent[0])
암호화 과정은 어떻게든 대응되는 식을 구성하면 되지만, 복호화 과정은 모든 경우를 계산해
보면서 가능한 경우가 하나 나오게 되는 방식을 사용한다. 그러면 복호화 과정에서 탐색해야
하는 전체 공간을 잘 설정해야 중복이 일어나지 않아 일대일 대응을 시킬 수 있게 된다.
맨 처음에 복호화 코딩을 시작했을 때는 탐색하는 공간이 무게중심만을 조건으로 가졌다. 즉
무게중심이 주어지면 각각의 x좌표 3개, y좌표 3개, z좌표 3개를 구할 수 있기 때문에 27개의
- 27 -
경우의 수를 따져보면서 법선벡터와 같아지는지 판별한 뒤 lexi_order와 isab, isbc, isca로
a, b, c에 올바른 좌표를 배열할 수 있었다. 몇 가지 경우를 해보면서 복호화가 잘 된다는 것
을 알 수 있었다.
그런데 여기에는 큰 문제점이 존재하는데 무게중심에서 나올 수 있는 27개의 경우가 잘못하
면 정확히 반대의 법선벡터를 가지는 경우가 존재할 수 있게 된다. 물론 반대의 경우가 조건문
에 걸려서 문제가 되는 것은 아니다. 문제가 되는 이유는 법선벡터를 구할 때 외적을 사용하는
데, 이 외적은 순서가 바뀌게 되면 값이 음수가 되서 정확히 반대가 나오게 되고, 반대의 반대
가 나와서 나오면 안되는 법선벡터가 나오게 되서 일대일대응이 일어나지 않는다는 것이었다.
예시로는 [0, 1, 3] [0, 0, 1] [0, 3, 0] -> (7, 0, 0)이고, [0, 0, 3] [0, 1, 0] [0, 3, 1] -> (-7, 0,
0)인데 이 순서가 바뀌게 되면 (7, 0, 0)이 나오게 된다.
이를 해결하기 위해서 전체공간을 줄이게 되는데, lexi_order 또한 암호문-평문 관계를 하나
로 결정짓게 만드는 요소라는 것을 생각해서 27개의 경우 중 lexi_order가 맞아야 법선벡터를
구해보고 평문을 구할 수 있게 만들었다.
6. 전망 및 활용성
- 28 -
이렇게 하더라도 16^9 - 1 = 68,719,476,735까지도 7자리의 문자열이면 암호화가 가능하다. 앞
에서 언급한 삼각형의 외적벡터의 중복 문제는 각 변의 길이가 다르게 만들어서 해결할 수 있
다. 3진수를 그대로 좌표로 사용할 경우 0, 1, 2는 삼각형 한 변의 x 방향 길이가 0, 1, 2 밖에
없어 겹치는 경우가 있어 외접벡터가 중복이 되었다. 하지만, 대응하는 좌표를 0, 1, 3으로 바
꿀 경우, 삼각형 한 변의 x 방향 길이가 0, 1, 2, 3으로 다양화되어 그 변의 꼭짓점이 있는 위
치가 다르면 변의 길이가 달라졌다. 비슷하게 16진수를 사용하면 0, 1, 2, ..., 15를 그대로 좌표
로 대응시킨다고 하면 중복이 되는 경우가 많이 발생하나, 이를 적절히 간격을 조절하여 배치
하면 다른 변의 길이를 갖게 되어서 외적벡터를 다르게 조작할 수 있다. 무게 중심의 경우도
마찬가지이다. 조금의 연구가 추가된다면 진법에 따라서 좌표계의 대응에 방법도 찾을 수 있을
것으로 생각된다. 이렇게 된다면 어떤 진법을 사용하더라도 대응되는 길이를 갖는 정육면체를
사용하여 암호화를 할 수 있게 될 것이다.
다른 쪽으로 생각해 보면 외적벡터이니 무게중심이니 하는 것은 삼각형의 좌표에 대해서 대
수방정식을 적용하는 것이다. 만약에 삼각형을 만들 수만 있으면 이 좌표를 가지고 임의의 대
수방정식을 제안하고 적용하면 암호화가 가능할 수 도 있다는 이야기가 된다. 삼각형이 아닌
다른 도형을 가지고도 좌표 간의 관계식을 제안할 수 있다면 암호화가 가능할 것이다. 일반화
한다면 다음과 같은 방법으로 암호화가 될 것이다. 괄호 안은 본 연구에서의 방법이다.
1) 숫자를 진법의 수정이나 동등한 방법을 통해서 변경한다. (3진법)
2) 일정한 개수만큼 그룹화한다. (3개씩)
3) 정해진 개수의 그룹을 선택하여 그룹군을 만든다. (3그룹씩)
4) 그룹군 내에 정해진 규칙에 따라서 연산을 한다. (삼각형의 외적벡터, 좌표 합, 좌표순서)
본 연구는 상기의 순서에서 4)를 위해서 입체공간에서 삼각형의 특징을 사용하여 규칙을 만
든 것으로 볼 수 있다. 위의 2)나 3)에서 예를 들어 세 개가 아닌 네 개나 다섯 개를 선택했을
때에도 규칙이 세 개만 필요할 지에 대해서는 좀 더 연구가 필요할 것으로 생각이 든다.
암호화를 하는데 있어서 숫자를 좌표로 변환하는 방법은 기존의 암호화 방법에서 사용하지
않은 방법이다. 3차원 좌표계에서 적용할 수 있는 가장 쉬운 도형인 삼각형을 이용하여 암호화
를 진행하여 방법을 제안하였다. 이 방법을 이용하면 간단하지만 쉽게 유추할 수 없는 암호화
가 가능해지며, 해당 복호화 프로그램을 가지고 있지 않은 사람은 해독하기 어려울 것으로 예
상된다. 시간이 지날수록 개인, 단체, 국가의 정보가 중요해지고 있다. 하지만, 컴퓨터가 인터
넷에 연결되어서 작동되므로, 보안에 취약해지는 상황이다. 중요한 정보의 유출을 막기 위해서
는 암호가 중요한 역할을 할 것이다. 본 연구를 통해서 새로운 형태의 암호화 기법을 제안하고
이를 확장시킬 수 있는 방법을 제안하였다. 이런 과정이 지속된다면 향후 정보 보안에 커다란
기여를 할 수 있을 것으로 기대한다.
7. 참고자료
[1] 김석준, 김진욱, 김주은, 백하빈, 입체도형의 평면의 법선벡터를 이용한 암호화 및 복호화
장치 및 그 방법, 출원번호 10-2022-0159607, 2022.11.
[2] 이상진, 임종인, “현대 수학과 암호”, Telecommunications Review, 제10권 5호, pp.866-
876, 2000.
- 29 -
[3] Holden, J., 수학으로 이해하는 암호의 원리 : 고대 시저 암호부터 현대 디지털 암호까지,
프리렉, 2017.
[4] 김정식 외 3인, “타원곡선암호 및 구현 방법에 대한 연구”, 한국정보과학회 2007 가을
학술발표 논문집, 제34권 제2호(D), pp.46-50, 2007.10.
[5] 삼각형의 오심의 Cartesian 좌표, https://orbi.kr/00055499006/[컬럼]-삼각형의-오심의-Cartesian
-좌표/, 2022.03.
- 30 -