1

디지털 서명으로 부인 방지 및 무결성을 달성하는 방법을 이해합니다. 그러나 아직 이해하지 못하는 인증입니다.디지털 서명을 사용하여 서버 인증

저는 C#으로 클라이언트 인증서를 개발 중이며 디지털 인증서와 디지털 서명을 사용하여 인증 할 수 있어야합니다. SignedCms.CheckSignature()를 사용하여 Signature의 유효성과 무결성을 검사하는 방법을 알고 있지만, 관련 부분을 어떻게 인증합니까? 예를 들어

:

  1. 클라이언트는 디지털 서명을위한 서버를 요청,
  2. 클라이언트가 서명을 받아 그 유효성을 검사,
  3. 검증에 성공하면 계속합니다.

클라이언트는 man-in-the middle 공격의 희생양이 될 수 있으며 2 단계에서 유효한 서명을 수신 할 수 있습니다. 유효성 검사는 성공하지만 클라이언트는 올바른 서버와 통신하지 않습니다.

무엇이 누락 되었습니까?

답변

1

서명 인증서의 신뢰가 누락되었습니다.

SSL 인증서를 고려하면 Windows (또는 모든 OS)에서 신뢰할 수있는 루트 CA에 대한 서명 경로가 있습니다. MITM이 자체 서명 된 인증서 또는 신뢰할 수없는 CA가 생성 한 인증서를 제시하면 브라우저에서 거부되어 경고가 표시됩니다. 그러므로 인증서는 알고있는 CA가 발급 한 경우에만 신뢰할 수 있으며, 알고있는 인증서와 연결되어있는 경우에만 신뢰할 수 있습니다.

자체 서명 된 인증서의 경우 키 지문, 일련 번호 또는 기타 상수 식별자를 안전하게 교환하고 서명 키가 실제로 예상 한 것임을 입증해야합니다. 자체 서명 된 인증서가 일반적으로 ' 공개 된 웹 사이트 또는 기타 서비스에 사용됩니다.

MITM 공격이 있고 원래 컴퓨터의 서명이 제거 된 경우 메시지가 변경된 다음 서명 인증서의 신원을 신뢰할 수있는 인증서와 비교하여 확인하면 알 수없는 인증서를 사용하여 서명을 취소합니다. 사직 된 메시지를 거부 할 것입니다.

(실제로는 더 복잡해진다,하지만 당신은 내가 희망 지점 수)

+0

중간에있는 사람이 서버에서 오는 서명을 차단하고 신뢰할 수있는 CA에서 발급 한 완전히 유효한 인증서로 모든 새로운 디지털 서명을 클라이언트에 보내면 어떻게 될까요? –

+0

그게 더 재미 있어요. SSL에서 인증서 이름을 확인하여 연결하려는 주소를 처리하는지 확인해야합니다.SSL CA를 사용하면 해당 FQDN을 소유 한 사람에게 인증서가 발급되었는지 확인할 수 있습니다. 그리고 잘못되었을 경우를 대비하여 게시 된 해지 목록이 있습니다. 다른 시나리오에서는 컴퓨터 이름, 아마도 인증서 지문이 변경되거나 인증서가 다른 CA에서 발급 한 경우와 다를 수있는 전체 체인의 유효성을 검사 할 수 있습니다. 내가 간단히 말해 줬다. :) – blowdart

+0

잘 이해했다면 비 SSL 환경과 관련된 측면은 클라이언트가 이미 서버 (지문, 예를 들어 지문)에 대한 올바른 정보를 가지고 있음을 의미한다. 정확한 지문이 저장됩니다.) 클라이언트가 서버에 처음 연결했을 때 비교할만한 신뢰할 수있는 정보가 없다면 어떻게됩니까? –

1

중간에있는 사람이 요청에 서명 할 개인 키를 소유 한 경우에만 유효한 서명을받을 수 있습니다. 나는 당신이 놓칠지도 모른 중요한 일은 디지털 방식으로 서명되는 품목의 어떤 양상든지 바꾸는 것이 서명을 무효로 할 것이라는 점을 생각한다. 중간에있는 사람은 요청을 다시 제출할 수 있지만 변경하면 서명 유효성 검사가 실패합니다.

+0

만약에 서명이 서버에서 오는 중간 블록에있는 사람, 그리고 클라이언트에 모든 새로운 디지털 서명을 보냅니다 신뢰할 수있는 CA가 발급 한 완전히 유효한 인증서가 있습니까? –

+0

클라이언트가 기존 공개 키를 사용하여 sig의 유효성을 검사하려고하면 실패합니다. 클라이언트가 새로운 시그마를 승인하면 물론 모든 배팅은 꺼져 있으므로 트러스트 체인을 사용하여 인증서를 수락하기 전에 인증서가 신뢰할 수 있는지 확인해야합니다. –