php 로그인을 하고 있는데, 다른 stackoverflow 기사에서 읽은 SHA1 또는 Md5 또는 SHA256 중 어느 쪽을 사용할지 결정하려고 합니다.그들 중 누구라도 다른 사람들보다 안전합니까?SHA1/256에서도 소금을 사용하고 있습니까?
또한 비밀번호를 mysql에 해시로 저장하는 안전한 방법입니까?
function createSalt() {
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3); }
$salt = createSalt();
$hash = sha1($salt . $hash);
질문에 대한 답변
둘 다 아니다.를 사용해 주세요.bcrypt
말씀하신 해시는 모두 하드웨어에서 빠르고 쉽게 사용할 수 있도록 최적화되어 있기 때문에 크래킹도 같은 품질을 가지고 있습니다.만약 다른 선택이 없다면, 적어도 긴 소금을 사용하고 여러 번 다시 해시하세요.
PHP 5.5+에서 bcrypt 사용
PHP 5.5는 암호 해시를 위한 새로운 기능을 제공합니다.이것은 최신 웹 어플리케이션에서의 패스워드 저장에 권장되는 접근 방식입니다.
// Creating a hash $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]); // If you omit the ['cost' => 12] part, it will default to 10
// Verifying the password against the stored hash
if (password_verify($password, $hash)) {
// Success! Log the user in here. }
이전 버전의 PHP를 사용하는 경우 업그레이드를 해야 하지만 업그레이드하기 전까지는 password_compat을 사용하여 이 API를 표시할 수 있습니다.
그리고 소금이 생기게 해주세요.CSPRNG를 사용합니다.
bcrypt의 두 가지 경고
- Bcrypt는 72자를 초과하는 비밀번호를 자동으로 잘라냅니다.
- Bcrypt는 나중에 잘립니다.
NUL
성격.
첫 번째 경고는 비밀번호를 bcrypt를 통해 실행하기 전에 미리 해시함으로써 해결할 수 있지만, 그렇게 하면 어플리케이션이 두 번째 경고로 헤드로 실행될 수 있습니다.
독자적인 스킴을 작성하는 대신에, 시큐러티 전문가가 작성하거나 평가한 기존의 라이브러리를 사용합니다.
ZendCrypt
(Zend Framework의 일부) 제공PasswordLock
와 유사하다BcryptSha
또한 인증된 암호화 라이브러리를 사용하여 bcrypt 해시를 암호화합니다.
md5나 sha256, 또는 속도에 최적화된 해시를 사용하는 것도 문제없다고 생각합니다.다른 사용자의 반론을 듣고 싶습니다.나의 이유는 다음과 같다.
God, love, war, peace 등의 약한 패스워드를 사용할 수 있도록 허용한 경우 사용자는 해시가 아닌 패스워드를 입력할 수 있습니다.이러한 패스워드는 보통 처음에 사용되므로 암호화와는 관계가 없습니다.
SSL을 사용하지 않거나 증명서를 가지고 있지 않은 경우, 트래픽을 듣고 있는 공격자는 패스워드를 풀 수 있습니다.또, Javascript등을 사용해 암호화를 시도하는 것은 클라이언트측이며, 간단하게 크래킹 해제를 실시할 수 있습니다.다시 말씀드리지만 서버 측 데이터 암호화에는 아무런 관련이 없습니다.
무차별 포스 공격에서는 취약한 패스워드가 이용됩니다.또한 로그인 제한이 3이 아닌 경우 사용자가 데이터를 입력할 수 있도록 허용하기 때문에 이 문제는 데이터 암호화와는 무관합니다.
데이터베이스가 손상되면 아무리 암호화하더라도 해시 기술을 포함한 모든 것이 손상되었을 가능성이 높습니다.이 경우에도 직원의 불만 XSS 공격이나 SQL 주입 또는 비밀번호 암호화와 무관한 기타 공격이 있을 수 있습니다.
암호화가 필요하다고 생각합니다만, 암호화가 가능한 것은, 이미 데이터베이스에 액세스 하고 있는 유저가 패스워드를 큰 소리로 읽어낼 수 없게 하는 것 뿐입니다.데이터베이스상의 권한이 없는 사용자라면 Sony가 신용 카드 번호를 포함한 모든 것을 암호화한 패스워드로 보호하는 것이 유일한 필드라고 생각했기 때문에 Sony가 취한 것은 더 큰 문제가 있습니다.
데이터베이스 내의 복잡한 비밀번호 암호화가 가져올 수 있는 유일한 이점은 데이터베이스에 액세스할 수 있는 직원이나 다른 사용자가 비밀번호를 읽는 것만으로 지연되는 것입니다.따라서 소규모 프로젝트이거나 서버 측의 보안에 대해 크게 걱정하지 않고 SQL 주입, XSS 공격, 기타 수많은 보안 위협 등 클라이언트가 서버에 보내는 모든 보안에 대해 더 많은 걱정을 하게 됩니다.동의하지 않는 사람이 있다면 클라이언트 측에서 슈퍼 암호화 패스워드가 필수인 방법을 읽어보고 싶습니다.
이 점을 명확히 하고 싶은 이유는 암호화된 패스워드가 유출될 염려가 없고 웹 사이트의 보안에 대한 염려가 없어지는 경우가 많기 때문입니다.
요하네스 고르셋이 지적한 바와 같이, Matasano Security의 Thomas Ptacek는 MD5, SHA1, SHA256 및 SHA512와 같은 단순하고 범용적인 해싱 기능이 왜 패스워드 해싱 선택지가 부족한지를 설명하고 있습니다.
왜일까요?이것들은너무빠릅니다.현대 컴퓨터에서는 코어당 최소 100만 개의 MD5 해시를 계산할 수 있기 때문에 사람들이 사용하는 대부분의 패스워드에 대해 무차별적으로 대응할 수 있습니다.이는 GPU 기반의 크래킹 서버 클러스터보다 훨씬 적은 수치입니다.
키 스트레칭 없이 소금에 절인다는 것은 무지개 테이블을 미리 계산할 수 없다는 것을 의미하며, 특정 소금에 맞게 임시로 만들어야 합니다.하지만 그렇게 어렵게 만들진 않을 거야
사용자 @Will:
모두가 인터넷을 통해 해킹당할 수 있는 것처럼 이것에 대해 이야기하고 있다.이미 설명한 바와 같이 시도를 제한하면 인터넷을 통한 패스워드 해독이 불가능하며 해시와는 관계가 없습니다.
그들은 그럴 필요가 없다.LinkedIn의 경우 일반적인 SQL 주입 취약성을 사용하여 로그인 DB 테이블을 가져오고 오프라인에서 수백만 개의 암호를 해독했습니다.
그런 다음 오프라인 공격 시나리오로 돌아갑니다.
데이터베이스 전체가 손상되어 해커가 md5 해시에 대해 초당 1억 번의 패스워드를 시도할 수 있게 되면 보안이 실제로 유효하게 됩니다.SHA512는 약 10,000배 느립니다.
아니요. SHA512는 MD5보다 속도가 10000배 느리지 않습니다.약 2배밖에 걸리지 않습니다.반면 Crypt/SHA512는 BCrypt와 마찬가지로 키 스트레칭을 수행하여 랜덤 소금이 내장된 매우 다른 해시를 생성하며 계산에는 500~99999배(스트레칭 조정 가능)가 소요됩니다.
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
따라서 PHP는 Crypt/Blowfish(BCrypt), Crypt/SHA256 또는 Crypt/SHA512 중 하나를 선택합니다.또는 적어도 Crypt/MD5(PHK)입니다.www.php.net/manual/en/function.crypt.php 를 참조해 주세요.
사용하다SHA256
완벽하지 않습니다.SHA512
빠른 해시에 이상적이지만 옵션 중에서 확실한 선택입니다.해시 테크놀로지와 마찬가지로 보안을 강화하기 위해 반드시 해시를 소금에 절여 주십시오.
덧붙여서 FRKT, 소금에 절인 SHA256 해시를 쉽게 깨는 곳을 가르쳐 주시겠습니까?나는 정말로 이것을 보는 것에 매우 흥미가 있다.
중요 편집:
앞으로 이동해 주세요.bcrypt
하드 해쉬로 사용합니다.자세한 내용은 여기를 참조하십시오.
염분 시 편집:
난수 또는 랜덤바이트 스트림 등을 사용합니다.데이터베이스에 있는 레코드의 고유 필드를 솔트로 사용할 수도 있습니다.이렇게 하면 솔트는 사용자별로 다릅니다.
해커가 데이터베이스에 접근할 수 있다면 패스워드를 해시하는 php 파일에도 접근할 수 있을 것으로 생각되며, 성공한 사용자 이름 패스워드 조합을 모두 보내도록 수정할 수 있습니다.웹 디렉토리에 액세스 할 수 없는 경우는, 항상 패스워드를 해시 해시에 선택해 데이타베이스에 쓸 수 있습니다.즉, 해시 알고리즘은 시스템 보안만큼 중요하지 않습니다.SSL을 사용하지 않는 경우에도 로그인 시행을 제한하면 공격자가 접속을 감시하고 정보를 얻을 수 있습니다.사용자 고유의 목적에 따라 계산하는데 오랜 시간이 걸리는 알고리즘이 필요하지 않는 한 SHA-256 또는 SHA-512로 충분합니다.
추가된 보안 대책으로 스크립트(Bash, batch, python 등)나 프로그램을 설정하고 불분명한 이름을 지정하여 로그인 여부를 확인합니다.php가 변경되었습니다(날짜/시간 스탬프 확인). 변경되면 이메일을 보냅니다.또한 admin 권한으로 로그인 시도 횟수를 모두 기록하고 데이터베이스 로그인 시도 실패를 모두 기록하여 로그를 이메일로 전송해야 합니다.