2017-10-01 8 views
5

에 사용자 정의 된 지수를 사용하여 2048 RSA 키 쌍을 생성 할 수 있습니까?사용자 지정 지수 크기로 2048 키를 생성 하시겠습니까?

new RSACryptoServiceProvider(2048); // = 65537 always 

예를 들어, 나는 65535에 지수를 설정하려면,하지만 하드 코딩 된 값은 65537 것 같다.

둘러 보았지만 정보를 찾을 수 없습니다.

새 키 을 생성하려고합니다. RSACryptoServiceProvider을 사용하여 기존 키를 가져 오지 마십시오.

이미 존재하는 키를 가져 오면 모듈, 지수 및 기타 요인을 정의 할 수 있다는 것을 알고 있습니다.

그럴 수 없다면 어떤 대안을 사용할 수 있습니까?

+1

NIST에는 65537이 필요합니다. http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-78-4.pdf 좋은 배경 지식 [여기에 있습니다.] (https://crypto.stackexchange.com/a/3113) –

+0

@HansPassant 나는 클라이언트/서버를 C++에서 C#으로 이식하고 있으며 클라이언트는 현재 65535 만 사용하여 모든 클라이언트 변형을 업데이트 할 확신이없는 공개 키를받습니다. – Guapo

+0

음, ImportParameters()가 키입니다. 답의 코드가 Reverse()를 너무 많이 사용하고있을 수도 있습니다. –

답변

0

확실하지 않은 경우 도움이 될 경우.

매개 변수를 익스프 트하고 변경 한 다음 가져올 수 있습니다. RSACryptoServiceProvider에는 ExportParameters 및 ImportParameters 메서드가 있습니다.

public static class RsaCryptoServiceProviderExtension 
{ 
    public static void SetExponent(this RSACryptoServiceProvider provider, int exponent) 
    { 
     var rsaParams = provider.ExportParameters(true); 

     var expBytes = BitConverter.IsLittleEndian 
      ? BitConverter.GetBytes(exponent).Reverse() 
      : BitConverter.GetBytes(exponent); 

     rsaParams.Exponent = expBytes.Skip(1).ToArray(); 

     provider.ImportParameters(rsaParams); 
    } 
} 

다음 :

 var rsa = new RSACryptoServiceProvider(2048); 
     rsa.SetExponent(65535); 
     ... 
+0

메시지가 "Bad Key"로 표시됩니다. – Guapo

+0

@Guapo Im은 주제에 대해 경험이 없으므로 더 이상 조언을받을 수 없습니다. 죄송합니다. –

0

당신은 Bouncy Castle 암호화 라이브러리를 사용할 수 있습니다 그래서 같은 확장 방법을 쓸 수 있습니다. 공개 RSA 지수를 설정하려면 RsaKeyGenerationParameters을 사용하여 키 생성에 RsaKeyPairGenerator 클래스를 사용하십시오. 키 쌍 생성 예제는 here을 참조하십시오. 그러나 지수의 선택에주의를 기울이십시오. 공용 RSA 지수는 Fermat Number이어야합니다. 지수 선택에 대한 자세한 내용은 질문 Impacts of not using RSA exponent of 65537을 참조하십시오.

인증서 생성에 대한 유용한 게시물 Using Bouncy Castle from .NET도 참조하십시오. 귀하의 편의를 위해 Bouncy Castle 인증서를 생성하고 .NET X509Certificate2 개체로 변환 할 수 있습니다.

업데이트 :

내가 RSACryptoServiceProvider를 사용하여와 this question의 예 당신을 도울 수있다 생각합니다.