답변:
일반적으로 created TIMESTAMP
사용자 테이블에 열 이 있으므로 사용자가 언제 등록했는지 확인할 수 있습니다. Salt에 추가 열을 추가하고 싶지 않으므로 timestamp 열을 salt로 사용합니다.
SHA1(password + created)
그게 그렇게 중요한 건가?
소금은 두 가지 목적으로 사용됩니다. 사전 해시 된 암호의 큰 테이블 ( "무지개 테이블")을 사용하는 것은 실용적이지 않으며 해시 목록에서 동일한 암호를 다르게 보이게합니다. 동일한 비밀번호를 다르게 보이게하면 여러 사람이 하나의 특정 비밀번호 (일반적으로 약한 비밀번호)를 사용하는 문제를 피하는 데 도움이됩니다.
따라서 각 계정에는 고유 한 소금이 있어야하며 소금이 발생할 가능성이 높다는 의미에서 소금을 지나치게 예측할 수 없어야합니다. (많은 사이트가 1에서 시작하여 카운트 업을하면 나쁜 녀석은 예를 들어 소금이 적은 소금을 포함한 무지개 테이블을 만들 수 있습니다.) 일반적으로 예측할 수있는 것 이외의 의미로 무작위 일 필요는 없습니다. 그것들은 해시 그 자체보다 더 비밀이 아니기 때문에 명확하게 추측 할 필요가 없습니다.
소금을 생성하는 편리한 방법을 사용하십시오. 계정 수와 비교하여 잠재적 인 염가 값이 많으면 (유닉스 시스템에서 가능한 많은 수의 65536에 대해 2 바이트를 자주 사용 했음) 세미 임의 할당은 거의 중복 소금을 제공하지 않습니다.
새 비밀번호 (등록, 비밀번호 재설정, 비밀번호 업데이트)를 저장할 때마다 한 가지 좋은 기술은 다음과 같습니다.
for i in (0...65536) { password = hmac(password) }
프레임 워크를 활용하십시오. .NET에서는 RNGCryptoServoiceProvider를 사용할 수 있습니다 ...
// If salt is not specified, generate it on the fly.
if (saltBytes == null)
{
// Define min and max salt sizes.
int minSaltSize = 4;
int maxSaltSize = 8;
// Generate a random number for the size of the salt.
Random random = new Random();
int saltSize = random.Next(minSaltSize, maxSaltSize);
// Allocate a byte array, which will hold the salt.
saltBytes = new byte[saltSize];
// Initialize a random number generator.
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
// Fill the salt with cryptographically strong byte values.
rng.GetNonZeroBytes(saltBytes);
}
다른 프레임 워크에는 활용할 수있는 비슷한 클래스가 있어야합니다. 임의성을 달성하기 위해 소프트웨어는 종종 Random
위에서 언급 한 것처럼 사용자를 사용합니다 . 솔트를 제공하기 위해 정의 된 영역 내에서 마우스를 무작위로 이동하는 것은 TrueCrypt에서 사용하는 옵션입니다. 특정 요구 사항과 보안 수준으로 요약됩니다. 당신의 소금은 단순히 될 수 있기 때문에 !@#$%
.
솔트 서버 측을 생성하여 생성시 사용자 계정에 할당합니다. 프레임 워크에서 사용 가능한 일부 암호화 생성 API를 더 잘 사용하지만 원칙적으로 모든 시퀀스가 수행됩니다.
일반적으로 다음과 같이 저장됩니다.
User
-------------------
ID
Username
PasswordHashWithSalt
예:
PasswordHashWithSalt =
A15CD9652D4F4A3FB61A2A422AEAFDF0DEA4E703 j5d58k4b56s8744q
bcrypt를 사용 하고이 기사 를 읽으면 일반 해시만으로는 오늘날과 같이 심각한 보호 기능이 아닙니다.
사용을 고려 SDR 대한 지식이 전혀없는 암호 프로토콜 오픈 소스 라이브러리의 많음을 가지고 있으며, 특허 무료입니다.
SDR에는 소금이 필요하며이를 얻기 위해서는 최고의 장소가 고객입니다. 키 입력, 마우스 이동, 환경 변수, 임의의 숫자, 임시 폴더의 파일 생성 시간 등을 계산하여 서버에서 예기치 않은 방식으로 최종 소금을 만듭니다. SDR은 가장 중요한 사용자 암호 인 salt를 가져와 검증 자 키를 생성합니다. 비밀번호는 저장하지 않으며 컴퓨터에서 나가지 않지만 검증기 키 및 솔트와 함께 제공되는 비밀번호가 있는지 확인할 수 있습니다. 그것은 중간 및 사전 공격에서 사람의 면역입니다. 데이터베이스 열에서 키와 솔트를 암호화하여 확인하십시오.