2010-03-02 2 views
5

앨리스와 밥이 있다고 가정 해 보겠습니다.양방향 비대칭 암호화는 어떻게 작동합니까?

앨리스는 밥의 공개 키로 암호화 한 메시지를 밥에게 보냅니다. Bob은 개인 키를 사용하여 해독 할 수있는 유일한 사람입니다. 그러나 그 메시지가 앨리스에게서 온 것인지 어떻게 확신 할 수 있습니까?

그가 대답하고, Alice의 공개 키를 사용하여 메시지를 암호화한다고 가정합니다. Alice 만 메시지를 해독 할 수 있습니다. 그러나 Bob이 보낸 것이 확실 할 수 있습니까?

앨리스는 메시지에 공개 해시를 추가해야합니다. 그래서 Bob은 "이것은 분명히 앨리스에서 온 것입니까?"라고 말할 수 있습니다.

답변

5

Bob에게는 Alice의 공개 키도 있고 Alice는 개인 키로 메시지에 서명했습니다. Bob은 Alice의 공용 키를 사용하여 서명을 확인합니다.

앨리스가 Bob의 메시지인지 확인하기 위해 역으로 진행합니다.

지금해야 할 일은 밥이 앨리스의 실제 공개 키를 가지고 있고 중간에 사람이 주입 한 것이 아닌지 확인하는 것입니다.

+0

공개 키의 모든 바이트를 확인해야합니까? 당신이 볼 수있는 열쇠의 특정 부분이 당신 사이의 실제인지 확인합니까? 지문이 일치 할만큼 충분한가요? – tbarbe

+1

아니요, 공개 키를 사용하여 메시지의 해시 (서명)를 해독 한 다음 메시지를 직접 수신자로 해시합니다. 해시가 일치하면 Alice가 보낸 해시를 알 수 있습니다. http://en.wikipedia.org/wiki/Digital_signature – Nathan

+0

아, 예 ... md5 또는 SHA-1 - 예? 그래서 일단 인증서가 목적지에 도착하면 - 그 모든 것을 확인하는 방법은 md5와 SHA-1을 비교하는 것입니다 .... 제가 가지고있는 인증서는 -이 두 가지를 모두 보여줍니다 ...그리고 나는 이것이 '밴드 밖에서 그들을 비교하는 것'에 대해 읽고있는 것을 짐작할 수 있습니다 - 의미는 불안정한 환경에서 그것을하지 않습니까? – tbarbe

-1

개인 키가 실제로 "개인"이라고 가정하기 때문에 --i.e., alice와 bob은 직장을 떠날 때 usb 키를 컴퓨터에 꽂아 두지 않습니다.

+0

그 가정은 어디에서 만들었습니까? – Amy

+0

"너"하지 않았다, 나는 속담 "너"를 의미했다; 인증 기관이 간접적 인 인스턴스 인 Alice와 Bob간에 트러스트 채널이 없다면 이러한 종류의 암호화를 사용하지 마십시오. Peh, 나는 너의 질문에 나의 upvote을 제거 할 수 없다. –

+0

나는 네가 무엇을 얻고 있는지 전혀 모른다. 문제는 메시지의 출처를 확인하는 것이 었습니다. 질문의 마지막 문장을 다시 읽고 답이 문제를 해결하지 못했음을 확인하십시오. 이것은 키를 안전하게 유지하는 것과 관련이 없습니다. 내 의견에 대한 귀하의 회신은 그 문제를 해결하지 못했습니다. 왜 대답하셨습니까? – Amy

9

당신이 묘사하는 시나리오는 진정으로 진실성을 제공하지 않습니다. 그래서 Alice와 Bob은 서로 이야기하는 것을 확신 할 수 없습니다. 시나리오는 기밀성만을 제공하며 기밀성도 제공하지 않습니다.

Bob은 수동으로 앨리스의 공개 키라고 생각하는 공개 키를 확인해야합니다 (그녀에게 전화를 걸어로드를 읽고 음성으로 앨리스임을 확인).

