DecryptMessage(일반) 함수
DecryptMessage(일반) 함수는 메시지의 암호를 해독합니다. 일부 패키지는 메시지를 암호화 및 암호 해독하는 것이 아니라 무결성 해시를 수행하고 검사.
다이제스트 SSP( 보안 지원 공급자 )는 클라이언트와 서버 간에 교환되는 메시지에 대한 암호화 및 암호 해독 기밀성을 SASL 메커니즘으로만 제공합니다.
이 함수는 Schannel SSP와 함께 연결 특성의 재협상(다시 실행) 또는 연결 종료를 위해 메시지 보낸 사람의 요청에 신호를 보내는 데도 사용됩니다.
참고
한 스레드가 암호화되고 다른 스레드가 암호를 해독하는 경우 EncryptMessage(일반) 및 DecryptMessage(일반)는 단일 SSPI(보안 지원 공급자 인터페이스) 컨텍스트의 두 스레드에서 동시에 호출할 수 있습니다. 둘 이상의 스레드가 암호화 중이거나 둘 이상의 스레드가 암호를 해독하는 경우 각 스레드는 고유한 컨텍스트를 가져와야 합니다.
특정 SSP에서 이 함수를 사용하는 방법에 대한 자세한 내용은 다음 topics 참조하세요.
항목 | Description |
---|---|
DecryptMessage(다이제스트) | 다이제스트를 사용하여 메시지의 암호를 해독합니다. |
DecryptMessage(Kerberos) | Kerberos를 사용하여 메시지의 암호를 해독합니다. |
DecryptMessage(협상) | Negotiate를 사용하여 메시지의 암호를 해독합니다. |
DecryptMessage(NTLM) | NTLM을 사용하여 메시지의 암호를 해독합니다. |
DecryptMessage(Schannel) | Schannel을 사용하여 메시지의 암호를 해독합니다. |
구문
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
매개 변수
-
phContext [in]
-
메시지의 암호를 해독하는 데 사용할 보안 컨텍스트 에 대한 핸들입니다.
-
pMessage [in, out]
-
SecBufferDesc 구조체에 대한 포인터입니다. 입력 시 구조체는 하나 이상의 SecBuffer 구조를 참조합니다. 이 중 하나는 SECBUFFER_DATA 형식일 수 있습니다. 해당 버퍼에는 암호화된 메시지가 포함됩니다. 암호화된 메시지는 현재 위치에서 암호 해독되어 버퍼의 원래 내용을 덮어씁니다.
다이제스트 SSP를 사용하는 경우 입력 시 구조체는 하나 이상의 SecBuffer 구조를 참조합니다. 이 중 하나는 SECBUFFER_DATA 또는 SECBUFFER_STREAM 형식이어야 하며 암호화된 메시지를 포함해야 합니다.
연결 지향이 아닌 컨텍스트와 함께 Schannel SSP를 사용하는 경우 입력 시 구조체에 4개의 SecBuffer 구조체가 포함되어야 합니다. 정확히 하나의 버퍼는 SECBUFFER_DATA 형식이어야 하며 암호화된 메시지를 포함해야 합니다. 이 메시지는 암호가 해독됩니다. 나머지 버퍼는 출력에 사용되며 SECBUFFER_EMPTY 형식이어야 합니다. 연결 지향 컨텍스트의 경우 연결 지향이 아닌 컨텍스트에 대해 설명한 대로 SECBUFFER_DATA 형식 버퍼를 제공해야 합니다. 또한 보안 토큰을 포함하는 두 번째 SECBUFFER_TOKEN 형식 버퍼도 제공해야 합니다.
-
MessageSeqNo [in]
-
전송 애플리케이션에 필요한 시퀀스 번호(있는 경우)입니다. 전송 애플리케이션에서 시퀀스 번호를 유지하지 않는 경우 이 매개 변수를 0으로 설정해야 합니다.
다이제스트 SSP를 사용하는 경우 이 매개 변수를 0으로 설정해야 합니다. 다이제스트 SSP는 내부적으로 시퀀스 번호 매기기를 관리합니다.
Schannel SSP를 사용하는 경우 이 매개 변수를 0으로 설정해야 합니다. Schannel SSP는 시퀀스 번호를 사용하지 않습니다.
-
pfQOP [out]
-
보호 품질을 나타내는 패키지별 플래그를 수신하는 ULONG 형식의 변수에 대한 포인터입니다.
Schannel SSP를 사용하는 경우 이 매개 변수는 사용되지 않으며 NULL로 설정해야 합니다.
이 매개 변수는 다음 플래그 중 하나일 수 있습니다.
값 의미 SECQOP_WRAP_NO_ENCRYPT 메시지는 암호화되지 않았지만 헤더 또는 트레일러가 생성되었습니다.
참고: KERB_WRAP_NO_ENCRYPT 값과 의미가 동일합니다.- SIGN_ONLY
다이제스트 SSP를 사용하는 경우 보안 컨텍스트 가 서명 만 확인하도록 설정된 경우 이 플래그를 사용합니다. 자세한 내용은 보호 품질을 참조하세요.
반환 값
함수가 메시지가 올바른 순서로 수신되었는지 확인하면 함수는 SEC_E_OK 반환합니다.
함수가 메시지의 암호를 해독하지 못하면 다음 오류 코드 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
|
메시지 버퍼가 너무 작습니다. 다이제스트 SSP와 함께 사용됩니다. |
|
보안 컨텍스트에 대해 선택한 암호는 지원되지 않습니다. 다이제스트 SSP와 함께 사용됩니다. |
|
입력 버퍼의 데이터가 불완전합니다. 애플리케이션은 서버에서 더 많은 데이터를 읽고 DecryptMessage(일반) 를 다시 호출해야 합니다. |
|
유효하지 않은 컨텍스트 핸들이 phContext 매개 변수에 지정되었습니다. Digest 및 Schannel SSP와 함께 사용됩니다. |
|
버퍼가 잘못된 형식이거나 SECBUFFER_DATA 형식의 버퍼가 없습니다. Schannel SSP와 함께 사용됩니다. |
|
메시지가 변경되었습니다. Digest 및 Schannel SSP와 함께 사용됩니다. |
|
메시지가 올바른 순서로 수신되지 않았습니다. |
|
기밀성이나 무결성 은 보안 컨텍스트에서 지원되지 않습니다. 다이제스트 SSP와 함께 사용됩니다. |
|
메시지 보낸 사람 연결 사용을 완료 하 고 종료를 시작 했습니다. 종료를 시작하거나 인식하는 방법에 대한 자세한 내용은 Schannel 연결 종료를 참조하세요. Schannel SSP와 함께 사용됩니다. |
|
원격 파티에는 새 핸드셰이크 시퀀스가 필요하거나 애플리케이션이 종료를 방금 시작했습니다. 협상 루프로 돌아가 서 AcceptSecurityContext(일반) 또는 InitializeSecurityContext(일반)를 호출하여 빈 입력 버퍼를 전달합니다. 함수가 SEC_BUFFER_EXTRA 형식의 버퍼를 반환하는 경우 AcceptSecurityContext(일반) 함수에 입력 버퍼로 전달되어야 합니다. Schannel SSP와 함께 사용됩니다. Schannel 커널 모드에는 재협상이 지원되지 않습니다. 호출자는 이 반환 값을 무시하거나 연결을 종료해야 합니다. 값이 무시되면 클라이언트 또는 서버가 결과적으로 연결을 종료할 수 있습니다. |
설명
Schannel SSP를 사용하면 메시지 발신자가 연결을 종료하면 DecryptMessage(일반) 함수가 SEC_I_CONTEXT_EXPIRED 반환합니다. 종료를 시작하거나 인식하는 방법에 대한 자세한 내용은 Schannel 연결 종료를 참조하세요.
Schannel SSP를 사용하면 메시지 발신자가 연결(보안 컨텍스트)을 재협상하려고 할 때 DecryptMessage(일반)가 SEC_I_RENEGOTIATE 반환합니다. 애플리케이션은 AcceptSecurityContext(일반) ( 서버 쪽) 또는 InitializeSecurityContext(일반)( 클라이언트 쪽)를 호출하고 빈 입력 버퍼를 전달하여 요청된 재협상을 처리합니다. 이 초기 호출이 값을 반환한 후 애플리케이션이 새 연결을 만드는 것처럼 계속 진행합니다. 자세한 내용은 [Schannel 보안 컨텍스트 만들기](creating-an-schannel-security-context.md)를 참조하세요.
GSSAPI와의 상호 운용에 대한 자세한 내용은 GSSAPI와 SSPI/Kerberos 상호 운용성을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 |
Windows Server 2003 [데스크톱 앱만 해당] |
헤더 |
|
라이브러리 |
|
DLL |
|
추가 정보