2009-03-15 8 views
7

PHP에서 양방향 암호화를 사용하여 내 사이트의 암호를 암호화하고 싶습니다. mcrypt 라이브러리를 보았지만 너무 복잡합니다. 누구든지 더 쉽고 안전하지만 다른 방법을 알고 있습니까? Zend Framework에 액세스 할 수 있으므로이를 사용하는 솔루션도 마찬가지입니다.PHP로 양방향 암호화를 구현하는 가장 좋은 방법은 무엇입니까?

내 클라이언트가 db로 이동하여 암호를 변경하거나 검색하려고하기 때문에 실제로 양방향 암호화가 필요합니다.

+2

왜 클라이언트가 암호를 검색하려고합니까? 이것은 대개 나쁜 생각입니다. 관리자가 암호를 재설정하도록하고, 사용자가 암호를 알고있는 경우 암호를 변경할 수있는 권한을 부여하십시오. –

답변

24

openssl_private_decrypt() (및 properly salted를)입니다.

세계에서이 규칙을 위반할만한 변명은 없습니다.

현재 crypt을 사용하여 CRYPT_BLOWFISH를 사용하는 것이 좋습니다.
PHP에서 CRYPT_BLOWFISH는 Bcrypt 해시를 구현 한 것입니다. Bcrypt는 Blowfish 블록 암호를 기반으로합니다.

  • 클라이언트가 로그인을 시도하면 입력 한 암호를 해시하고이를 DB에 저장된 해시와 비교합니다. 일치하면 액세스 권한이 부여됩니다.

  • 클라이언트가 암호를 변경하려면 새 암호를 올바르게 해시하고 DB에 저장하는 약간의 스크립트를 통해 클라이언트가 암호를 변경해야합니다.

  • 클라이언트가 암호를 복구하려면 새 임의 암호를 생성하여 클라이언트에 보내야합니다. 고객들이 행운를 벗어 현재 암호, 를 조회하려면 새 암호의 해시는 DB

  • 에 저장됩니다. 그리고 그것은 정확하게 해싱 패스워드의 요점입니다. 시스템은 패스워드를 모르기 때문에 절대로 룩업/도난 당할 수 없습니다.

Jeff 그것에 대해 블로그 : 당신이 표준 라이브러리를 사용하려면 You're Probably Storing Passwords Incorrectly

, 당신은 한 번 봐 걸릴 수 : Portable PHP password hashing framework을하고 CRYPT_BLOWFISH 알고리즘을 사용해야합니다.

(일반적으로, 밖으로 어려운 길을 것을 발견했다 administrators- 매우 경험이 풍부한 DB를 -including 데이터베이스의 레코드를 직접 사서 고생 만지작.
많은 사람들.)

+0

첫 문장을 편집하여 "암호 해시를 보관해야합니다"라고 생각합니다. –

+0

Eeeeh, 예, 감사합니다 :) – Jacco

+1

여기에 복어를 작성 하시겠습니까? 복어 == 대칭 키 암호화, 해싱이 아닙니다. 나는 암호화를 해쉬하는 것을 강력히 추천한다. – thomasrutter

7

암호를 암호화하지 마십시오. 암호를 해독 할 필요가 없으며 확인 만하면됩니다. mcrypt를 사용하는 것은 아무것도하지 않는 것보다 낫지 않습니다. 해커가 사이트에 침입하여 암호화 된 암호를 훔쳐 내면 해커가 암호화에 사용 된 키를 훔칠 수 있기 때문입니다.

사용자의 암호를 가져 와서 salt로 연결하고 결과 문자열을 sha-256 해싱 함수를 통해 실행하고 결과를 반환하는 PHP 응용 프로그램에 대해 단일 "암호"기능을 만듭니다. 암호를 확인해야 할 때마다 암호의 해시가 데이터베이스의 해시와 일치하는지 확인하면됩니다. 당신이 정말로 나중에 암호를 검색해야하는 경우

http://phpsec.org/articles/2005/password-hashing.html

+0

Thx. 방금 내 질문에이 줄을 추가했습니다. 클라이언트가 db에 들어가서 암호를 변경하거나 검색하려고하기 때문에 실제로 2 방향 암호화가 필요합니다. – Bamerza

+2

음, 암호를 "PleaseHackMe"키로 XOR 할 수도 있습니다. 진심으로 클라이언트에게 암호를 다시 설정하기 만하면되므로 암호를 재설정하면됩니다. –

+0

이것은 SHA-1 알고리즘을 권장하지 않는다는 점을 제외하고는 좋은 대답입니다. SHA-1 알고리즘은 그렇게 쉽게 파손될 수있는 것으로 나타났습니다. 나는 SHA-256, 또는 그 가족 중 하나 (SHA-384, SHA-512 등)를 권하고 싶다. – thomasrutter

4

, 당신은 적어도 그렇게 공격자가 (동일한 시스템에 저장해서는 안) 개인 키를 필요 개인 키와 공개 키를 사용한다 비밀번호를 해독합니다. 이 목표를 달성하기

2 개 개의 기능 openssl_public_encrypt()와 당신은 암호 해시 저장해야

+0

이 목표를 달성하고 최소한의 보안을 유지하는 유일한 방법처럼 들립니다. –

+0

M_CRYPT는 데이터 암호화 및 암호 해독 용으로 설계된 라이브러리이며 OpenSSL 라이브러리는 보안/보안 통신에 사용됩니다. – Jacco

+0

이것은 공정한 답변입니다. 또한 개인용 키를 동일한 서버 또는 관련 서버에 저장하면 안됩니다. 전체 하드 디스크에서 키를 검색하는 것은 상대적으로 쉽습니다. – thomasrutter

1

은에 보관 하나 비밀번호를 해쉬 할 수 있습니다 (즉, 되돌릴 수 없음).

특히 하드 코딩 된 키와 함께 대칭 암호화를 사용하는 것은 기본적으로 무의미합니다.

사용자가 제안한대로 시스템이 해킹당한 경우 공격자는 암호화 된 암호뿐만 아니라 코드와 암호를 해독 할 수있는 권한도 얻습니다. 따라서 해커는 암호화 된 암호에도 저장할 수 있습니다.

컴퓨터에 물리적으로 액세스하는 사람으로부터 데이터를 보호하려면 암호화 된 파일 시스템을 사용합니다 (단, 암호는 데이터베이스의 일반 텍스트로 저장). 물론 재부팅 할 때마다 시스템을 사용하기 전에 수동으로 키를 입력해야합니다.

관련 문제