본문 바로가기
[챌린지]/[패스트캠퍼스] 파이썬 초격차

패스트캠퍼스 환급챌린지 37일차 미션 (3월 8일) : 파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 수강 후기

by 쿠키토끼 2024. 3. 8.

01. 제목

패스트캠퍼스 환급챌린지 37일차 미션 (3월 8일) : 
파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 Online 수강 후기
 

02. 포스팅 본문 (학습 일기) 가이드

 
1. 학습 인증샷 2장 이상 포함

카메라로 직접 촬영한 수강 인증 사진 (캡쳐X)

 

2. 학습 후기 700자 이상 (공백 제외)

오늘은 비밀번호 암호화하는 hashlib 모듈과 메세지 변조 확인하는 hmac 모듈에 대해서 배웠다.

hashlib 모듈은 문자열을 해싱(hashing)할 때 사용하는 모듈이다. 해싱이란 원본 문자열을 알아볼 수 없는 난해한 문자열로 정의하는 방법으로, 해시값을 조사하여 데이터 변조 여부를 확인하는 것이 주된 목적이다.

해시 함수는 단방향으로 원본 데이터를 완전히 다른 암호화된 데이터(Digest)로 변환하고 이 변환된 데이터는 다시 원본으로 복호화가 불가능하다. 이렇기 때문에 안전하게 관리되어야 하는 정보를 암호화 할 때 주로 사용된다. 자바스크립트에서도 hashing이 사용되고 있던데 그래서 알 수 없는 문자숫자가 나열되는 부분으로 암호화해서 유료로 제공될 웹페이지의 url이나 image 등을 표시했구나 싶었다. 원본의 패스워드 값이 정확하게 hash 걸쳐야 전혀 알아볼 수 없는 다이제스트가 변환된 값이 나오고 단방향으로 hash함수를 다시 태워서 원본으로 복구될 수 없다. 마찬가지로 원본 패스워드가 다르게 적히면 hash도 변환되기 때문에 암호를 알아낼 수 없는 것이다. 

예제를 통해 보자면,

지난 시간에 썼던 getpass 모듈도 그대로 이용한다.

import hashlib

import getpass

원본 비밀번호를 설정해주고 pw = 'fastcamp02-501-9396!' 

비밀번호를 해싱한다.

h = hashlib.sha256()  # 여기서 sha256은 해싱 암호화 알고리즘이다. 대표적으로 사용되는 경우라 넣어준다.

