>백엔드 개발 >PHP 튜토리얼 >사용자 비밀번호를 안전하게 저장하는 방법

사용자 비밀번호를 안전하게 저장하는 방법

炎欲天舞
炎欲天舞원래의
2017-08-04 17:55:091608검색

하나: 기본: 소금을 사용한 해싱

우리는 악의적인 공격자가 조회 테이블과 레인보우 테이블을 사용하여 얼마나 빨리 일반적인 해시 암호화를 해독할 수 있는지 이미 알고 있습니다. 우리는 또한 무작위로 솔트된 해시를 사용하면 이 문제를 해결할 수 있다는 것을

배웠습니다. 하지만 우리는 어떤 종류의 소금을 사용하며, 이를 어떻게

비밀번호에 혼합합니까?

솔트 값은 CSPRNG(암호화 보안 의사 난수

번호 생성기)를 사용하여 생성되어야 합니다. CSPRNG는 "C" 언어의 rand() 함수와 같은 일반적인 의사 난수 생성기와는 매우 다릅니다. 이름에서 알 수 있듯이 CSPRNG는 암호화 방식으로 안전하도록 설계되었습니다. 즉, 매우 무작위이고 완전히 예측할 수 없는 난수를 제공한다는 의미입니다. 우리는 염분 값을 예측할 수 있기를 원하지 않으므로 CSPRNG를 사용해야 합니다.

다음 표에는 현재 일부 주류 프로그래밍 플랫폼의 CSPRNG 방법이 나열되어 있습니다.

PlatformCSPRNGPHPmcrypt_create_iv, openssl_random_pseudo_bytesjava.security.SecureR andom System.Security. Cryptography.RNGCryptoServiceProviderSecureRandomos.urandomMath::Random::SecureCryptGenRandom/dev/random 또는 /dev/urandom에서 읽기각 사용자의 모든 비밀번호는 고유한 솔트 값을 사용해야 합니다. 사용자가 계정을 생성하거나 비밀번호를 변경할 때마다 비밀번호는 새로운 임의의 솔트 값을 가져야 합니다. 절대 소금 값을 재사용하지 마세요. 또한 소금은 해싱에 사용될 수 있을 만큼 충분히 길어야 합니다. 경험상 salt
Java
Dot NET(C#, VB)
Ruby
Python
Perl
C/C++(윈도우 API)
GNU/Linux 또는 Unix의 모든 언어


값은 최소한 해시 함수의 출력만큼 ​​길어야 합니다. 이 솔트는 비밀번호 해시와 함께 사용자 계정 테이블에 저장되어야 합니다.

비밀번호 저장 단계:

CSPRNG를 사용하여 충분히 긴 임의의 솔트 값을 생성합니다.

  1. 솔트를 비밀번호에 혼합하고 Argon2, bcrypt, scrypt 또는 PBKDF2와 같은 표준 비밀번호 해싱 기능을 사용하여 암호화합니다.

  2. 솔트 값과 해당 해시 값을 사용자 데이터베이스에 함께 저장합니다.

  3. 비밀번호 확인 단계:

데이터베이스에서 사용자의 솔트 값과 해당 해시 값을 검색합니다.

  1. 사용자가 입력한 비밀번호에 솔트 값을 섞어서 공통 해시 함수를 사용해 암호화합니다.

  2. 이전 단계의 결과를 비교하여 데이터베이스에 저장된 해시 값과 동일한지 확인하세요. 동일하면 비밀번호가 올바른 것입니다. 그렇지 않으면 비밀번호가 잘못된 것입니다.

위 내용은 사용자 비밀번호를 안전하게 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.