일반적인 웹 사이트 환경에서 암호 로그인 시스템을 구현하는 방법에 대한 좋은 설명을 찾고 있습니다. 나는 위대한 위키 피 디아 기사와 SO Q & A와 블로그 등을 읽었지 만, 항상 해시를 생성하는 해시를 만드는 것보다는 해시를 생성하는 부분에 초점을 맞추고있는 것 같습니다. 코드 등이 있습니다. 이미 좋은 답변이있는 경우 다시 게시 해 주셔서 사과 드리며 연결하십시오.웹 응용 프로그램에서 암호 해시 및 해시 구현을위한 기본 프로세스
나의 현재 이해는 다음과 같습니다
1) 새로운 사용자가 웹 사이트에 새로운 계정을 생성합니다. 그들은 "암호"를 입력하고 클라이언트 쪽 코드는 긴 임의의 문자열 "소금"을 생성하여 끝에 추가하고 예를 들어 해시 -> BCrypt (암호 + 소금)를 생성합니다. 그런 다음 클라이언트 코드는 해시 된 전체 해시와 해시되지 않은 소금을 서버에 전송합니다.
2) 서버는 전체 해시 및 해시되지 않은 소금을 DB의 사용자 항목에 저장합니다. 사용자 로그인시
3)
들이 다시 소금으로 해시되는 암호,질문 1을 입력) 클라이언트 측 코드는 각 사용자에 대해 동일한 '무작위'소금 값을 생성 않습니다 어떻게?
질문 2)이 시점에서 클라이언트 측 코드가 단지 소금없이 전체 해시를 전송합니까?
질문 3) 서버 측은 일단 전체 해시를 수신하면 무엇을합니까? (단순히 전송 된 전체 해시를 저장된 전체 해시와 비교해보십시오. 그렇다면 공격자가 데이터베이스에 침입하여 저장된 전체 해시 값을 가져 와서 서버에 직접 로그인하여 로그인 할 수 없습니까?) 로그 인 프로세스는 기본적으로 클라이언트에서 보낸 전체 해시와 데이터베이스에 저장된 전체 해시를 비교하는 서버와 관련됩니다. 질문 4) 암호는 항상 보안 연결을 통해 보내야합니까? 아니면 누구나 볼 수있는 소금물과 해싱으로 만들었습니까?
암호화되지 않은 안전하게 안전하게 전송할 수있는 많은 횟수로 반복적으로 암호를 해시하는 복잡한 방법이 있습니다. 예를 들어 스키마는 일 수 있습니다. 1. 클라이언트가 계정을 만들고 암호를 해시합니다. 10,000 번. 2. 서버는 해시와 10,000이라는 숫자를 저장합니다. 3. 로그인 할 때 클라이언트는 10,000 - n 회 암호 해시를 제출합니다. 4. 서버는 해시를 한 번 더 해시하고 저장된 해시와 비교 한 다음 동일한 경우 저장된 해시를 제출 된 해시로 바꾸고 숫자를 줄입니다. 누군가가 해시를 다시 제출하는 것을 방지합니다. – jhoyla
소금은 각기 다른 소금을 사용하더라도 각 계정에 대해 사전 공격을하는 것이 매우 빠르기 때문에 사전 공격을 너무 많이 막지는 못합니다. 그러나 무차별 공격이 필요한 좋은 암호를 사용하면 공격자가 동시에 모든 계정을 포기하지 않고 강제로 한 번에 하나의 계정 만 강제로 공격 할 수 있습니다. –
감사합니다. 아주 명확한 대답입니다. – 0xor1