2012-05-29 5 views
0

마이크로 소프트 says :CryptEncrypt()는 스레드로부터 안전한가요?

CryptEncrypt 함수가 스레드 안전이 보장되지 않고 여러 호출자에 의해 동시에 호출하면 잘못된 결과를 반환 할 수 있습니다

.

이것은 함수가 전역 데이터를 수정한다는 것을 의미합니까?
또는 단순히 동일한 해시/키를 동시에 사용할 수 없다는 뜻입니까?

내가 당신이 기능은 공유 주소 공간을 사용하기 때문에 그것을 사용하는 동시에 여러 프로세스를 포크 할 수 없음을 의미합니다 생각

답변

1

의미는 다음과 같습니다. 은 thread-safe가 보장되지 않습니다.. 내부 정적 (또는 전역) 상태 일 가능성이 있지만 구현 세부 사항입니다.

동일한 해시 또는 키를 사용하는지 여부는 관련이 없습니다. 댓글을


편집 : this MSDN page에 따른 CryptoAPI를 키 핸들 때문에 내부 키 상태의 스레드 안전하지 :

대부분의 알고리즘 및 모드는 그 데이터를 필요로 동일한 순서 것을 해독 할 그것은 암호화되었습니다. 중요한 섹션을 사용하면 주문 문제를 해결할 수 없으므로 다중 스레드 환경에서이 작업은 어려운 작업입니다. ECB 암호 모드에서 블록 암호 (즉, RC2, DES 또는 3DES)를 사용하는 경우 내부 키 상태가 변경되지 않기 때문에이 문제는 중요하지 않습니다. 그러나 ECB는 기본 암호 모드가 아닙니다. CBC가 기본 암호 모드입니다. CBC 암호화 모드를 사용하면 내부 키 상태가 변경됩니다.

그래서 결국, 그것은 것 은 동일한 키를 공유하지 않는 경우에 당신이 참으로 여러 스레드에 CryptEncrypt를 사용할 수 있다고 생각하는 것이 합리적인 것 같다. 하지만 이것은 단지 추측 일뿐입니다.

+0

청구서를 확인하는 데 아무런 문제가 없습니까? (나도 짐작할 수 있었지만 좀 더 구체적인 것을 기대했다 ...) – Mehrdad

+0

거기있다 :) –

+0

아, 이제 * 멋진 소식이다. :-) 고마워, 많이 설명해. +1 – Mehrdad

0

(즉, 아래 맞습니까? 코멘트입니다). 모든 스레드의 메모리에 액세스 할 수 있으므로 예기치 않은 결과가 발생할 수 있습니다. 응용 프로그램에서 멀티 스레딩을 수행하는 경우에만이 문제가 발생합니다.

+1

... fork 프로세스입니까? Win32에서? – Mehrdad