그렇다면 인증은 왜 필요할까요 ?
그럼 가장 중요한 비밀번호는 어떻게 관리해야 할까요 ?
데이터 베이스에 저장할 때 개인정보를 난독화(해싱)하여 복원할 수 없도록 해야합니다.
즉, 개발자도 비밀번호를 알 수 없어서 비밀번호를 잃어버려도 다시 알려주는 게 아니라 새로운 비밀번호로 재설정 해야합니다.
통신 시 개인 정보를 주고 받을 때 SSL을 적용하여 암호화합니다.(HTTPS)
단방향 해쉬..?
본래 해쉬(hash)함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해서 쓰이지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용합니다.
- MD5, SHA-1 - 보안취약, SHA-256등이 있습니다.
"1234" 를 SHA-256 해싱하면 다음과 같습니다.
03ac674215f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
- 결과만 봐서는 당장 식별이 불가능해보이고 완벽해보인다.
- 하지만 같은 알고리즘으로 "1234"를 다시 해싱하면 같은 결과 도출
- 해쉬는 자료구조의 한 종류이고, 데이터를 빨리 찾는 자료구조의 형태입니다.
인풋이 하나 있다면 아웃풋이 하나 있는 모양입니다.
그렇기에 단방향 해쉬의 허점을 보완하고자 salting과 Key Stretching 이라는 아이디어가 생겨났습니다. 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐 해싱하여 이 해시값을 저장하는 방법