웹개발/HTML

비밀번호 암호화 HASH

끈끈 2023. 3. 7. 16:48

 

DB에 저장하는 비밀번호의 암호화
HASH 함수

 

Hash 👉 단방향 암호화 기법으로 복호화가 불가능.


임의의 길이를 갖는 비트열을 입력받아, 정해진 길이의 비트열을 반환하는 함수.

 

(양방향 암호화 기법으로는 Encryption이 있다.

 

Encryption은 복호화가 필요한 데이터나 Https처럼 통신(송수신)에 있어 사용될 수 있다.)

 

SHA-256으로 여러 해시 알고리즘을 통해 암호화 테스트를 해볼 수 있다.

 

https://emn178.github.io/online-tools/sha256.html

 

SHA256 Online

 

emn178.github.io

 

MD5, SHA-1, HAS-180은 사용하면 안 되고, SHA-256, 512가 권장된다. 512가 더 보안이 좋다.

 

Hash의 한계 👉 동일한 메시지는 동일한 다이제스트(digest) 값을 가진다.

 

Hash 함수를 통과하기 전의 원본 데이터를 메세지(message)라 부르고, 통과된 이후 데이터를 다이제스트라 한다.

 

해석된 다이제스트 값을 통해 비밀번호를 찾을 수 있는데 그것을 도와주는 것이 레인보우 테이블.

 

이 테이블은 그동안 해커들이 여러 값들을 대입해보며 얻은 다이제스트들을 모아놓은 모음집이다.

 

https://crackstation.net/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

 

해시된 값은 항상 고정된 길이의 값으로 나타나기 때문에 다른 입력도 같은 해시된 값으로 나타날 수 있다.

 

해커가 DB에서 암호화된 비밀번호들을 확보하고,

 

그에 대한 레인보우 테이블을 갖고 있다면 암호문을 해독할 수 있게 되는 것이다.

 

SALT 👉 해시함수를 돌리기 전에 임의의 문자열을 덧붙여 Hash 함수의 한계점을 보완해준다.

 

ASCII에 포함되지 않는 특이한 문자를 써서 salt를 만들기도 한다.

 

또는 해시함수를 여러번 돌리는 것도 하나의 방법이다.

 


 

hashed_pw=bcrypt.hashpw(pw_receive.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")

 

파이썬에서 인코딩을 하면 자료형을 bytes로 바꿔준다.

 

디코딩은 반대료 bytes를 지정한 형식(UTF-8, ASCII 등)의 str로 바꿔준다.

 

입력받은 비밀번호 값을 인코딩 해주고, 암호화에 필요한 salt도 생성해준다.

 

암호화된 bytes 형식의 비밀번호는 str로 DB에 저장되므로 앞에 쓸데없는 b'가 붙기 때문에,

 

암호화된 비밀번호를 UTF-8로 디코딩해 준 다음 저장한다.

 

'웹개발 > HTML' 카테고리의 다른 글

HTML 이미지에 링크 걸기  (0) 2023.03.07
window location / button onclick  (0) 2023.03.06
html _ 클래스(class)와 아이디(id)의 차이  (0) 2023.03.05