※이글의 예시들은 Udemy의 Angela Yu의 "The-Complete-Web-Development-Bootcamp" 강의의 내용을 정리한 것입니다.
Hash|
내가 만든 사이트에 사용자들이 가입을 할 것이고, 그들의 비밀번호가 지정된 데이터베이스에 저장될 것이다. 만일 이것이 암호화되지 않은 평문 그대로 저장된다면 보안상 정말 위험할 것이다. 이를 더 안전하게 하기위해 다양한 방법의 암호화 기법이 사용되는데 해시도 이 중의 하나이다.
hash는 단방향 암호화 기법으로 평문을 고정된 길이의 암호화된 문장으로 만들어준다. 그렇다면 단방향 기법이라는 것은 무엇일까?
139*3 = a
위의 식에서 a를 찾는 것은 쉽지만 139를 나누어떨어지게 하는 수 b를 찾는 것은 수를 하나하나 대입해봐야하는 어려운 일이다, 이처럼 해시를 이용해 평문을 암호화하는 것은 아주 간단하지만 이를 다시 평문으로 바꾸는 것은 상당한 시간이 걸리고 어렵다. 이러한 것을 일컬어 단방향 기법이라고 한다.
Hash는 완벽히 안전할까|
해커들이 암호화 된 문장을 풀기 어렵다는 점에서 hash는 상당히 안전하다고 볼 수 있지만 취약점이 존재한다. 해시는 동일한 입력값에 대해 동일한 해시 값을 리턴한다. 해시의 알고리즘은 공개되어있기 때문에 해커들은 hash table이라는 것을 만들어 사람들이 자주 쓰는 암호의 hash 값들을 저장해놓는다. 예를 들어 "123456"이나 "password" 같은 암호들은 상당히 많은 사용자들이 써왔던 암호이고 이는 매우 취약하다.
hash의 보완|
이러한 취약점을 보완하기 위해 우리는 salting이라는 것을 이용할 수 있다. salt는 패스워드마다 생성되는 랜덤값이다. 사용자의 패스워드가 아무리 간단하고 취약하다 한들 혹은 같은 "123456"이어도 salt와 결합된다면 다양한 해시값이 생성된다. salt 값은 hash값과 함께 데이터베이스에 저장된다.
이를 더 안전하게 하기 위해, 우리는 salt round를 거쳐야 한다. 이는 패스워드를 salt값과 해시하고 리턴된 해시값을 다시 salt값과 해시하고, round1,2,... 반복하는 것이다. 라운드를 더 걸치면 걸칠 수록 보안은 더 강화된다.
'강의노트' 카테고리의 다른 글
google OAuth 사용 (0) | 2020.01.18 |
---|---|
OAuth란? (0) | 2020.01.18 |
RESTful API란? (0) | 2020.01.08 |
[mongoDB] mongoDB에서 관계성 정립 (0) | 2020.01.03 |
[mongoDB] mongo db의 CRUD (0) | 2020.01.03 |