2010-11-23 6 views
9

현재 간단한 데이터 서명 작업을하고 있습니다. 서명을 처음 사용하는 것이므로 어쩌면 내가 잘못 생각할 수도 있습니다. 그러나 나는 512 비트 RSA와 SHA1 해시를 사용하여 448 바이트를 사인하는 데 4.6 초가 걸리는 것은 정상적인 것이라고 생각하지 않습니다.RSACryptoServiceProvider를 사용하여 서명하는 속도

코드 :

byte[] Data = enc.GetByte(MsgString); //Get Message as byte[] 
//Data is 448 bytes long 

RSACryptoServiceProvider Crypter = new RSACryptoServiceProvider(512); 
Crypter.ImportCspBlob(Convert.FromBase64String(KeyString)); 

byte[] SignedData = Crypter.SignData(Data, "SHA1"); //Line takes 4.6 seconds 

왜 그 느린? 나는 이것을 발견했다 : http://support.microsoft.com/kb/948080,하지만 그게 NET 2.0의 문제. 나는 4.0을 사용하고있다.

오랜 시간이 걸리거나 오류가있는 것이 정상입니까?

도움 주셔서 감사합니다.

+1

어디에서'KeyString'을 얻을 수 있습니까? –

+0

내 가상 컴퓨터에서 Mac OS X 호스트에서 Windows XP 게스트를 실행하는 경우 서명에 눈에 띄는 시간이 필요하지 않습니다. 'Data'는 크기가 메가 바이트이거나'KeyString'은 방대한 RSA 키 또는 둘다를 나타냅니다. –

+0

KeyString은 전에 RSACryptoProvider에서 얻은 문자열입니다. Base64 코딩의 512 비트 키. 그리고 데이터는 확실히 바이트입니다. 그 짧은 문자열. – Marks

답변

-2

암호화 작업이 실행되는 데 시간이 걸리는 이유 중 일부는 사람들이 알고리즘을 강제로 실행할 수 없기 때문입니다. 데이터 서명에 대한 유스 케이스는 무엇입니까? 그것은 빠를 필요가 있습니까? 데이터가 유효한지 또는 암호화해야하는지 간단하게 확인합니까?

당신은 암호화에 대한 심각한 경우에는 탄력이 성 물건을 체크 아웃 할 수 있습니다 : 포인트

http://www.bouncycastle.org/

+4

대답은 아니오이므로 질문과 관련이 없으므로 448 바이트의 데이터에 서명하는 데 거의 오래 걸리지 않아야합니다. –

0

커플 :

1) 나는 또한 호출하여 높은 처리량을 찾았을 SHA1 해시 알고리즘을 직접적으로 전달한 다음 SignData() 메서드 대신 SignHash() 메서드에 전달합니다. SignData() 메소드의 구현 문제인지는 확실치 않지만 내 경험 인 것 같습니다.

byte[] hash = new SHA1Managed().ComputeHash(data); 
byte[] SignedData = Crypter.SignHash(hash, CryptoConfig.MapNameToOID("SHA1")); 

2)이 하나의 메서드 호출에 모두 수행 할 경우 프레임 워크는 문자열 "SHA1")를 통과 할 때 비용이 많이 지연에 기여 할 수 있기 때문에 (조회 작업을 수행하는 필요성을 방지 다음을 대신 사용해보십시오.

byte[] SignedData = Crypter.SignData(Data, new SHA1CryptoServiceProvider()); 
1

SHA1 서명 된 해시를 가져 오는 것과 같은 속도 저하가 발생했음을 알려드립니다. 보통 초 당 수백 건의 트랜잭션에서 수십 만회를 서명 한 일부 코드는 5 초마다 1로 느려졌습니다.

저는 집에서 일하고 있으며 회사 네트워크에 연결되어 있지 않았습니다. 일부 검색 후, 나는 그 범인을 발견 할 수 있었다. NET Framework 2.0에 대한 RSACryptoServiceProvider에 대한 버그가 있습니다.이 코드는 on.Net Framework 4.0과 똑같은 코드입니다.

http://support.microsoft.com/kb/948080에 따르면 내 회사의 도메인 컨트롤러와 통신하려고 시도하는 RSACryptoServiceProvider의 SignData 또는 VerifyData 메서드로 인해 시간이 느려질 수 있으므로 회사에 VPN 연결을 설정하기로 결정했습니다.

이제 5 초 대기하는 대신 SHA1 해시가 즉시 다시 나타납니다.

나는 이것이 해결책이 아니라는 것을 알고 있지만, 적어도 합리적인 해결 방법입니다. 그것은 또한 우리가 우리의 정신을 잃지 못하게합니다.

+1

이 문제가 발생했습니다. 동일한 Microsoft KB를 읽은 후에 SignData 대신 SignHash를 사용했습니다. SignHash에 대한 입력은 데이터의 SHA1 해시 값이어야합니다. 이전 : 'RSACryptoServiceProvider csp = new RSACryptoServiceProvider(); byte [] result = csp.SignData (myData, new SHA1CryptoServiceProvider()); ' Now : 'RSACryptoServiceProvider csp = new RSACryptoServiceProvider(); SHA1Managed sha = 새 SHA1Managed(); 바이트 [] shaHash = sha.ComputeHash (myData); 바이트 [] 결과 = csp.SignHash (shaHash, null);' – CleanUp

관련 문제