귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 비밀번호 저장 == 개발자와 서비스 운영자에게 가장 중요한 원칙은 다음과 같다. '''비밀번호를 평문으로 저장하지 말 것.''' 비밀번호는 암호화해서 복호화할 수 있게 저장하는 것도 적절하지 않다. 일반적으로 비밀번호는 복호화가 아니라 검증만 가능하면 된다. 따라서 비밀번호는 느린 단방향 해싱 알고리즘으로 처리해야 한다. OWASP는 비밀번호를 평문으로 저장하지 말고 Argon2id, bcrypt, PBKDF2 같은 강한 느린 해싱 알고리즘으로 보호해야 하며, 각 비밀번호에는 고유한 솔트를 추가해야 한다고 권고한다.<ref name="owasp-storage" /> === 해시와 암호화의 차이 === 해시와 암호화는 다르다. {| class="wikitable" ! 구분 !! 해시 !! 암호화 |- | 목적 || 원본을 되돌리지 않고 검증 || 원본을 숨겼다가 필요 시 복원 |- | 복호화 가능성 || 일반적으로 불가능해야 함 || 키가 있으면 가능 |- | 비밀번호 저장에 적합한가 || 적합함 || 일반적으로 부적합 |- | 예시 || Argon2id, bcrypt, PBKDF2 || AES, ChaCha20 등 |} 비밀번호 저장에는 복호화 가능한 암호화보다 단방향 해싱이 적합하다. 서비스는 사용자의 비밀번호를 다시 보여 줄 필요가 없기 때문이다. 사용자가 비밀번호를 잊으면 "찾기"가 아니라 "재설정"을 해야 한다. === 솔트 === '''솔트'''({{llang|en|salt}})는 각 비밀번호마다 추가되는 무작위 값이다. 솔트의 목적은 같은 비밀번호라도 서로 다른 해시 결과가 나오게 하는 것이다. 예를 들어 두 사용자가 같은 비밀번호를 사용하더라도 솔트가 다르면 저장된 해시는 달라진다. 이는 레인보우 테이블 같은 사전 계산 공격을 어렵게 만든다. 솔트는 비밀일 필요는 없지만, 계정마다 고유하고 충분히 무작위여야 한다. 같은 솔트를 모든 사용자에게 쓰는 것은 좋지 않다. === 페퍼 === '''페퍼'''({{llang|en|pepper}})는 솔트와 달리 서버 쪽에서 별도로 보관하는 비밀값이다. 데이터베이스만 유출된 경우 공격을 더 어렵게 만들기 위해 사용될 수 있다. 다만 페퍼는 운영 복잡성을 높인다. 키 관리, 회전, 백업, 장애 대응을 제대로 설계하지 않으면 오히려 문제가 생길 수 있다. 페퍼는 비밀번호 해싱을 대체하는 것이 아니라 보조 방어 수단으로 보아야 한다. === 느린 해싱 알고리즘 === 비밀번호 저장에는 빠른 해시 함수가 아니라 느린 해싱 알고리즘이 필요하다. SHA-256, SHA-512 같은 일반 해시 함수는 빠르기 때문에 파일 무결성 확인에는 좋지만, 비밀번호 저장에는 적합하지 않다. 공격자도 빠르게 대량 추측을 할 수 있기 때문이다. 대표적인 비밀번호 해싱 알고리즘은 다음과 같다. {| class="wikitable" ! 알고리즘 !! 특징 !! 비고 |- | Argon2id || 메모리 사용량과 시간 비용을 조절할 수 있는 현대적 알고리즘 || 신규 시스템에서 우선 검토할 만함 |- | bcrypt || 오랫동안 검증된 알고리즘 || 널리 지원되지만 입력 길이 제한 등에 주의 필요 |- | PBKDF2 || 오래된 표준 기반 알고리즘 || 규제 환경에서 쓰이기도 하나 충분한 반복 횟수 필요 |- | scrypt || 메모리 비용을 요구하는 알고리즘 || 일부 시스템에서 사용 |} 중요한 것은 알고리즘 이름만이 아니다. 비용 인자, 메모리 사용량, 반복 횟수, 라이브러리 구현, 마이그레이션 정책이 함께 중요하다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)