본문 바로가기
야미스터디/Backend

[보안] 암호화, 해시함수

by 의정부핵꿀밤 2021. 12. 23.
728x90

해시 함수가 뭔지 궁금해서 찾아보다가 보게 된 영상인데, 내가 찾던 내용은 아니지만 유익한 내용이라 정리해둔다!


Password System

우리는 보통 로그인 기능을 구현할 때 사용자의 아이디와 비밀번호 정보를 데이터베이스에 저장한다

이 때 비밀번호를 저장하는 방법은 굉장히 중요하다!

만약 우리가 구현한 시스템의 사용자 정보가 해킹된다면 사람들은 우리 시스템을 신뢰하지 못할 것이다

따라서 오늘은 신뢰할 수 있는 비밀번호 시스템에 대해 알아보도록 하자!

 


1. Bad System

첫번째로 가장 단순하면서도 나쁜 방법은 사용자의 비밀번호를 고대로 데이터베이스에 저장하는 것이다

그러면 비밀번호가 공개되어서, 데이터베이스에 접근할 수 있는 사람이라면 누구든지 볼 수 있기 때문에 저어어어언혀 관리가 되지 않는다

 

 

2. 비밀번호 암호화

어떤 회사들은 키를 가지고 데이터베이스에 저장되는 비밀번호를 암호화한다

이는 사용자가 로그인을 시도하면, 그 때 키를 이용해서 암호화를 해제하고 입력받은 패스워드와 저장된 패스워드를 비교하는 방식이다

이는 첫번째 방식보다는 괜찮지만, 만약 키를 잃어버리거나 누군가 훔친다면 또다시 누구든지 패스워드를 볼 수 있게 되는 것이다

 

 

3. hash 함수 사용

이번 방법은 hash 함수를 통해 비밀번호를 요상한 값으로 바꿔서 저장하는 것이다

hash 함수

그 전에 먼저 hash 함수에 대해 알아야 할 것이 있다

  1. hash 함수는 동일한 input에 대해 동일한 output을 갖는다. 즉, 입력값이 바뀌지 않으면 출력값도 바뀌지 않는다
  2. input이 약간만 바뀌어도 output을 아예 다른 값이 출력된다
  3. hash 함수는 항상 같은 방향(단방향)으로만 동작한다. 따라서 output을 다시 hash 함수에 넣는다고 input 값이 나오는 건 아니다!

 

아무튼 이 방식은 이러한 hash함수를 이용해서 사용자의 패스워드를 변경하여 저장하고, 로그인 할 때도 변경된 값과 비교한다

하지만 이 방식 또한 단점은 존재한다

바로 Rainbow Table이다

rainbow table

Rainbow Table을 통해 변경된 해시값을 찾아보면 input값을 찾아낼 수 있기 떄문에 이 또한 해킹의 위험성이 존재하는 것이다

 

 

4. hash 함수 + salt

Salt는 아주 작은 랜덤 텍스트로, 사용자가 계정을 만들게 되면 사용자의 패스워드를 salt와 함께 해싱하고 그 결과값을 데이터베이스에 저장하는 것이다

salt

이런 방식을 사용하면 해시 결과값을 아무리 Rainbow table에서 찾아도 없기 때문에 input 값은 알 수 없게 되는 것이다

따라서 salt를 사용하면 해커들과 rainbow table로 부터도 패스워드를 안전하게 보관할 수 있게 된다!

 

 

 


흠 재미삼아 정리한 것 치고 꽤나 유용한 내용이다

사실 전에 salt를 사용한 적이 있는데 그 땐 정확히 뭔지도 모르고 왜 쓰는지도 모르는 상태에서 썼다

이번 기회를 통해 복습하면서 다시 정리할 수 있게 되어서 좋다!

아무튼 얼른 원래 찾던 알고리즘에서의 해시 사용법을 공부하고 코테 공부를 해야겠따ㅠ

 

출처) https://www.youtube.com/watch?v=67UwxR3ts2E 

 

728x90

댓글