상세 컨텐츠

본문 제목

해시(hash) 솔트(salt) 암호화 기법

php

by 2hansoul 2021. 9. 6. 19:56

본문

반응형

해시(Hash)는 어떻게 암호화?

예시로 설명하면 평문의 비밀번호 "hansol1234"를 해시함수(해시 알고리즘)를 이용하여 고정된 길이의 암호화된 문자열로 바꿔 버리는 것이 해시를 이용한 암호화 기법이다.

hash에서 알아야 할 것들

- 해시 알고리즘 및 밑에서 얘기할 암호화 알고리즘은 종류가 다양하며, 알고리즘은 모두에게(해커에게도) 공개되어있다. 

(대신 알고리즘에 취약점이 발견되어 취약점에 의해 보안이 뚫리면 알고리즘을 만든 사람(암호학자)이 형사 처벌(?)된다. 따라서 알고리즘을 만들 때 엄청나게 많은 검증을 거치게 되고, 많은 개발자들이 검증된 것들을 사용한다.)

- 해시 알고리즘마다 Hash 길이가 다르고 이미 보안이 뚫린 해시 함수가 존재한다.

(MD5, SHA-1, HAS-180은 사용하면 안된다. SHA-256, SHA-512등을 사용하기를 권고함. 참고로 SHA-512가 보안이 더 좋음.)

- 해시 알고리즘은 특정 입력 대해 항상 같은 해시 값을 리턴한다.

(이 점을 이용해서 '인증'이 가능하다. 어떤 입력인지 몰라도 해시함수를 이용해서 해시된 값이 일치하면 입력이 같다는 것이 입증된다.)

- 해시된 값은 입력이 다른 값이지만 같을 수 있다.

입력은 만들어낼 수 있는 평문이 길이제한이 없다면 무한정으로 만들어 낼 수 있지만 해시된 값은 항상 고정된 길이의 값으로 나타내므로 한계가 있기 때문에 다른 입력이지만 해시된 값이 같은 경우가 나타날 수 있음.

(중복이 적게 나타날 수록 좋은 해시함수)

 

솔트(salt)는 어떻게 암호화?

암호학에서 솔트(salt)는 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터이다. 솔트는 스토리지에서 비밀번호를 보호하기 위해 사용된다. 역사적으로 비밀번호는 시스템에 평문으로 저장되지만 시간이 지남에 따라 추가적인 보호 방법이 개발되어 시스템으로부터 사용자의 비밀번호 읽기를 보호한다. 솔트는 이러한 방식의 하나이다.

솔트는 레인보 테이블과 같은 미리 계산된 테이블을 사용하는 공격을 방어한다

 

솔트(salt) 사용 예시

비밀번호 저장을 위한 솔트 값의 불완전한 예시이다. 최초 테이블은 2개의 사용자 이름과 비밀번호 조합을 갖는다. 비밀번호는 저장되지 않는다.

사용자 이름비밀번호

user1 password123
user2 password123

솔트값은 랜덤으로 생성되며 길이는 어느 것이든 될 수 있다. 이 경우 솔트값은 8바이트 길이이다. 솔트값은 평문 암호에 추가되며 여기서 결과는 해시 처리되는데 이를 해시된 값으로 부른다. 솔트값과 해시된 값 모두 저장된다.

사용자 이름솔트값해시될 문자열해시된 값 = SHA256 (비밀번호 + 솔트값)

user1 E1F53135E559C253 password123E1F53135E559C253 72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8
user2 84B03D034B409D4E password12384B03D034B409D4E B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A

위 표에서 각기 다른 솔트값들은 완전히 다른 해시 처리된 값을 만들어내며 이는 평문 비밀번호가 완전히 동일하더라도 마찬가지이다.

 



반응형

'php' 카테고리의 다른 글

[PHP] 5.2 버전 이하 암호하  (0) 2021.09.08
[PHP] 암호화  (0) 2021.09.07
[PHP] location.href vs location.replace  (0) 2021.08.25
GET/POST 차이  (0) 2021.08.24
Modern php 란 ?  (0) 2021.08.06

관련글 더보기

댓글 영역