TRY_DECRYPT_RAW

TRY_DECRYPT_RAW

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

출처: Snowflake SQL Reference - TRY_DECRYPT_RAW

본문

구문

TRY_DECRYPT_RAW( value_to_decrypt , key , iv ,
         [ [ [ additional_authenticated_data , ] encryption_method , ] aead_tag ]
       )

인자

필수:

value_to_decrypt 복호화할 이진(binary) 값이에요.

key 데이터를 암호화/복호화하는 데 사용할 키예요. 키는 BINARY 값이어야 해요. 키는 길이만 맞으면 어떤 값이든 될 수 있어요. 예를 들어 AES128의 경우 키는 128비트(16바이트), AES256의 경우 키는 256비트(32바이트)여야 해요.

값을 암호화하는 데 사용한 키로 그 값을 복호화해야 해요.

iv 이 파라미터는 이 데이터 조각을 암호화하고 복호화하는 데 사용할 초기화 벡터(IV, Initialization Vector)를 포함해요. IV는 특정 길이의 BINARY 값이어야 해요:

  • GCM의 경우 이 필드는 96비트(12바이트)여야 해요. GCM 암호화 방법은 이 필드가 다른 크기여도 허용하지만 Snowflake는 현재 96비트만 지원해요.
  • CCM의 경우 이 값은 56비트(7바이트)여야 해요.
  • ECB의 경우 이 파라미터는 필요 없어요.
  • 그 외의 다른 지원되는 암호화 모드의 경우 이 값은 128비트(16바이트)여야 해요.

이 값은 첫 번째 암호화 라운드를 초기화하는 데 사용돼요. 특히 GCM 같은 암호화 모드의 경우 같은 IV와 키 조합을 두 번 이상 사용해서는 안 돼요.

이 파라미터가 NULL로 설정되면 구현은 각 호출 동안 새 의사 난수(pseudo-random) IV를 선택해요.

선택:

additional_authenticated_data 추가 인증 데이터(AAD)는 복호화 과정에서 기밀성과 신뢰성이 보장되는 추가 데이터예요. 그러나 이 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가 사용돼요.

aead_tag 이 BINARY 값은 AEAD 지원 복호화 모드에서 암호화된 데이터의 신뢰성과 기밀성을 확인하는 데 필요해요. ENCRYPT_RAW 함수가 반환한 AEAD 태그를 사용해요. 아래 예시는 이 값에 접근하고 사용하는 방법을 보여줘요.

반환 값

이 함수는 복호화된 값 또는 복호화 중 런타임 오류가 발생하면 NULL 값을 반환해요. 반환 값의 데이터 타입은 BINARY예요.

사용 시 유의사항 및 예시

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

더 알아보기 (Learn more)