해시 함수가 뭔지 궁금해서 찾아보다가 보게 된 영상인데, 내가 찾던 내용은 아니지만 유익한 내용이라 정리해둔다!
Password System
우리는 보통 로그인 기능을 구현할 때 사용자의 아이디와 비밀번호 정보를 데이터베이스에 저장한다
이 때 비밀번호를 저장하는 방법은 굉장히 중요하다!
만약 우리가 구현한 시스템의 사용자 정보가 해킹된다면 사람들은 우리 시스템을 신뢰하지 못할 것이다
따라서 오늘은 신뢰할 수 있는 비밀번호 시스템에 대해 알아보도록 하자!
1. Bad System
첫번째로 가장 단순하면서도 나쁜 방법은 사용자의 비밀번호를 고대로 데이터베이스에 저장하는 것이다
그러면 비밀번호가 공개되어서, 데이터베이스에 접근할 수 있는 사람이라면 누구든지 볼 수 있기 때문에 저어어어언혀 관리가 되지 않는다
2. 비밀번호 암호화
어떤 회사들은 키를 가지고 데이터베이스에 저장되는 비밀번호를 암호화한다
이는 사용자가 로그인을 시도하면, 그 때 키를 이용해서 암호화를 해제하고 입력받은 패스워드와 저장된 패스워드를 비교하는 방식이다
이는 첫번째 방식보다는 괜찮지만, 만약 키를 잃어버리거나 누군가 훔친다면 또다시 누구든지 패스워드를 볼 수 있게 되는 것이다
3. hash 함수 사용
이번 방법은 hash 함수를 통해 비밀번호를 요상한 값으로 바꿔서 저장하는 것이다
그 전에 먼저 hash 함수에 대해 알아야 할 것이 있다
- hash 함수는 동일한 input에 대해 동일한 output을 갖는다. 즉, 입력값이 바뀌지 않으면 출력값도 바뀌지 않는다
- input이 약간만 바뀌어도 output을 아예 다른 값이 출력된다
- hash 함수는 항상 같은 방향(단방향)으로만 동작한다. 따라서 output을 다시 hash 함수에 넣는다고 input 값이 나오는 건 아니다!
아무튼 이 방식은 이러한 hash함수를 이용해서 사용자의 패스워드를 변경하여 저장하고, 로그인 할 때도 변경된 값과 비교한다
하지만 이 방식 또한 단점은 존재한다
바로 Rainbow Table이다
Rainbow Table을 통해 변경된 해시값을 찾아보면 input값을 찾아낼 수 있기 떄문에 이 또한 해킹의 위험성이 존재하는 것이다
4. hash 함수 + salt
Salt는 아주 작은 랜덤 텍스트로, 사용자가 계정을 만들게 되면 사용자의 패스워드를 salt와 함께 해싱하고 그 결과값을 데이터베이스에 저장하는 것이다
이런 방식을 사용하면 해시 결과값을 아무리 Rainbow table에서 찾아도 없기 때문에 input 값은 알 수 없게 되는 것이다
따라서 salt를 사용하면 해커들과 rainbow table로 부터도 패스워드를 안전하게 보관할 수 있게 된다!
흠 재미삼아 정리한 것 치고 꽤나 유용한 내용이다
사실 전에 salt를 사용한 적이 있는데 그 땐 정확히 뭔지도 모르고 왜 쓰는지도 모르는 상태에서 썼다
이번 기회를 통해 복습하면서 다시 정리할 수 있게 되어서 좋다!
아무튼 얼른 원래 찾던 알고리즘에서의 해시 사용법을 공부하고 코테 공부를 해야겠따ㅠ
출처) https://www.youtube.com/watch?v=67UwxR3ts2E
'야미스터디 > Backend' 카테고리의 다른 글
[Etc] Java와 C언어의 차이 📌 (1) | 2022.09.18 |
---|---|
[Etc] 좋은 개발자란 무엇일까요? 📌 ~ing (0) | 2022.08.28 |
비전공자를 위한 이해할 수 있는 IT 지식 (0) | 2021.09.10 |
OOP (객체지향 프로그래밍) (0) | 2021.09.09 |
얄팍한 코딩사전 - 기본 개발 용어 알아보기 (0) | 2021.07.31 |
댓글