패스워드를 안전하게 관리 하는데는 무엇이 필요할까? 사용자의 패스워드를 처리 없이 저장하는 것은 안전한 방법이 아니며 개인정보의 암호화는 법률로 정해 놓고 있다.
수학적 연산에 의해 원본 데이터를 완전히 다른 암호화된 데이터(다이제스트)로 변환하는 것을 말한다. 원본 데이터로는 다이제스트를 구할 수 있지만 다이제스트로는 원본데이터를 구할 수 없어야 한다. 이것을 단방향이라 한다.
1234를 SHA-256으로 변환 시키면 아래와 같은 값을 얻을 수 있다.
03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4
패스워드를 해시한 값과 저장되어 있는 값을 비교하여 일치 여부를 확인한다.
SHA-256를 완전히 해독하려면 경우의 수는 으로 너무나 방대하다. 해커들은 여러 값들을 대입해보면서 얻었던 다이제스트들을 모아놓고 그 리스트에서 원본 메세지를 찾아본다. 이러한 다이제스트들의 목록을 레인보우 테이블(Rainbow Table)이라 한다. 이와 같은 공격 방식을 레인보우 공격(rainbow attack)이라 한다.
해시 함수는 암호학에서 널리 사용되지만 원래 패스워드를 저장하기 위해서 설계된 것이 아니라 짧은 시간에 데이터를 검색하기 위해 설계된 것이다. 해커들은 임의의 문자열의 다이제스트와 해킹할 문자열의 다이제스트를 1초에 56억개의 비교할 수 있다.
키스트레칭은 입력된 다이제스트를 N번 반복해서 생성하는 것. 일반적인 장비로 1초에 50억 개 이상의 다이제스트를 비교할 수 있지만, 키 스트레칭을 적용하여 동일한 장비에서 1초에 5번 정도만 비교할 수 있게 한다.
원문 패스워드에 임의의 문자열을 추가하여 해싱하는 것. 같은 패스워드임에도 다른 다이제스트가 나온다.
키 스트레칭과 솔팅을 반복해서 이용하여 보안의 강도를 선택할 수 있다.
주요한 키 유도 함수로는 PBKDF2, bcrypt, scrypt, Argon2가 있다.
참고사이트
https://d2.naver.com/helloworld/318732
https://st-lab.tistory.com/100