2

좋은 아침입니다. 안전한 암호 인증 (n 시간 해시, 소금 사용 등)을 만드는 방법에 대해 (스택 오버플로에서 대부분을 읽었습니다.)하지만 실제로 TCP로 구현하는 방법에 대해서는 의심 스럽습니다. 클라이언트 - 서버 아키텍처.TCP 클라이언트 서버 아키텍처에서 간단한 암호 인증

필자는 (jasypt digester를 사용하여) 필요한 방법을 이미 구현 및 테스트했지만, 의심스러운 부분은 해싱과 검증을 수행하는 곳입니다.

내가 읽은 바에 따르면 비밀번호를 전송하지 않는 것이 좋습니다. 이 경우 서버는 해시 된 암호를 보내고 클라이언트는 사용자가 입력 한 암호로 테스트합니다. 그 후에 인증이 성공했는지 여부를 서버에 알려야합니다. 서버가 읽고있는 소켓에 연결하고 "인증 확인"을 보내는 사람이라면 누구나 로그온 할 수 있기 때문에이 방법은 작동하지 않습니다.

다른 옵션은 패스워드의 has를 서버로 보내는 것입니다. 이 경우 "해커"가 인증을 위해 동일한 해시를 보내야하기 때문에 해싱의 실제 이점은 없습니다.

아마도 세부 정보가 표시되지 않을 수 있습니다.

답변

2

귀하의 질문에 대한 답변은 암호의 해시를 영구적으로 저장하는 편인 입니다.

긴 해답 : 해싱 암호는 많은 사용자가 사용하기 때문에 암호 저장 (예 : 데이터베이스)에 대한 읽기 전용 액세스 권한이있는 공격자 만 높은 수준으로 에스컬레이션하지 못하도록하고 실제 암호를 알지 못하게합니다 여러 서비스에 걸쳐 동일한 패스 (좋은 설명 herehere). 그래서 저장소 측에서 유효성 검사를 수행해야합니다 (앞서 언급했듯이 공격자는 "유효성 확인"메시지 만 보내면됩니다).

진정한 보안 연결을 구현하려는 경우 간단한 암호 해싱으로 충분하지 않습니다 (앞에서 언급했듯이 공격자는 TCP 트래픽을 스니핑하고 해시를 공개 할 수 있음). 이 목적을 위해 암호를 해싱하는 것보다 훨씬 어려운 보안 연결을 설정해야합니다 (웹 세계에서 패스를 입력하는 페이지는 항상 HTTPS를 통해 제공되어야 함). SSL/TLS를 사용해야하지만 이러한 프로토콜은 TCP 위에 있으므로 다른 솔루션이 필요할 수 있습니다 (일반적으로 신뢰할 수있는 인증서 소스가 있어야하며 서버 인증서의 유효성을 검사하고 공통점을 생성해야합니다. 대칭 암호화 키를 누른 다음 보내는 모든 데이터를 암호화). 보안 암호화 연결을 설정하면 암호화 된 데이터는 스니핑 할 수 없으므로 공격자는 암호 해시를 알 수 없습니다.