하나: 기본: 소금을 사용한 해싱
우리는 악의적인 공격자가 조회 테이블과 레인보우 테이블을 사용하여 얼마나 빨리 일반 해시 암호화를 해독할 수 있는지 이미 알고 있습니다. 우리는 또한 무작위로 솔트된 해시를 사용하면 이 문제를 해결할 수 있다는 것을
배웠습니다. 그런데 우리는 어떤 종류의 소금을 사용하며 이를 비밀번호에 어떻게
섞어 사용할까요?
솔트 값은 CSPRNG(암호화 보안 의사 난수
번호 생성기)를 사용하여 생성되어야 합니다. CSPRNG는 "C" 언어의 rand() 함수와 같은 일반적인 의사 난수 생성기와는 매우 다릅니다. 이름에서 알 수 있듯이 CSPRNG는 암호화 방식으로 안전하도록 설계되었습니다. 즉, 매우 무작위이고 완전히 예측할 수 없는 난수를 제공한다는 의미입니다. 우리는 염분 값을 예측할 수 있기를 원하지 않으므로 CSPRNG를 사용해야 합니다.
다음 표에는 현재 일부 주류 프로그래밍 플랫폼의 CSPRNG 방법이 나열되어 있습니다.
PlatformJava | |
Dot NET(C#, VB) | |
Ruby | |
Python | |
Perl | |
C/C++(윈도우 API) | |
GNU/Linux 또는 Unix의 모든 언어 | |
| 각 사용자의 모든 비밀번호는 고유한 솔트 값을 사용해야 합니다. 사용자가 계정을 생성하거나 비밀번호를 변경할 때마다 비밀번호는 새로운 임의의 솔트 값을 가져야 합니다.
값은 최소한 해시 함수의 출력만큼 길어야 합니다. 이 솔트는 비밀번호 해시와 함께 사용자 계정 테이블에 저장되어야 합니다.
비밀번호 저장 단계:
CSPRNG를 사용하여 충분히 긴 임의의 솔트 값을 생성합니다.
솔트를 비밀번호에 혼합하고 Argon2, bcrypt, scrypt 또는 PBKDF2와 같은 표준 비밀번호 해싱 기능을 사용하여 암호화합니다.
솔트 값과 해당 해시 값을 사용자 데이터베이스에 함께 저장합니다.
데이터베이스에서 사용자의 솔트 값과 해당 해시 값을 검색합니다.
사용자가 입력한 비밀번호에 솔트 값을 섞어서 공통 해시 함수를 사용해 암호화합니다.
이전 단계의 결과를 비교하여 데이터베이스에 저장된 해시 값과 동일한지 확인하세요. 동일하면 비밀번호가 올바른 것입니다. 그렇지 않으면 비밀번호가 잘못된 것입니다.
위 내용은 비밀번호는 어떻게 안전하게 저장해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!