h.update(pw.encode('utf-8')  # 비밀번호를 utf8 인코딩해주고 문자열을 바이트 형태로 바꿔주고 업데이트해서 해싱한다.

해싱된 비밀번호는

h_pw = h.digest()

print(h_pw) 로 출력하게 되면 알아볼 수 없는 바이트 형식으로 비밀번호 변경이된다.

해싱을 사용하지 않는 경우에는

지난 시간의 로직을 샘플로 들고와 보면

user_input = getpass.getpass("비밀번호를 입력해주세요 >>> ")

while user_input != pw:

      # 비밀번호 불일치 메세지

      user_input = getpass.getpass ("잘못된 비밀번호 입니다! 다시 입력해주세요 >>> ")

      print('방금 입력하신 비밀번호는... : {}'.format(user_input))

print('잠금이 해제되었습니다!')

이런식으로 로직하게 되면 문제는 방금 입력하신 비밀번호가 암호화 되지 않고 노출된다.

이렇게 노출을 막기위해 해싱을 사용한다면 비밀번호 해싱 함수를 만들어줘야한다.

def pw_hash(original_pw):

     h = hashlib.sha256()

     h.update(original_pw.encode('utf-8'))

     hashed_pw = h.digest()

     return hashed_pw # 해싱된 값을 리턴

그 다음 로직을 다시 짜보면

user_input = pw_hash(getpass.getpass("비밀번호를 입력해주세요 >>> "))  # 해싱된 값을 저장

while user_input != pw:

      # 비밀번호 불일치 메세지

      user_input = pw_hash(getpass.getpass ("잘못된 비밀번호 입니다! 다시 입력해주세요 >>> "))

      print('방금 입력하신 비밀번호는... : {}'.format(user_input))

print('잠금이 해제되었습니다!')

이런식으로 유저의 인풋값을 가져온다해도 바이트 형태로 비밀번호가 해싱되어 비밀번호를 알 수 없다.

 

다음은 hmac은 비밀 키와 해싱 기술을 사용하여 송수신자 간 메세지 변조를 확인할 수 있도록 하는 모듈을 배웠다. 사실상 이번 프로젝트는 메세지 변조 탐지기를 만들기 때문에 hmac이 핵심 모듈이다. 송,수신자 간 익숙한 비밀키(비밀번호 등)를 사용하여 해싱된 데이터 내용이 같은지 대조하는 원리로 만약에 해커 등 제3자가 메세지를 변조했을 경우, 비밀키로 해싱한 결과가 달라지게 된다.

샘플로 비밀키를 설정해본다.

SECRET_KEY = 'FASTCAMPUS'

중요한 메세지를 송신한다고 가정한다면 

import hmac

import hashlib

송신 메세지를 해싱(암호화)해서 파일을 생성, 입력한다.

important_message = '전정국 보고싶다 제대하면 덕질 열심히 하자!'

이렇게 메세지를 담고 원본 파일은

with open('message.txt', 'w') as f:   # 메세지 텍스트 파일에 메세지를 넣고

      f.write(important_message)

이것을 비밀키 암호화 파일로 만들려면

with open('message_encrypted.txt', 'w') as f: 

       # 첫번째 인자는 비밀키를 인코딩한게 들어가고 두 번째 인자로는 암호할 메세지 인코딩한게 들어가고 세번째는 암호화를 실제로 적용할 알고리즘이 들어간다. 이때 sha256 알고리즘이 들어가게 된다.

       m = hmac.new(SECRET_KEY.encode('utf-8'), important_message.encode('utf-8'), hashlib.sha256)

       f.write(m.hexdigest()) # 암호화된 메세지가 파일로 작성

이렇게 암호화된 파일이 만들어진다.

이제 수신된 메세지는 복호화 및 변조 확인을 하게 된다.

with open('message_encrypted.txt') as f: 

       message_encrypted = f.read()  # 일단 암호화 된 메세지는 대조할 목적으로 읽기만 해준다.

with open('message.txt') as f:  

       message = f.read()  # 원본 메세지도 읽은 다음에

       # 비밀키로 다시 인코딩하고 sha256 으로 인코딩하고 m 변수에 저장하고

       m = hmac.new(SECRET_KEY.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)

       # 다이제스트 값을 봤을 때 암호화된 메세지가 같다면

       if m.hexdigest() == message_encrypted:

            print("메시지가 변조되지 않았습니다! 안전합니다.")

      # 원본 메세지를 변경했다면 값이 달라지므로

       else:

            print("변조된 메세지 입니다! 위험합니다.")

출력하게 된다. 이런식으로 메세지가 송수신 과정에서 변조된 부분인지 아닌지 알 수 있다.

(사담이지만 암호화 파트가 나온김에 얘기하자면 한 달 전쯤에 인스타그램을 해킹당했었는데, 인스타그램은 메타기업 소유로 페이스북과 연동까지 되어서 1타2피로 페북까지 털리게 되었는데 해킹된 경로를 보니 이메일로 내 비밀번호를 리셋하고 자기 맘대로 비번과 이메일 전화번호까지 싹다 바꿨었다. 보니까 베트남으로 떴었고 휴대폰에 저장된 자동로그인 정보를 어떻게 해서 메일을 복구하고 비밀번호도 다시 완전히 바꾸고 연락처도 다시 업데이트하고 2중 보안으로 바꾸었는데 해당 이슈와 관련해서 찾아보니 이메일에 내 비밀번호를 바꿨던 부분에서 아마 이메일 계정의 비밀번호를 털렸거나 POP3/SMTP 방식 허용으로 털릴 수 있다고 한다. 구글 계정으로 비밀번호 취약점을 조사해보니 중국이나 보안이 의심되는 사이트에서 이메일과 비밀번호가 같게 한 것이 사실 가장 의심스럽다. 어디 사이트에서 이메일 로그인 방식을 취하고 있다면 반드시 해당 이메일과는 다른 비밀번호를 써야할것이다. 자동저장도 문제라고 한다. 공공장소에서 자동저장해서 쓰는 사람들의 비밀번호를 쉽게 알 수 있는 경우도 상당하다. 결론은 암호화를 열심히 한다고 해도 사용자가 잘 관리하는 것이 더 중요할 것이다!)

 

 

03. 필수 본문 내용 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
 

04. 필수 해시태그 

#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완

05. 필수 URL 

https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

[수강 강의 클립] 

-Ch06. [암호화] 개인정보는 소중해, 메세지 변조 탐지기 만들기

04. 비밀번호 암호화 - hashlib

05. 메세지 변조 확인 - hmac

 

[※ 기타사항메모 ※]
{100% 환급챌린지 미션 가이드 참조 : 

https://fastcampus.co.kr/event_online_challenge_2401_mission}

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr