개발계발

[1]해시함수를 활용한 비밀번호 암호화

냥냥친구 2019. 3. 23. 19:35

사용자의 비밀번호를 그대로 DB에 저장하는 행위는 매우 위험합니다.

비밀번호가 해킹당할 상황이 생기면 그대로 개인정보에 위협이 되기때문입니다.

뿐만아니라 실서비스에서 이같이 저장하면 불법입니다.

그러므로 비밀번호를 db에 저장할 때는 암호화하여 보안을 유지해야 합니다.


mysql에서 AES_ENCRYPT라는 비밀번호 인코딩 함수를 제공하고 있습니다.

하지만 이 함수는 디코딩이 가능한 양방향 인코딩으로, 이 역시 실서비스에 적용시 불법입니다. (혼자 공부용은 무관해요^_^)

인코딩된 비밀번호가 유출되더라도 디코딩하지 못하도록 단방향 인코딩을 사용해야 합니다.

비밀번호 암호화에 쓰이는 단방향 해시 함수로는 SHA-1, SHA-256,Bcrypt 등이 있습니다.


SHA-1보다 SHA-256이 보안적으로 더 좋고, SHA-256보다 bcrypt가 더 좋다고 합니다.

sha1 인코딩 사이트에서 테스트 해보니
test1을 암호화하면
B444AC06613FC8D63795BE9AD0BEAF55011936AC 이란 해시값을 뱉어냈습니다.

그러나 sha1 디코딩 사이트, bcrypt 디코딩 사이트도 찾아볼 수 있습니다.
오잉? 단방향이라면서 디코딩 사이트라니 앞뒤가 안 맞네요
확인해보면 디코딩한 것이 아니라 문자들의 인코딩 값을 갖고 있다가 같은 값을 찾으면 문자열을 출력하는 방식입니다.
그래서 해보면 단순한 문자열은 디코딩하지만 특수문자가 들어간 디코딩 값은 찾지 못합니다.
이런 이유로 비밀번호에 특수문자를 넣으라는거 였군요...! 신기방기

추가적으로 비밀번호 보안을 강화하기 위에 해시값 뿐만 아니라 솔팅과 키스트레칭 기법을 사용하기도 합니다.
솔팅(salting)은 디비에 사용자의 비밀번호 + 무작위 문자열(솔트)을 넣어서 진짜 비밀번호가 무엇인지 파악하기 어렵도록 하는 기법이고
키스트레칭은 인코딩된 비밀번호를 여러번 다시 인코딩해서, 다시 말해 인코딩 인코딩... 겹겹히 쌓아서 비밀번호를 파악하기 어렵도록 하는 기법입니다.

비밀번호 암호화에 대해 더 알고싶으면 네이버 안전한 패스워드 저장 추천드려요~!







'개발계발' 카테고리의 다른 글

[2]ssh를 사용하여 서버 접속하기  (0) 2019.04.01