2012-05-15 4 views
9

누군가 내 마음을 쉬게하고이 설정으로 파일이 나에게서 왔는지 확인할 수 있습니까? 이것이 얼마나 안전한지와 잠재적 인 공격 경로에 대한 아이디어.안전한 DSA 서명

  1. DSACryptoServiceProvider를 사용하여 공용 및 개인 키를 만듭니다.
  2. 확인 해시가 (/ 차단 변경 될 수 있습니다 이러한 추정)
  3. 가 갱신
  4. 개인 키
  5. 보내기 해시 및 응용 프로그램에 대한 업데이트를 사용 업데이트 DSA 해시를 얻기 만들기 응용 프로그램 리소스로 공개 키를 추가 공개 키를 사용하여 정정하십시오. 경우 확인
  6. 는 업데이트가 exe 인 내가 누군가 대체 또는 함께을 조작하는 경우는 실행되지 것 있는지 확인하려면 이렇게 실행됩니다 업데이 트를

을 적용합니다.

편집 : 공개 키로 포인트 6을 업데이트해도 실제로 해시가 생성되지 않고 확인 만됩니다. 나는 이것이 내가 안전에 어려움을 겪고있는이 부분이라고 생각한다.

+2

당신이 개인 키로 해쉬하지 않는다는 것을 제외하고는 정확히 맞는 알고리즘입니다. 해시를 생성 한 다음 개인 키로 hash_를 암호화하십시오. 받는 사람은 _ public 키를 사용하여 해시를 해독하고 확인합니다. 또한 개인 키가 격리 된 매체 (USB 키 또는 네트워크로 연결되지 않은 컴퓨터)에 있다고 가정합니다. :-) 개인 키는 비밀로 유지해야하지만 다른 모든 구성 요소 (업데이트, 해시 및 공개 키)는 안전하게 보관할 필요가 없습니다. –

+0

감사합니다 아담, 그냥 실종 된 것 같아요 몇 가지 포인트 중. 개인 키없이 DSACryptoProvider에서 해시를 얻으려면 어떻게해야합니까? 해시 = DSACryptoServiceProvider.fromxmlstring (privatekey) .signdata (fileToGetHashFrom) - 두 번째 지점을 생각했습니다. 나는 DSA로 데이터를 암호화 할 수 있다고 생각하지 않았습니다. 다른 것을 사용해야합니까? 또한 공개 키로 데이터를 암호화하고 개인 키로 해독하지 마십시오. 이 경우 내 열쇠가 틀렸어? 내가 바보 일 경우 미안 해요 ;-) – Oli

+2

@Oli 디지털 서명을 만드는 것은 종종 1) 서명 할 데이터의 해시 생성, 2) 서명 된 데이터 해시 생성, 공개 키를 사용하여 검증 될 수 있고 위조 될 수없는 방식으로 개인 키를 생성합니다. 생성/검증 프로세스의 단방향 특성은 암호화/복호화와 유사하지만 "역순으로"공용 및 개인 키만 사용합니다. 'DSACryptoServiceProvider'는 여러분이 논평 한 방식대로 모든 세부 사항들을 처리 할 것입니다,하지만 저는 Adam의 요점은 개인 키 자체가 해시를 생성하는 데 사용되지 않는다는 것입니다. – shambulator

답변

1

당신의 접근 방식은 좋아 보인다. 남아있는 질문은 클라이언트에서 응용 프로그램이 얼마나 안전한지입니다. 실행 파일을 누군가가 조작 할 수있는 기회가 있습니까? 어쩌면 애플리케이션 리소스에서 공개 키를 전환 할 수 있습니까?

여기서는 이론적으로 다가 오지만, 6 단계의 작은 수정을 제안합니다. 사용하려는 정확한 공개 키를 지정하십시오. 일부 공격자가 응용 프로그램 자원에서 키를 전환 할 수있는 경우 다른 개인 키에 대한 올바른 해시가 포함 된 변경된 패키지를 보낼 수 있습니다. 침입자가 이미 소프트웨어를 수정 한 이후로 이는 사소한 우려 일 수 있습니다. 그러나 그가 응용 프로그램 자원 만 대체 할 수 있으면 다른 사람은 응용 프로그램이 자신의 악의적 인 코드로 자신을 업데이트 할 수있는 능력을 갖지 못합니다.

관련 문제