01. 영화 «다 빈치 코드» 속 암호의 비밀

1. 학습 목표 (Learning Objectives)

  • 암호학의 기초와 영화 속에 등장한 피보나치수열 기반의 숫자 암호를 해석하는 방법을 이해합니다.
  • 파이썬(Python) 코드를 이용하여 임의의 숫자들을 정렬하고, 다음 피보나치 숫자를 예측해내는 프로그램을 작성합니다.

2. 소니에르의 다잉 메시지

루브르 박물관의 큐레이터인 자크 소니에르는 살해당하기 직전, 자신의 배 위에 피로 펜타그램(별 모양)을 그리고 바닥에 의문의 문자열을 남겼습니다. 그 중 첫 번째 줄은 다음과 같은 숫자들의 나열이었습니다.

13 - 3 - 2 - 21 - 1 - 1 - 8 - 5

이는 로버트 랭던 박사가 사건의 진실에 접근하도록 남긴 첫 번째 단서였습니다. 언뜻 보아서는 아무런 의미가 없는 숫자의 조합 같지만, 이를 오름차순(가장 작은 수부터 차례대로)으로 정렬해보면 다음과 같은 배열이 됩니다.

1, 1, 2, 3, 5, 8, 13, 21

이 숫자의 배열은 앞의 두 숫자를 더하면 다음 숫자가 만들어지는, 이른바 피보나치수열(Fibonacci Sequence)입니다. 암호를 풀기 위해서는 직관력뿐만 아니라 수학적 배열에 대한 지식이 필요했던 것입니다.

2D 웹툰 애니 판타지 스타일: 미술관 바닥의 핏빛 펜타그램 위로 1, 1, 2, 3, 5, 8, 13 차례의 피보나치 숫자가 마법 홀로그램처럼 떠오르며 사건의 단서를 여는 장면을 바라보는 큐레이터

3. 파이썬으로 암호문 해독하기 (Python)

영화 속 주인공처럼, 우리도 파이썬을 이용해 무작위로 섞인 숫자 암호를 받아 정렬하고, 그 숫자들이 피보나치수열이 맞는지 검증한 뒤 다음 비밀번호(다음 항)를 알아내는 간단한 암호 해독기를 만들어 봅시다.

# 다 빈치 코드에 등장한 암호 숫자 리스트
secret_code = [13, 3, 2, 21, 1, 1, 8, 5]

# 1. 오름차순으로 정렬 (작은 수부터 큰 수로)
secret_code.sort()
print("정렬된 암호문:", secret_code)
# 출력: [1, 1, 2, 3, 5, 8, 13, 21]

# 2. 피보나치수열이 맞는지 간단히 확인하고 다음 숫자(비밀번호) 예측하기
# 배열의 마지막 숫자(21)와 그 앞 숫자(13)
last_num = secret_code[-1]
second_last_num = secret_code[-2]

next_password = last_num + second_last_num

print(f"다음 피보나치 비밀번호는 {next_password} 입니다!")
# 출력: 다음 피보나치 비밀번호는 34 입니다!

컴퓨터의 기본 기능인 sort() 메서드를 이용하면 아무리 복잡하게 섞인 숫자들이라도 0.001초 만에 깔끔하게 규칙을 찾을 수 있도록 힌트를 제공합니다.

4. 학습 정리 (Summary)

  1. 패턴 인식: 무작위처럼 보이는 데이터 속에서 수학적 규칙(점화식)을 찾아내는 것은 암호학의 가장 기본이 됩니다.
  2. 피보나치수열: 앞의 두 숫자를 더해 새로운 숫자를 만들어내는 시퀀스는 예측 가능성을 열어줍니다.
  3. Python sort(): 파이썬 리스트의 내장 함수를 사용해 수학적 데이터를 오름차순으로 손쉽게 정리할 수 있습니다.
서브목차