2016-12-12 7 views
0

내가 가입하고이를 위해 RSACryptoServiceProviderRSACryptoServiceProvider 공개/개인 키 가져 오기

를 통해 데이터를 확인하려면, 나는 공개 키와 개인 키가 필요합니다.

내 프로젝트에서 MyPublic 및 Private 키를 XML 파일에 저장합니다.

한 시간, 나는 MyPublic 키와 개인 키 위에서

public bool SignutureCheckForVerify(string myData, byte[] SignedData) 
    { 
     ... 

     RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); 
      RSAalg.FromXmlString(MyPublicKey()); 
     return RSAalg.VerifyData(Encoding.ASCII.GetBytes(myData), new MineCryptoService(), SignedData); 

     ... 

    } 

    private static string MyPublicKey() 
    { 
     return "<RSAKeyValue><Modulus>-----Pubic Key Here ----</RSAKeyValue>"; 
    } 

, 나는 "데이터를 통해 공개 키 확인"

내 SignData 방법이 유사하다는 것을 보여 주었다 생성합니다. 거기에서

,

RSAalg.FromXmlString(GetPrivateKey()); 
    ... 
    RSAalg.SignData(...) 

내 질문시 그; 어떤 예를 들자면, 나는 그것을 인식했다. 공개 키와 개인 키는 crt/pem/cert 등의 인증서 파일을 통해 가져옵니다. 거기에 XML 파일을 저장했습니다.

© 내 솔루션이 잘못 되었나요?

그 두 번째 질문,

내가 키

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

GetKeyFromContainer ("MyKeyContainer")를 가져올이 방법을 사용하는 경우

;

IS MyKeyContainer 개인 키와 공개 키가 정적입니까? 각 실행에서

, 나는 같은 개인 키/공개 키

각 실행 내가 다른 키 설정을 할 수 있습니까? 강조 표시된 텍스트

답변

0

내 솔루션이 잘못 되었습니까?

요구 사항과 위협 모델에 따라 다릅니다. RSACryptoServiceProvider의 서명 생성은 MD5 또는 SHA-1 이외의 해시로 명시 적으로 설정되어야합니다. 이것이 일어 났는지 여부는 귀하의 질문에서 분명하지 않습니다.

내가 키

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

GetKeyFromContainer("MyKeyContainer");

정적 MyKeyContainer 개인 키와 공개 키인가를 가져올이 방법을 사용하는 경우?

그렇습니다. 어쨌든 키 저장소를 사용하는 일반적인 아이디어입니다.

각 실행시 동일한 개인 키/공개 키를 사용할 수 있습니까? 아니면 서명을 생성 할 때마다 다른 키를 설정해야합니까?

예, 충분한 키 크기 (예 : 2048 비트 이상)를 사용할 수 있습니다.


사실, 당신의 솔루션을 신뢰 공개 키 수신기의 요구를 안전하려면. 신뢰가 설정되지 않으면 누구도 대신 자신의 공개 키를 보낼 수 있습니다.

+0

당신의 대답에 많은 시간을 할애합니다. XML 파일을 저장하여 키를 저장하는 것은 어떻습니까? 그리고 XML의 Storege와 인증서 파일의 저장에 대한 차이점은 무엇입니까? 너 나 좀 도와 줄 수있어? –

+0

XML은 Microsoft의 독점적 인 저장소로 사용됩니다. 인증서에 공개 키를 저장하면 인증서에 추가 데이터를 저장할 수 있습니다. 인증서는 개인 키로 "자체 서명"되거나 PKI를 만들 수있는 인증 기관 (또는 PGP의 경우 "누구든지")이 서명 할 수 있습니다. 주제 "키 관리"는 엄청납니다. StackOverflow를 뛰어 넘어 모든 옵션과 특정 선택의 의미를 논의합니다. –

+0

@MaartenBodewes RSACryptoServiceProvider는 알고리즘을 인수로 요구합니다. SHA-1을 기본값으로 사용한다는 것은 무엇을 의미합니까? (OAEP의 경우 SHA-1 만 지원하지만 암호화는 서명이 아닙니다.) – bartonjs