2012-07-16 1 views
1

로그인 프로세스를 보호하기 위해 교육을 진행 중입니다.sha256을 사용할 때 SQL 테이블의 실제 암호 시각화

나는 sign_up.php에 샤 256을 사용하고 있습니다 :

$username= check_input($_POST['username']); 
$password= check_input($_POST['password']); 
//the password is encrypted in sha256 
$secure_sign_up_password = hash('sha256', $password); 

다음 내 SQL 데이터베이스에 내 사용자 테이블에 물론, 내가 읽을 수 열의

  • ' 로그인 '실제 입력 된 로그인 예 : 누군가'michael '을 입력하면 SQL 데이터베이스에'Michael '이 표시됩니다.

  • 'password '실제 입력 된 로그인 예 : 내가 생각 : 누군가 유형 '과일', 나는

내 질문 (나는 초보자이야) 간단하지만 아마도 조금 순진입니다

SQL 데이터베이스에 'e8bfab56c53980cd014206c8da2f8c9b9708eaacc61'같은 해시 값을 볼 경우 내가 데이터베이스의 어딘가에있는 실제 암호를 읽을 수 있고 그 암호가 전송되는 동안 암호가 가로 채거나 읽히지 않도록하기 위해서만 해싱을 만들 수 있다는 것입니다. 나도 몰라, 누군가 진짜 비밀 번호를 보내달라고 부탁 할지도 몰라. 하지만 내가 볼 수있는 유일한 것은 암호 열에 '해쉬 된'암호입니다.

  • 이렇게 만들었습니까?
  • 실제 비밀번호도 시각화 할 수 있습니까?

답변

2
  1. 데이터베이스에 열린 형식의 암호를 절대로 보유하지 마십시오. 누군가 시스템에서 악용을 발견하면 SQL 쿼리를 만들고 사용자 암호를 얻을 수 있습니다. 해커는 사용자 이름과 암호를 알고 있기 때문에 사용자로 시스템에 로그인 할 수 있습니다.
  2. 암호를 복원하려면 암호를 다시 생성하는 기능을 만드십시오. 암호를 일반 텍스트로 저장하지 마십시오.
  3. SHA256은 해시 함수입니다. 수학적으로 이는 데이터가 한 방향으로 만 "해시"될 수 있음을 의미합니다. 제 말은 해시에서 데이터를 복원 할 수 없다는 것입니다. 해시 함수에 대해 http://en.wikipedia.org/wiki/Hash_function을 읽을 수 있습니다. http://en.wikipedia.org/wiki/Sha256 sha256 결과 : 누군가 데이터베이스를 해킹하여 사용자 이름과 암호를 얻은 경우 시스템에 로그인 할 수 없습니다. 해커는 해시 데이터 만 가지고 로그인 할 때 정확한 비밀번호를 얻을 수 없으므로
  4. 앞에서 설명한 것처럼 해시 함수는 한 가지 방법으로 만 "해시"데이터가 될 수 있습니다. 그러나 일부 해커들은 사전 정의 된 알고리즘을 위해 매우 큰 데이터를 대량으로 생성합니다. 암호에 대한 해시 테이블을 작성한다는 의미입니다. 이러한 해시 테이블은 다음과 같이 보입니다 :
 
    password hash 
    ------------------ 
    a   some_hash1 
    b   some_hash2 
    ...   ..... 
    qwerty  some_hash3 
    some_data some_hash3 -- yes, data can have collisions. See wiki about hash functions 

를 그리고 해커가 당신에게 데이터베이스를 해킹과 같은 테이블이있는 경우, 그 수의 암호를 복원 할 수 있습니다. 예를 들어, 해커가 관리 사용자 해시 "some_hash3"에 도착한 다음 해시 테이블에서 해시를 검색하면 해당 해시 "some_hash3"에 "qwerty"및 "some_data"라는 비밀번호가 있으며 해커가 이러한 비밀번호로 로그인을 시도합니다. 검색 결과 : 소금을 사용하십시오. 요즘 들어 해커는 6 개의 기호 비밀번호에 대한 테이블을 가지고 있습니다. 하지만 당신은 아주 간단한 기술에서 그들을 "빨아"할 수 있습니다 : 당신이 데이터베이스에 암호를 저장하면, 암호 일부 값 (소금)을 추가하고 같은 값 해시에서 얻을 :

