나 자신에게 건네주고있는 메시지가 중간자 공격의 대상이됩니다. 그 때문에 메시지를 보내는 시점과 메시지를 다시받는 시점 사이에 유지되는 메시지의 무결성에 대해 우려하고 있습니다.메시지 무결성 유지하기
나에게 메시지를 보내면 보낸 메시지에 대한 정보를 나중에 사용할 수 없다고 가정해야합니다. 메시지는 완전히 독립적입니다.
그 목적을 위해 메시지 내용을 해시하고 메시지를 보내기 전에 해시를 비교해야하며 메시지를 보낸 후에 차이가 있다면 메시지가 변조되었음을 알고 있습니다.
물론 man-in-the-middle이 해시가 실제로 메시지 내용의 해시라는 것을 알고 있다면 메시지가 자체 포함되어 있기 때문에 그는 새로운 내용을 만들 수 있으며 동일한 해시 알고리즘을 내용에 적용하십시오.
질문 : 해시를 생성 할 때 메시지 내용을 임의 화하려면 어떤 길이를 사용해야합니까? 언제 그것은 수익을 줄이는 시점에 도달합니까?
이 시나리오에서는 일련의 키/값 쌍이 있습니다. 이를 위해 내가 취해야 할 조치는 다음과 같습니다.
- 메시지에 소금을 추가하십시오. 소금은 세계 다른 나라의 비밀입니다. 해시되기 전에 메시지의 내용에 첨부됩니다.
- 해시를 생성하기 전에 일관된 방식으로 키/값 쌍을 정렬하십시오.
- 은 직접적으로은 아니지만 재생 공격을 방지하기 위해 해시하기 전에 각 메시지의 내용에 타임 스탬프가 추가됩니다.
- 를 내가 그들을 주문하기 전에 키를 변형 :
이 내가 고려하고 선택적인 단계입니다. 나는 그들을 뒤집어 놓고 count/key로 순서를 매긴다 고 생각했다.
- 키/값 쌍을 구분하는 구분 기호 (키/값의 구분 기호와 쌍의 구분 기호 모두)로 재생합니다.
참고
메시지의 개인 정보 보호 여기 하지 요구 사항, 그래서 암호화를 찾고 있지 않다. 값은 일반 텍스트로으로 전송해야합니다.
마지막으로, 어떤 해싱 알고리즘을 피해야합니까?
구체적인
I는 I 입력 검증 및 지속성을 처리하는 제어기를하는 ASP.NET MVC 사이트를 가지고있다.
입력이 자동 스팸 시도로 판단되면 입력 값을 사용하여 IDictionary<string, string>
모델이 생성되고 ViewResult가 일반 CAPTCHA 페이지로 전송됩니다 (휴리스틱에 따라 중요하지 않음).
CAPTCHA 컨트롤이 포함 된 양식에서 IDictionary<string, string>
의 내용은 숨겨진 입력 필드에 기록되고 양식의 동작은 내용이 처음 게시 된 것과 동일한 동작이됩니다. 이 방법으로 MVC는 양식을 다시 제출할 때 값을 선택할 수 있습니다.
키/값 쌍을 암호화 할 수 없기 때문에 (또는 어쩌면 내가 할 수 있고, 왜, 어떻게 말해?).
물론 해시 된 메시지 내용을 포함하는 값을 하나 더 추가해야합니다. 그 값이 있으면 컨트롤러는 메시지 무결성이 유지되는지 확인하고 입력이 있으면이를 유지합니다.
솔루션
나는 CMS/PKCS # 7 메시지의 signging 및 검증을 나타내는 System.Security.Cyrptography.Pkcs 네임 스페이스의 SignedCms 클래스로 이동하기로 선택했습니다. 이 경우, 지금
http://blogs.msdn.com/shawnfa/archive/2006/02/27/539990.aspx
:
디지털 데이터 서명을 나는 Makecert.exe를 가진 자체 발급 된 인증서를 생성 한 다음 내 코드에서, 내가 여기 예를 사용, 정교한하려면 내 보낸 개인 키의 암호는 물론 서버의 보안을 유지해야 프로그래밍에 대한 부담이 줄어 듭니다.재생 공격을위한 타임 스탬프에 여분의 키를 추가해야하지만 너무 어렵지는 않습니다.
Kalium에 대한 대답은 initial post이 아니지만 디지털 서명 방법을 지적한 후속 의견과 결국 .NET에서이를 활용하는 방법을 찾았습니다.
기여한 모든 분들께 감사드립니다.
@Kalium : 아니요, 메시지 개인 정보는 문제가되지 않으며 조금 과장됩니다. 사실 메시지 투명성이 요구됩니다. – casperOne
메시지 무결성을 보장하는 데 여전히 최상의 옵션 일 수 있습니다. 암호화 할 필요없이 서명 만하면됩니다. 공개 키를 보낼 수도 있습니다. – Kalium
@Kalium :이를 위해 .NET에서 좋은 PGP/GPG 리소스에 대한 링크가 있습니까? 또한 "공유 된 비밀"문제는 무엇입니까? 비대칭 키로 해시에 서명한다는 사실은 비공개 키를 비밀로 만들고 해시 할 데이터를 다르게 정렬해야 할 필요성을 없애 줍니까? – casperOne