TRY_DECRYPT

TRY_DECRYPT

복호화 중에 오류가 발생하면 NULL 값을 반환하는 DECRYPT의 특수 버전이에요.

출처: Snowflake SQL Reference - TRY_DECRYPT

본문

구문

TRY_DECRYPT( value_to_decrypt , passphrase ,
         [ [ additional_authenticated_data , ] encryption_method ]
       )

인자

필수:

value_to_decrypt 복호화할 BINARY 값이에요.

passphrase 데이터를 암호화/복호화하는 데 사용할 암호구(passphrase)예요. passphrase는 VARCHAR예요.

선택:

additional_authenticated_data 추가 인증 데이터(AAD, additional authenticated data)는 복호화 과정에서 기밀성과 신뢰성이 보장되는 추가 데이터예요. 그러나 이 AAD는 암호화되지 않으며 ENCRYPT 또는 ENCRYPT_RAW 함수의 반환 값에 필드로 포함되지 않아요.

AAD가 암호화 함수(ENCRYPT 또는 ENCRYPT_RAW)에 전달되면 같은 AAD를 복호화 함수(DECRYPT 또는 DECRYPT_RAW)에도 전달해야 해요. 복호화 함수에 전달된 AAD가 암호화 함수에 전달된 AAD와 일치하지 않으면 복호화가 실패해요.

AAD와 passphrase의 차이는 passphrase는 비밀로 유지하려는 것(그렇지 않으면 암호화가 본질적으로 무가치함)인 반면 AAD는 공개로 남겨둘 수 있다는 점이에요. AAD는 공개 정보 조각과 암호화된 값이 서로 연결되어 있음을 인증하는 데 도움을 줘요. ENCRYPT 함수의 예시 섹션에는 AAD가 일치할 때와 일치하지 않을 때의 동작을 보여주는 예시가 있어요.

ENCRYPT_RAW와 DECRYPT_RAW의 경우 AAD의 데이터 타입은 BINARY여야 해요. ENCRYPT와 DECRYPT의 경우 AAD의 데이터 타입은 VARCHAR 또는 BINARY일 수 있으며, 암호화된 값의 데이터 타입과 일치할 필요는 없어요.

AAD는 GCM(기본값) 같은 AEAD 지원 암호화 모드에서만 지원돼요.

encryption_method 이 문자열은 데이터를 암호화/복호화하는 데 사용할 방법을 지정해요. 이 문자열은 하위 필드를 포함해요:

algorithm-mode [ /pad: padding ]

algorithm은 현재 다음으로 제한돼요:

  • AES: passphrase가 전달되면(예: ENCRYPT에) 함수는 AES-256 암호화(256비트)를 사용해요. 키가 전달되면(예: ENCRYPT_RAW에) 함수는 키 길이에 따라 128, 192, 256비트 암호화를 사용해요.

algorithm은 대소문자를 구분하지 않아요.

mode는 메시지를 암호화하는 데 사용할 블록 암호 모드를 지정해요. 다음 표는 지원되는 모드와 그중 어떤 모드가 패딩을 지원하는지 보여줘요:

Mode Padding Description
ECB Yes 각 블록을 키로 개별적으로 암호화해요. 이 모드는 일반적으로 권장되지 않으며 외부 구현과의 호환성만을 위해 포함돼요.
CBC Yes 암호화된 블록이 이전 블록과 XOR된다.
GCM No Galois/Counter Mode는 고성능의 AEAD 지원 암호화 모드예요. AEAD는 AEAD 태그를 생성하여 암호화된 데이터의 신뢰성과 기밀성을 추가로 보장해요. 또한 AEAD는 AAD(추가 인증 데이터)를 지원해요.
CTR No 카운터 모드(counter mode).
OFB No 출력 피드백(output feedback). 암호문이 한 블록의 평문과 XOR된다.
CFB No 암호 피드백(cipher feedback)은 OFB와 CBC의 결합이에요.

mode는 대소문자를 구분하지 않아요.

padding은 길이가 블록 크기의 배수가 아닌 메시지를 어떻게 패딩할지 지정해요. 패딩은 ECB와 CBC 모드에만 적용되며 다른 모드에서는 무시돼요. 가능한 패딩 값은:

  • PKCS: 블록 패딩에 PKCS5를 사용해요.
  • NONE: 패딩 없음. ECB 또는 CBC 모드를 사용할 때 사용자가 패딩을 처리해야 해요.

padding은 대소문자를 구분하지 않아요.

기본 설정: AES-GCM.

mode가 지정되지 않으면 GCM이 사용돼요.

padding이 지정되지 않으면 PKCS가 사용돼요.

반환 값

복호화된 값을 BINARY 값으로 또는 복호화 중 런타임 오류가 발생하면 NULL 값을 반환해요.

사용 시 유의사항 및 예시

사용 시 유의사항과 예시는 DECRYPT 함수를 참고하세요.

더 알아보기 (Learn more)