// somewhere in code, where creating/updating users password 

$password = hash('sha256', $salt.$password); 

을하고 비밀번호를 확인합니다 때를 사용 같은 논리

감사

+1

+1 - 매우 유익한 답변입니다. – Lix

+0

정식 주목! 감사 – Mathieu

3

이것은 의도적으로 설계된 것입니다. 아무도은 저를 제외하고는 내 비밀번호가 무엇인지 알아야합니다. 당신 (심지어 멋진 제목을 넣는)으로서의 당신조차도 내 비밀 번호를 모르면됩니다. 잊어 버린 경우, 그건 내 문제이지만 사이트에서 재설정 할 수있는 방법을 제공해야합니다. 그런 다음 재설정하면 사이트에서 해시를 다시 저장해야합니다. 일반 텍스트 암호는 절대 저장하면 안됩니다.

4

암호를 "해독"할 수 있다면 매우 안전한 시스템이 아닙니다. 누군가가 귀하의 데이터베이스에 액세스하면 일단 비밀 번호를 알지 못해 모든 사람의 비밀번호에 액세스 할 수 있습니다. ...

사이트의 비밀번호를 잊어 버린 경우 (그리고 우리 모두는 그것을 가지고 있습니다. !), 당신은 그들이 보통 * 이 아니라는 것을 기억할 것입니다.은 간단히 귀하의 이메일에 알리미로 비밀번호 (일반 텍스트)를 보내드립니다. 그들은 재설정 할 수있는 기회를 제공 할 것입니다. 이 방법 (보통 이메일/전화 번호를 통해 확인)은 귀하가 실제로 계좌를 개설 한 사람이라는 것을 알게됩니다.

* 패스워드를 일반 텍스트로 보내면 아마도 암호를 저장하고 있거나 쉽게 해독 할 수있는 형태 일 것입니다. 이 사이트는


당신이 사용자 계정에 액세스 할 수 있도록 자신에게 종류의 "백도어"를 떠나 관심이 있다면 ... 그들이 생각하고 싶은만큼 안전 대부분 아니라, 무엇을 관리자 계정 내부에서 로그인하기 위해 인코딩 된 비밀번호를 사용할 수있는 특별한 로그인 양식이 있다고 생각할 수 있습니다. 즉, hash('sha256', $password)을 제외하고 이미 인코딩 된 $password을 전달해야합니다. 데이터 베이스).약간은 해킹입니다. 이미 관리자 계정을 가지고 있다면, 이미 의 모든 강력한 권한을 가지고 있기 때문에 다른 사용자로 로그인 할 수있는 것은별로 없습니다!

+1

은 그냥 약간의 세부 사항에 압정을)

하지만, 여기에 다른 같은

는 것을 합리적으로 수행되지 않습니다 말했다. 현재 대중적인 의견은 bcrypt()가 갈 길이라는 것입니다. –

+1

모두 응용 프로그램에 따라 다릅니다. 단순한 위험이 낮은 민감하지 않은 유형의 시스템의 경우 문자열 끝에 약간의 소금을 추가하기 만하면됩니다. 죄송합니다.보다 안전합니다 ... ' wiki bcrypt' ... – Lix

+1

감사합니다. 완전히 이해했습니다. – Mathieu

0

SHA256 해시 및 기타 해시 하나의 방법입니다. http://en.wikipedia.org/wiki/Cryptographic_hash_function을 참조하십시오. 데이터베이스의 암호 필드에 작성한 것을 암호 해독 할 수있게하려면 다른 접근 방법을 사용하는 것이 좋습니다.

해시를 만드는 대신 사용자와 공유하지 않는 키를 사용하여 암호화 할 수 있습니다. http://www.php.net/manual/en/book.mcrypt.php을보십시오. 대칭 암호화의 경우 키가 코드의 일부가됩니다.

정말 안전한 PKI 암호화 (공개 키로 암호화, 비공개로 암호화)를 시도하십시오. php.net/manual/en/function.gnupg-encrypt.php 또는 php.net/manual/en/book.openssl.php를보십시오. 당신은 아마 요즘 SHA256보다 강력한 해싱 알고리즘을 사용하려면 -

관련 문제