TRY_DECRYPT_RAW
TRY_DECRYPT_RAW
복호화 중에 오류가 발생하면 NULL 값을 반환하는 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)
- ENCRYPT_RAW — 원시 암호화
- DECRYPT_RAW — 원시 복호화
- TRY_DECRYPT — 오류 없이 복호화 시도