2011-04-19 3 views
6

저는 암호화 세계에 초보입니다. 아래 제공된 데이터에서 해당 RSA 개인 키를 생성해야합니다.암호 : Modulus & Exponent를 사용한 RSA 비공개 키 생성

Modulus B87BDAB530F8FDED78223D841C5D4E66A6CA86E1D690E829755F244B6FA64D0B8FFBB33AC46FE533568FD6A965EDE7AFFAED8B15476E7B70D637188B8E6B78FDAE17941E7A1304699405F94FD8E596A2BA1CA57D413E96F6E9A3F7585EEF156E8220E7C45DCB48C6CC667AC52E521444225DD6F5611CE8C14DF680C291CFDFE5 

Modulus 
(Base 64) uHvatTD4/e14Ij2EHF1OZqbKhuHWkOgpdV8kS2+mTQuP+7M6xGlM1aP1qll7eev+u2LFUdue3DWNxiLjmt4a4XlB56EwRplAX5T9jllqK6HKV9QT6W9umj91he7xVugiDnxF3LSMbMZnrFLlIURCJd1vVhHOjBTfaAwpHP3+U= 

Private Exponent 84920445868EB73309CC593671879F8A66BB4D18472F54964E50F36CFE2B9C5BFDB8DB4014DF6FEE677AEFC0458E239B338FB60DB18A344C8EB38300EE744EB98B2606AC4781C4C9317B0289F41D7E92C927639E699D0E903B5160D9AEBFD70C1D6EBA539774459B95107E60941B22EECD54F7D0C8DE47DA7719C33FD4DB9155 

Private Exponent (Base 64) hJIERYaOtzMJzFk2cYefima7TRhHL1SWTlDzbP4rnFv9uNtAFN9v7md678BFjiObM4+2DbGKNEyOs4MA7nROuYsmBqxHgcTJMXsCifQdfpLJJ2OeaZ0OkDtRYNmuv9cMHW66U5d0RZuVEH5glBsi7s1U99DI3kfadxnDP9TbkVU= 

Public Exponent 010001 

Public Exponent (Base 64) AQAB 

다음을 사용하여 RSAPrivateKey를 생성했지만 키가 올바르지 않습니다.

char *szModulus = "B87BDAB530F8FDED78223D841C5D4E66A6CA86E1D690E829755F244B6FA64D0B8FFBB33AC46FE533568FD6A965EDE7AFFAED8B15476E7B70D637188B8E6B78FDAE17941E7A1304699405F94FD8E596A2BA1CA57D413E96F6E9A3F7585EEF156E8220E7C45DCB48C6CC667AC52E521444225DD6F5611CE8C14DF680C291CFDFE5" ; 
    char *szExp = "84920445868EB73309CC593671879F8A66BB4D18472F54964E50F36CFE2B9C5BFDB8DB4014DF6FEE677AEFC0458E239B338FB60DB18A344C8EB38300EE744EB98B2606AC4781C4C9317B0289F41D7E92C927639E699D0E903B5160D9AEBFD70C1D6EBA539774459B95107E60941B22EECD54F7D0C8DE47DA7719C33FD4DB9155" ; 
    char *szPubExp = "010001" ; 


    RSA* rsa = RSA_new(); 

    int ret = BN_hex2bn(&rsa->n,szModulus) ; 
    ret = BN_hex2bn(&rsa->d,szExp) ; 
    ret = BN_hex2bn(&rsa->e,szPubExp) ; 

if (!PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, 0, NULL)) 
    { 
     printf("\n PEM_write_PrivateKey failed \n") ; 

    } 
/**/ 
+0

숙제와 같은 소리 – Tobias

답변

3

모듈러스 및 개인 지수 적어도 간단한 방법으로 개인 키이다.

RSA에서는 모듈의 두 개 (또는 그 이상) 소수 요소와 같은 몇 가지 다른 매개 변수를 개인 키에 포함시키는 것이 일반적입니다. 이러한 추가 매개 변수는 전력 인 (계수 및 개인 지수는 서명을 계산하고 데이터를 해독하기에 충분하지만 더 빠른 구현을 허용합니다 (3 배에서 4 배까지))을 제공하지 않습니다.

따라서 위의 정보를 고려할 때 질문은 계수의 소수 요소를 복구하는 것이 좋습니다. 제네릭 방법은 Handbook of Applied Cryptography, 8 장, 8.2.2 단락 (i) ("인수 분해와의 관계"), 287 페이지에 나와 있습니다.

+0

문서별로 당연히 개인 키를 생성 할 수 있습니다 모듈러스, 개인 지수 및 공개 지수. 위 코드 스 니펫을 게시했습니다. 그러나 올바른 키를 얻지 못합니다. – Amit

+0

코드가 작동합니다 : 단순 형식 (모듈러스 및 개인 지수 만 포함하는 형식)을 따르는 개인 키가 생성됩니다. 좀 더 일반적인 형식을 원한다면'RSA' 구조체에'p','q','dmp1','dmq1','iqmp'와 같은 추가 값을 채워야합니다. 이 값은 내가 대답하는 방법을 사용하여 다시 계산할 수 있습니다. –

+0

토마스에게 올바른 방향을 가르쳐 주셔서 감사합니다. 날 소수 (prime number)를 구할 수있는 실제 코드 (C/Java/.NET)를 가르쳐 주시겠습니까? – Amit

관련 문제