728x90
반응형
목차
1. 암호화 용어 정리
2. SHA 256 이란
3. 단방향 해시 함수 한계
4. 단방향 해시 함수 보완
- Key Stretching (키 스트레칭)
- Salt (솔트)
5. 파이썬 예제
- 기본
- Key Stretching
- Key Stetching + Salt
1. 암호화 용어 정리
- 평문 : 암호화 전 메시지로, 해독 가능한 형태의 메시지(일반 문자 등)
- 암호문 : 암호화 후 메세지로, 해독 불가능한 형태의 메시지(암호화 문자)
- 암호화 : 평문을 암호화문으로 변환하는 과정
- 복호화 : 암호화문을 평문으로 변환하는 과정
- 단방향 암호화 : 평문을 암호화 가능, 복호화 불가능. 진위여부는 확인하고 싶으나, privacy를 지키고 싶은 경우 사용
- 해시 함수 : 해시는 임의의 크기를 가진 데이터를 고정된 데이터의 크기로 변환시키는 함수
- 해시 : 다양한 길이를 가진 데이터를 고정된 길이 데이터로 매핑(mapping)한 값, Key-value 로 이루어진 자료 구조
2. SHA256 이란?
- SHA256은 SHA-2가 생성하는 암호화 문장을 256bit로 표현하는 것을 의미 (224,256,384,512도 있음)
- 현재 가장 많은 분야에서 채택하여 사용되고 있는 암호 방식
- 출력 속도가 빠르다는 장점을 갖고 있으며, 단방향성 성질을 띄고 있는 암호화 방법
- 인증서, 블록체인 등 많이 사용되고 있음.
3. 단방향 해시 함수 한계
- 동일한 메세지는 동일한 암호문장을 갖는다. 즉, 반복 시도하면 해킹 가능
4. 단방향 해시 함수 보완
Key Stretching (키 스트레칭)
- 암호화를 N번 반복 수행하는 것이다.
- 반복 횟수는 개발자 본인만 알고 있으며, 해킹하려면 여러 번의 시도가 필요함. 즉, 시간 지연이 가능함
예)
1번 수행
- 입력 : 123456
- 암호화 결과 : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
2번 수행
- 입력 : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
- 암호화 결과 : 49dc52e6bf2abe5ef6e2bb5b0f1ee2d765b922ae6cc8b95d39dc06c21c848f8c
Salt (솔트)
- 그럼에도 불구하고, 몇 번 돌리면 비밀번호를 들킬 것 같다.
- 문자 그대로, 약간의 소금을 치듯이 사용자에게 개별 임의의 문자를 덧붙여 암호화 수행
예)
- 입력 : 123456 + abcd (salt)
- 암호화 결과 : 7eb6640227367c8ff142d877496ca3ec5e1c2fc218198fa937054dd69dc6046b
5. 파이썬 예제
- 기본
import hashlib
print("====================================================================")
put = input("패스워드 입력 : ")
passwd = ''
result = hashlib.sha256(put.encode())
passwd += result.hexdigest()
result = hashlib.sha256(passwd.encode())
print("Start Passwd : ", put)
print("==================================================================")
result = hashlib.sha256(passwd.encode())
print("SHA256 : ",result.hexdigest())
passwd=''
passwd += result.hexdigest()
- Key Stretching (키 스트레칭)
import hashlib
print("====================================================================")
put = input("패스워드 입력 : ")
passwd = ''
result = hashlib.sha256(put.encode())
passwd += result.hexdigest()
result = hashlib.sha256(passwd.encode())
print("Start Passwd : ", put)
print("==================================================================")
num = int(input("반복 횟수 : "))
for i in range(1,num+1):
result = hashlib.sha256(passwd.encode())
print("\npasswd(%d) : " %i, passwd)
print("SHA256 : ",result.hexdigest())
passwd=''
passwd += result.hexdigest()
- Key Strectching + Salt (솔트)
import hashlib
print("====================================================================")
put = input("패스워드 입력 : ")
salt = input("솔트 문자 입력 : ")
put+= salt
passwd = ''
result = hashlib.sha256(put.encode())
passwd += result.hexdigest()
result = hashlib.sha256(passwd.encode())
print("Start Passwd : ", put)
print("==================================================================")
num = int(input("반복 횟수 : "))
for i in range(1,num+1):
result = hashlib.sha256(passwd.encode())
print("\npasswd(%d) : " %i, passwd)
print("SHA256 : ",result.hexdigest())
passwd=''
passwd += result.hexdigest()
728x90
반응형
'IT > 이것저것' 카테고리의 다른 글
저작권 종류 - CC, CCL, CC BY 란? (0) | 2023.01.10 |
---|---|
TensorRT 설치하기 - Windows (+ nvinfer.dll 오류 해결 방법 포함) (0) | 2022.12.29 |
[Windows 10] ffmpeg 설치하기 - 매우 간단! (0) | 2022.12.12 |
댓글