이 문제는 일반적으로 신뢰할 수있는 제 3 자 (예 : VeriSign과 같은 인증 기관)에서 해결됩니다. 앨리스는 실제로이 특정 공개 키의 소유자입니다. 이것이 최신 브라우저에서 해결되는 방식이며 이것이 모든 SSL 세션 (선택한 은행과 함께) 작동 방식입니다. 인증 기관이 은행의 인증서에 서명하고 (귀하의 은행이 인증서에 포함 된 공개 키의 소유자임을 나타냄) 브라우저에 인증 기관의 인증서가 이미 내장되어 있습니다 (인증 할 수있는 인증서 체인 구축).

시나리오는 소위 MITM (Man-in-the-middle) 공격에 취약하며 공개 키 암호화만으로는 해결할 수 없습니다.

1

당신이 말하는 것은 매우 매우 느슨하게 .Net 프레임 워크에서 발견되는 비대칭 암호화 알고리즘의 다른 구현처럼 보입니다.

.Net은 비대칭 암호화를 위해 두 개의 분기를 사용합니다.

  1. RSA ** 모든 비대칭 엔코더에 사용되는 그랜드 맥 아빠.
  2. DSA ** 저자를 확인하기 위해 디지털 서명을 사용하고 생성하는 것과 관련이 있습니다.

모두

모두가 어떻게 작동하는지에 대한 방법과 개발자가이를 구현하지만, 아래에 내가 매우 다른 두 가지 알고리즘이 존재 함을 읽고으로 서로 매우 비슷 추상이다. 당신은 옵션을 이야기

2.

닷넷은 일반적으로 서명으로 불린다 값으로 데이터를 태그 할 수 있습니다 DSACryptoServiceProvider라는 클래스를 제공합니다.

MS 공식 과정 교과서에 따르면 대략 어떻게 작동하는지 heres.

데이터 >>> 해시 Δ1g의 >>> 해시 값 >>>>>>>>> Asymm 'Δ1g의 >>>> 보낸 사람의 PVT.KEY >>> 아래

밥 확인하는 방법을 보여줍니다 서명 Alice가 실제로 발신자인지 확인합니다.

데이터 >>> 해시 알 >>> 해시 값 || 해독 서명 < < < Asymm 'Δ1g의 < < < 서명 < < < 보낸 사람의 PUB.KEY ? ==?

보시다시피 Bob은 Alice가 발신자인지 확인하기 위해 생성 된 해시 및 해독 된 서명 을 비교해야합니다. DSACrypto '클래스에는 여기에 을 사용할 수있는 4 가지 방법이 있지만 상황에 맞는 두 가지 방법 만 사용할 수 있습니다. 이 시점에서 Bob이 할 수있는 모든 것입니다. 공개 키가 alice의 공개 키가 아니라면 본질적으로 소프트웨어 응용 프로그램은 Bob이 궤도에서 더 이상 진행하지 못하게해야합니다. Bob은 밥이 가짜 공개 키를 사용하려고 할 때 앨리스와 의사 소통하려고합니다. 이것은 부과 된 관계이며 공개 키의 중요성을 강조합니다. 서명을 사용하면 공개 키 소유자를 확인할 수 있습니다.

여기 왜? ::

Bob이 Alice의 공개 키를 가지고 있다면 .VerifyHash 또는 VerifyData 메서드를 사용하여 암호화 된 데이터를 다시 해독하기 위해 동일한 알고리즘을 사용할 수 있습니다. 이 상황에서 그들이하는 일을 솔직하게해야합니다. 이것은 Alice의 공개 키를 사용하여 모두 완료됩니다. Alice만이 Alice의 개인 키가 필요하므로 SignHash 및 SignData 메서드를 사용할 수 있습니다.

위에서 알 수 있듯이 특정 수준의 기능이 이미 DSA 및 RSA CryptoServiceProvider 클래스에 캡슐화되어 있습니다. DSA 알고리즘으로 생성 된 결과를 일치시켜 보낸 사람을 인증 할 수 있으므로 매번 Alice를 보낸 사람으로 확인하기 위해 구현하는 방법이 무엇인지 파악해야합니다. 본질적으로 DSA가 Bob과 Alice 사이에 일정 수준의 기밀을 부여한 경우 특정 서명과 해시가 일치해야합니다.

+0

70-536 시험에 합격하고자하는 학생에게서 오는 의미가되기를 바랍니다. 위의 두 답변 중 두 번째는 내가 여기에 게시 된 스택 오버플로에 관한 암호화. – IbrarMumtaz

관련 문제