사용자 패스워드를 전송하고 보관하는 방법을 무엇인가?
유저의 패스워드를 받은 클라이언트는 평문으로 서버로 전송합니다.
평문(암호화 되기 전 메시지) 을 받은 서버는 패스워드를 단방향 해시 함수로 암호화하여 보관합니다.
단방향 해시함수는 수학적 연산에 의해 원본 데이터를 완전히 다른 암호화된 데이터(다이제스트)로 변환하는 것을 말합니다.
원본 데이터로는 다이제스트를 구할 수 있지만 다이제스트로는 원본데이터를 구할 수 없어야 합니다.
이것을 단방향이라 합니다. 단방향 해시함수는 브루트포스 공격으로 쉽게 당할 수 있기 때문에 이를 보완하기 위해 입력된 다이제스트를 N번 반복해서 생성하는 것인 key stretching과 원문 패스워드에 임의의 문자열을 추가하여 해싱하는 것인 salting을 이용해 보안의 강도를 높힐 수 있습니다.
여기서 단방향 해시 함수와 다른 것들에 대해 조금 더 자세히 알아보겠습니다.
- 단방향 해시 함수
: 해시 함수는 입력값을 문자와 숫자를 임의로 나열한 일정한 길이의 다이제스트 형태로 변환시켜준다. 여기서 다이제스트란, 해시함수를 통해 생성된 암호화된 메시지이다. 해시 함수는 단뱡향이므로 암호화는 가능하지만 복호화는 불가능하여 원본을 알 수 없기 때문에 이와 같은 이유로 패스워드를 바로 데이터베이스에 저장하지 않고 단방향 암호화된 다이제스트를 저장하는 것이 보편화 되었다.
- 다이제스트
: 해시함수를 통해 생성된 암호화된 메시지
- 평문, 암호화, 복호화
- 평문 : 암호화 하기 전 메시지
- 암호화 : 평문을 암호문으로 변환하는 과정
- 복호화 : 암호문을 다시 평문으로 변환하는 과정
'🌼 TIL' 카테고리의 다른 글
Masonry 레이아웃 구현하기 ( + react-responsive-masonry 라이브러리 ) (0) | 2023.09.02 |
---|---|
Next.js에서 ReactQuery를 이용한 데이터 관리 및 CRUD 기능 구현 (0) | 2023.09.02 |
🍈 [TIL] Semantic HTML? / Redux? (0) | 2023.04.06 |
🍈 [TIL] useRef ? / Cookie의 MaxAge, Expires (0) | 2023.04.04 |
🍈 [TIL] require,import? / const (0) | 2023.04.03 |