암호(암호학) 하면 가장 먼저 무엇이 떠오르시나요?
암호학 하면 다들 어려운(특히 수포자에게) 분야라고 생각합니다.
하지만 알게 모르게 가장 친숙하게 우리의 삶에 녹아있는 것이 바로 암호입니다.
저는 처음 공부할 때 ID와 Password가 가장 먼저 떠올랐습니다.
Password(비밀번호)를 모르는 한 어떠한 사람도 로그인이 불가능합니다.
즉, 비밀번호를 알지 못하는 사람은 기능을 사용하지 못하도록 막는 역할을 하는 것입니다.
하지만 주변에서 "내 게임 계정이 털렸어" 라던가 "누가 내 계정으로 쇼핑을 했어" 와 같은 일을 뉴스 기사 등을 통해 접해본 경험이 다들 있으실 겁니다.
Password(비밀번호)를 모르는 공격자 입장에서 로그인을 할 수 있는 가장 간단한 방법은 무엇일까요?
바로 무차별 대입공격(Bruce-force attack)이라는 게 있습니다. 여기서는 로그인을 위해 Password로 가능한 모든 값을 대입하는 것을 의미합니다.
음🤔🤔 "그럼 결국에 시간만 충분하다면 Password는 뚫리는 게 아닌가요?"라고 할 수 있습니다.
하지만 이를 어렵게 하기 위해 우리는 회원가입에서부터 까다로운 조건들을 만족시켜 Password를 생성합니다.
회원가입 시 자주 볼 수 있는 비밀번호 조건입니다.
이 조건이 존재하는 이유가 뭘까요??
대표적인 이유가 길이와 복잡성의 상호 보완 때문입니다.
비밀번호가 길면서도 다양한 문자를 사용하면, 해킹 시간이 기하급수적으로 늘어납니다.
예를 들어, 비밀번호가 숫자로만 구성된 4자리라 가정합시다. 각 자리에 0 ~ 9까지 숫자 중 중복을 허용하여 4자리 비밀번호를 만드는 경우의 수는 10000 가지입니다. 즉, 공격자는 이 10000 가지 조합 중 단 하나의 비밀번호를 찾아야 합니다.
5자리라면 100000 가지 경우로 4자리 일 때 보다 99000가지 경우를 더 생각해야 합니다.
하지만 8 ~ 16자리/영문 대소문자, 숫자, 특수문자 조합이 공격자가 언젠가 로그인을 성공하는 경우를 모두 막을 수 있는 것은 아닙니다. 2002년도의 pc와 2023년도의 pc의 성능이 확연히 다른 것처럼 공격자 또한 성능? 이 매우 다양합니다.
그러므로 공격자가 시간을 쏟아부어 계속 비밀번호를 대입해 본다면 언젠가 로그인이 될 것입니다. 따라서 이를 막기 위한 방법이 필요합니다.
대표적으로 로그인 횟수 제한이 있습니다.
여러분의 스마트폰 잠금화면에서 비밀번호를 5번 정도 틀리면 비활성화가 됩니다.
(친구들이 장난으로 잠금화면 비밀번호를 계속 틀리게 입력해서 몇 시간 동안 스마트폰을 못 썼던적이 있네요😢)
현대 암호 기술은 국방, 외교, 전자정부 서비스, 인터넷 뱅킹, ATM 보안, 스마트폰 보안 등 거의 모든 분야에 사용됩니다.
결론은 암호화를 빼놓고 보안을 논할 수가 없습니다. 따라서 기본적인 지식은 가지고 가셔야합니다.
아래 프로그램은 이해를 돕기 위한 간단한 로그인 프로그램입니다.
Python Code - 간단한 로그인 프로그램
# 사용자 정보를 저장할 딕셔너리
user_data = {
'crypto': '1234',
'<ID>': '<Password>',
# <ID>, <Password>에 넣고 싶은 값을 넣어 필요한 만큼 계정을 추가할 수 있습니다.
}
def login(N):
id = input("사용자 이름을 입력하세요: ")
password = input("비밀번호를 입력하세요: ")
# 사용자 정보 확인
if id in user_data and user_data[id] == password:
print(f"환영합니다, {id}님!")
N = 0
else:
N = N -1
print("잘못된 사용자 이름 또는 비밀번호입니다.\n")
print(f"===== 남은 로그인 가능 횟수 {N}번 =====\n")
return N
# 로그인 시도
N = 5 # 로그인 시도가능 총 횟수
while(N):
N = login(N)
실행결과
############################################
# 올바른 사용자 이름과 비밀번호를 입력했을 때 #
############################################
사용자 이름을 입력하세요: crypto
비밀번호를 입력하세요: 1234
환영합니다, crypto님!
###################################################
# 등록되지 않은 사용자 이름과 비밀번호를 입력했을 때 #
###################################################
사용자 이름을 입력하세요: Attack
비밀번호를 입력하세요: ㅗ
잘못된 사용자 이름 또는 비밀번호입니다.
===== 남은 로그인 가능 횟수 4번 =====
▷그래서 무슨말이 하고싶은 건데??
현재 저희가 사용하는 암호는 로그인 시스템과 비슷합니다.
로그인 과정에서 비밀번호의 정보가 중요한 만큼 암호에서 Key라는 정보가 매우 중요합니다.
지금은 금고의 Key(열쇠) 같은 역할을 한다고 기억만 해주세요. 나중에 자세히 설명하겠습니다.
'암호학 강의' 카테고리의 다른 글
[암호학] 스트림 암호(Stream cipher)와 블록 암호(Block cipher) (1) | 2023.10.27 |
---|---|
[암호학] 대칭키 암호와 비대칭키(공개키) 암호 (0) | 2023.10.25 |
[암호학] Kerckhoffs Principle(케르크호프스의 원칙)과 공격자 능력치 (1) | 2023.10.23 |
[암호학] 카이사르 암호와 빈도 분석 (1) | 2023.10.23 |
[암호학] OT (0) | 2023.10.17 |