본문 바로가기

🌼 TIL

🍈 [TIL] 패스워드 전송 및 보관 방법

사용자 패스워드를 전송하고 보관하는 방법을 무엇인가?

유저의 패스워드를 받은 클라이언트는 평문으로 서버로 전송합니다.

평문(암호화 되기 전 메시지) 을 받은 서버는 패스워드를 단방향 해시 함수로 암호화하여 보관합니다.

단방향 해시함수는 수학적 연산에 의해 원본 데이터를 완전히 다른 암호화된 데이터(다이제스트)로 변환하는 것을 말합니다.

원본 데이터로는 다이제스트를 구할 수 있지만 다이제스트로는 원본데이터를 구할 수 없어야 합니다.

이것을 단방향이라 합니다. 단방향 해시함수는 브루트포스 공격으로 쉽게 당할 수 있기 때문에 이를 보완하기 위해 입력된 다이제스트를 N번 반복해서 생성하는 것인 key stretching과 원문 패스워드에 임의의 문자열을 추가하여 해싱하는 것인 salting을 이용해 보안의 강도를 높힐 수 있습니다.

 

여기서 단방향 해시 함수와 다른 것들에 대해 조금 더 자세히 알아보겠습니다.

 

- 단방향 해시 함수

: 해시 함수는 입력값을 문자와 숫자를 임의로 나열한 일정한 길이의 다이제스트 형태로 변환시켜준다. 여기서 다이제스트란, 해시함수를 통해 생성된 암호화된 메시지이다. 해시 함수는 단뱡향이므로 암호화는 가능하지만 복호화는 불가능하여 원본을 알 수 없기 때문에 이와 같은 이유로 패스워드를 바로 데이터베이스에 저장하지 않고 단방향 암호화된 다이제스트를 저장하는 것이 보편화 되었다.

 

- 다이제스트

: 해시함수를 통해 생성된 암호화된 메시지

 

- 평문, 암호화, 복호화 

 - 평문 : 암호화 하기 전 메시지 

 - 암호화 : 평문을 암호문으로 변환하는 과정

 - 복호화 : 암호문을 다시 평문으로 변환하는 과정