2017-03-17 1 views
0

데이터베이스를 만들 때 사용자 암호를 저장해야합니다. 나는 이미 클라이언트 쪽에서 암호를 해시하기 위해 bcrypt를 사용하고 있지만 클라이언트 쪽에서 만 해시를 사용하면 해시가 데이터베이스와 관련하여 본질적으로 암호와 같습니다. 데이터베이스에 저장되기 전에 암호 해시 (해시)를 다시 해시하고 싶습니다. SHA2(pwd)과 같은 MySQL 고유의 메소드를 사용해야합니까, 아니면 서버에서 bcrypt를 사용할 수 있습니까?MySQL- 서버 측 암호 해시 구현 방법

답변

0

Bcyrpt는 여기서 좋은 호칭이지만 클라이언트가 아니라 서버 측에서 해싱을 수행해야합니다. 클라이언트가 올바른지 확인할 수있는 해시를 생성하는 데 필요한 모든 정보를 클라이언트가 알 수 없으며 서버에만 해당 정보가 있습니다.

당신이해야 할 일은 비밀 번호를 안전하게 (예 : HTTPS를 통해) 통과시켜 응용 프로그램 계층에 해시하는 것입니다. MySQL만으로는 적절한 암호 해싱을 수행하는 데 필요한 기능이 없습니다. SHA2는 완벽하게 부적절합니다. 즉, 설계 상 고속 해시로 인해 부적합합니다. 암호 해싱 알고리즘은 의도적으로 야만적 인 암호를 고통스럽게 값 비싸게 만드는 속도가 느립니다.

+0

MITM 공격으로부터 보호하기위한 좋은 방법이라고 읽었 기 때문에 클라이언트를 해싱하고 있습니다. 하지만 제 질문은 당신이 말하는 것과 정확히 같습니다. 서버 측에서 bcrypt를 구현하려면 어떻게해야합니까? 가능하다면 SHA2를 피하고 싶습니다. – silvertiger

+0

나는 그것을 어디에서 읽었는지, 올바르게 읽는지 모르겠습니다. SSL/TLS가 무의미하게 만들었 기 때문에 클라이언트 측 해싱을 시도한 유일한 것은 시도 응답 유형 시스템이며, 그 대부분은 사망했습니다. 채널 자체를 보호 할 수 있습니다. 해시 * 한 번, 제대로, 당신은 괜찮을거야. bcrypt, scrypt 또는 기타 암호 별 해싱 알고리즘, 특히 조절이 어려운 난이도 알고리즘이 핵심 요소입니다. – tadman

+0

MySQL은 최소한 상자 밖에서는 bcrypt를 할 수 없습니다. 일반적으로 일부 응용 프로그램 계층에서 암호를 해싱하는 경우입니다. 그것은 Java, Python, Ruby, Node.js, PHP 일 수 있습니다. 중요하지 않습니다. 거의 모든 것이 bcrypt 구현을 가지고 있습니다. MySQL은 많은 RDBMses와 마찬가지로 데이터 저장소에 불과합니다. – tadman

관련 문제