문자열 인코딩 및 해싱

Studio은(는) 스크립트에서 데이터를 인코딩 또는 해싱하는 데 사용할 수 있는 함수에 관한 정보를 제공합니다. 인코딩 및 해싱 작업은 둘 다 데이터를 다른 형식으로 변환합니다. 데이터가 변경되는 방식과 이에 대한 조치는 서로 다릅니다.

  • 인코딩: 이 프로세스는 스크립트에서 사용할 수 있거나 스크립트에서 다른 시스템으로 전달하는 데 사용할 수 있는 형식으로 데이터를 변환합니다. 인코딩은 공용으로 사용 가능한 경우가 많은 스키마, 즉 메서드를 사용합니다. 이 때문에 이 변환은 보안상 취약합니다. 하지만, 인코딩의 목표는 데이터 보안이 아니라 수신하는 시스템에서 적절히 사용할 수 있도록 지원하는 것입니다. 인코딩은 데이터를 원래 형식으로 되돌려서 반환할 수 있습니다.
  • 해싱: 해싱은 데이터를 고정된 길이의 영숫자 문자열로 변환하는 일방적인 프로세스입니다. 해시된 문자열은 가끔 해시라고 부르기도 합니다. 해시는 데이터 무결성을 확인하는 데 종종 사용합니다. 동일한 두 문자열이 동일한 알고리즘으로 해싱되면, 이들의 해시도 동일합니다. 동일한 알고리즘을 사용하여 생성된 해시 두 개가 일치하지 않는 경우에는 원래 문자열 역시 달랐다고 유추할 수 있습니다. 이 프로세스는 일반 텍스트로 민감한 데이터를 전달하지 않고도 디지털 서명 또는 암호와 같은 보안 데이터를 확인하는 데 사용할 수 있습니다.

또한 Studio은(는) OAuth를 사용한 인증도 지원합니다. 이는 CXone과(와) 다른 시스템 간의 상호작용에 보안을 제공하는 메서드입니다.

이 페이지에는 문자열을 인코딩 또는 해싱하거나 인증 흐름을 OAuth로 설정하기 위해 Studio 스크립트에서 사용할 수 있는 함수에 관한 정보를 제공합니다. 이러한 솔루션을 구현하는 방법에 관한 정보는 제공하지 않습니다. 이러한 함수가 사용하는 알고리즘에 관한 세부 정보는 IETF(Internet Engineering Task Force) 웹사이트를 참조하십시오.

해싱은 되돌릴 수 없습니다. 문자열을 해싱하는 함수는 주의해서 사용해야 하며, 라이브 데이터와 함께 이를 사용하기 전에 구현하는 방법을 이해해야 합니다.

RestProxy

Studio에서 문자열을 인코딩 및 해싱하려면 스크립트로 RESTful API에 액세스할 수 있도록 지원하는 RestProxy를 사용해야 합니다. 또한 이는 인코딩 및 해싱에 사용되는 함수에 대한 액세스를 제공합니다. 문자열을 인코딩 또는 해싱할 때 사용할 수 있는 함수에 대한 스니펫 예시에는 모두 RestProxy에 액세스하는 다음과 같은 문이 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()

표시된 것과 완전히 동일하게 UCN.Data.RESTProxy()을(를) 변수 할당에 포함하는 것이 중요합니다. RESTProxy()는 데이터를 인코딩 또는 해싱하는 데 사용되는 함수에 액세스할 수 있도록 지원하는 함수입니다.

예시

각 함수에 대한 Snippet 코드의 예시를 스크립트에 사용할 수 있도록 제공해 드립니다. 각 함수를 설명하는 테이블의 이 도움말 페이지에서도 코드를 복사할 수 있습니다.

  1. 예시 스크립트 ZIP 파일을 다운로드합니다.
  2. ZIP 파일의 콘텐츠를 압축 해제합니다. 다음과 같은 스크립트 파일 두 개가 포함되어 있습니다. 
    • EncodeAndHashScriptExample.xml: 함수를 테스트할 수 있는 예시 스크립트가 포함되어 있습니다.

    • ExampleSnippetActions.xml: 이 페이지의 각 알고리즘마다 하나의 스니펫을 포함한 파일입니다. 각 스니펫에는 해당 함수를 위한 샘플 코드가 포함되어 있습니다.

  3. 두 XML 파일을 Studio 안으로 가져옵니다.
  4. 사용할 함수를 위해 ExampleSnippetActions.xml 파일에 있는 스니펫에서 스니펫 코드를 복사합니다.
  5. EncodeAndHashScriptExample.xml 파일의 스니펫 안에 복사한 코드를 붙여넣습니다.
  6. 시뮬레이션된 상호작용을 설정한 다음 Start with Trace을(를) 클릭합니다. 또한 편집기 창에서 디버거를 사용할 수도 있습니다. 두 가지 옵션 중 무엇을 사용하든 스니펫에서 변화하는 변수의 콘텐츠를 볼 수 있습니다.

문자열 인코딩을 위한 함수

인코딩은 데이터를 다른 형식으로 변환합니다. 이를 사용하여 대량의 데이터를 전송하거나 사용하는 프로토콜로는 전송할 수 없는 데이터를 전송할 수 있습니다. 인코딩된 데이터는 원래 형식으로 다시 변환할 수 있습니다.

문자열을 인코딩하는 데 사용할 수 있는 함수는 두 가지가 있습니다. 두 가지 모두 Base64 스키마를 사용하여 데이터를 인코딩합니다.

함수 이름 설명
EncodeBase64(string)

일부 프로토콜은 이진 데이터를 전송할 수 없습니다. 이 함수를 사용하면 string 매개변수로 전달되는 이진 데이터를 전송 가능한 형식으로 변환할 수 있습니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN encodeThis = "This is the source data."
ASSIGN hashB64 = restProxy.EncodeBase64(encodeThis) 
EncodeBase64Url(URL)

Base64 함수를 사용하면 URL을 웹 애플리케이션으로 인코딩할 수 있습니다. 하지만, URL에서 다른 방식으로 구문 분석해야 하는 인코딩에서 사용되는 특수 문자가 세 가지 있습니다. 그 특수 문자는 더하기 기호( + ), 정방향 슬래시 ( / ), 등호( = )입니다. EncodeBase64Url 함수를 사용하면 URL 매개 변수의 인수로 전달된 URL을 적절히 인코딩할 수 있습니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN encodeThis = "https://example.com"
ASSIGN hashB64url = restProxy.EncodeBase64Url(encodeThis) 

문자열을 디코딩하는 함수

이 함수를 사용하면 EncodeBase64 함수로 인코딩된 문자열을 디코딩할 수 있습니다.

함수 이름 설명
DecodeBase64 (string)

이 함수는 인코딩된 데이터(string)를 원래 형식으로 되돌립니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN encodedString = "234sdf"
ASSIGN decodedString = restProxy.DecodeBase64(encodedString) 

문자열을 비밀 키로 해싱하는 함수

해시 함수는 고정된 길이의 출력 문자열을 생성하는 수학적 계산을 사용합니다. 해시라고 하는 출력 문자열은 해시된 데이터의 진위를 검증하는 데 유용합니다. 암호 확인, 디지털 서명 등에 사용할 수 있습니다. 예를 들면 암호의 해시된 버전을 저장할 수 있습니다. 사용자가 암호를 입력하면 이를 해싱한 다음 저장한 암호의 해시된 버전과 비교할 수 있습니다. 두 항목이 동일하면 암호가 올바른 것입니다.

이 섹션에서 설명하는 해시 함수는 모두 키가 적용된 해시 알고리즘입니다. 이는 해시 기반 메시지 인증 코드(HMAC) 알고리즘을 사용합니다. 각 알고리즘은 특정한 길이의 해싱된 출력을 생성합니다. HMAC 알고리즘은 비밀 키와 해시 함수의 조합을 사용하여 해싱된 출력을 생성합니다. HMAC 프로세스는

  1. 비밀 키를 메시지 데이터와 혼합합니다.
  2. 결과를 해시 함수로 해싱합니다.
  3. 해시 값을 비밀 키와 다시 혼합합니다.
  4. 해시 함수를 두 번째로 적용합니다.

해시 함수는 일방적입니다. 즉, 취소 불가능하다는 의미입니다. 이 때문에 이러한 함수는 데이터 암호화에 사용할 수 없습니다. 또한 암호화 역시 이 섹션의 해시 함수처럼 키를 사용합니다. 하지만, 암호화 알고리즘에는 해싱 알고리즘이 포함되지 않으므로 되돌릴 수 있습니다. Studio은(는) 어떠한 암호화된 함수도 제공하지 않습니다.

키를 획득하고 이를 수신하는 엔터티 또는 시스템에 공유하는 것은 조직의 책임입니다.

비밀 키의 보안을 보호합니다. 이 키를 잃어버리면 이 키를 사용하여 해시된 모든 데이터를 사용할 수 없게 됩니다. 문자열이 동일해도 서로 다른 키 두 개로 해싱된 문자열은 비교할 수 없습니다.

함수 이름 설명
EncodeHS256(stringText, secretKey)

이 함수는 SHA-256 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA256을 사용합니다. 소스 데이터 stringText secretKey(으)로 구성된 256비트 길이의 해싱된 출력을 생성합니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN hashThis = "This is the source data."
ASSIGN key = "mykey"
ASSIGN hashHS256 = restProxy.EncodeHS256(hashThis, key) 
EncodeHS256NoBaseEncoding(stringText, secretKey)

이 함수는 EncodeHS256과(와) 동일하지만 Base64 인코딩이 포함되어 있지 않습니다. 해싱된 출력은 소스 데이터 stringText 과(와) secretKey(으)로 구성됩니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN hashThis = "This is the source data."
ASSIGN key = "mykey"
ASSIGN hashHS256NoB64= restProxy.EncodeHS256NoBase64Encoding(hashThis, key) 
EncodeHS384(stringText, secretKey)

이 함수는 SHA-384 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA384을 사용합니다. 소스 데이터 stringText secretKey(으)로 구성된 384비트 길이의 해싱된 출력을 생성합니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN hashThis = "This is the source data."
ASSIGN key = "mykey"
ASSIGN hashHS384= restProxy.EncodeHS384(hashThis, key) 
EncodeHS512(string Text, secretKey) 이 함수는 SHA-512 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA512을 사용합니다. 소스 데이터 stringText secretKey(으)로 구성된 512비트 길이의 해싱된 출력을 생성합니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN hashThis = "This is the source data."
ASSIGN key = "mykey"
ASSIGN hashHS512 = restProxy.EncodeHS512(hashThis, key) 

토큰 및 OAuth를 사용한 인증을 위한 함수

OAuth와 JSON 웹 토큰(JWT, 또는 토큰)을 사용한 토큰 기반 인증은 인증 흐름을 애플리케이션으로 구축하는 두 가지 표준입니다. 두 가지를 함께 사용하면 클라이언트 애플리케이션이 사용자 세부 정보를 효율적으로 확인할 수 있습니다. 인증 서버가 OAuth를 통해 성공적으로 사용자를 확인하면 사용자 세부 정보를 클라이언트 애플리케이션으로 전송해야 합니다.

이 함수를 사용하려면 인증 서버를 사용할 수 있어야 합니다. 토큰을 사용하면 OAuth 서버는 인증 흐름이 완료된 이후에 클라이언트 애플케이션으로 토큰을 전송합니다. 토큰에는 최종 사용자의 정보가 포함되어 있습니다.

스크립트에서 사용 가능한 함수는 사용자 및 클라이언트 인증용 OAuth 표준과 HMACSHA256 해싱 알고리즘을 결합합니다. OAuth 표준은 Studio의 함수 이름인 RFC7523에서 정의됩니다.

다음 함수를 Studio 스크립트에 사용하여 인증 흐름을 OAuth와 토큰으로 통합할 수 있습니다.

  • RFC7523GrantWithHS256(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData)

  • RFC7523GrantWithHS256Extended(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData, queryParams, requestHeaders)

  • RFC7523GrantWithHS384(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData)

  • RFC7523GrantWithHS384Extended(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData, queryParams, requestHeaders)

  • RFC7523GrantWithHS512(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData)

  • RFC7523GrantWithHS512Extended(apiUrl, key, iss, sub, aud, jwtHeaderData, jwtPayloadData, queryParams, requestHeaders)

토큰은 세 가지 부분인 헤더, 페이로드, 서명으로 구성됩니다. 이러한 함수에는 많은 매개 변수가 있으며, 이러한 부분을 생성하는 데 사용되는 데이터를 제공합니다. 매개 변수는 다음 테이블에서 정의됩니다.

매개변수 유형 설명
apiURL 문자열 연결하는 API 엔드포인트의 URL입니다.
key 문자열 이 함수로 해싱할 때 스크립트가 사용할 비밀 키입니다.
iss 문자열 토큰 발행자입니다.
sub 문자열 토큰의 제목입니다.
aud 문자열 토큰의 의도한 소비자입니다. 일반적으로 이는 클라이언트가 액세스하려는 인증 서버입니다.
jwtHeaderData 동적 데이터 토큰의 헤더에 포함하려는 데이터입니다.
jwtPayloadData 동적 데이터 토큰에 포함해야 하는 페이로드를 보유한 키-값 쌍입니다. 여기에는 토큰의 만료 시간이 포함될 수 있습니다. 이는 아래 샘플 스니펫에 payload.exp(으)로 나와 있습니다.
queryParams 동적 데이터 토큰에 포함하려는 쿼리 매개 변수를 보유한 키-값 쌍입니다. 확장 함수에서만 사용할 수 있습니다.
requestHeaders 동적 데이터 요청 헤더 정보를 보유한 키-값 쌍입니다. 확장 함수에서만 사용할 수 있습니다.

이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.

ASSIGN restProxy = new UCN.Data.RESTProxy()
ASSIGN key = "key"
ASSIGN url = "https://example.com"
ASSIGN iss = "some issuer"
ASSIGN sub = "some subscriber"
ASSIGN aud = "some audience"

DYNAMIC headerData
DYNAMIC payloadData
DYNAMIC queryParams //only in the Extended functions
DYNAMIC requestHeaders //only in the Extended functions
payloadData.ist=155533969 payloadData.exp=155533969 ASSIGN hash=restProxy.RFC7523GrantWithHS256(url, key, iss, sub, aud, headerData, payloadData) ASSIGN hash=restProxy.RFC7523GrantWithHS256Extended(url, key, iss, sub, aud, headerData, payloadData, queryParams, requestHeaders)

샘플 스크립트에는 사용 가능한 각 함수를 위한 코드가 있습니다. 이 예시에서는 사용 가능한 여섯 가지 함수 중 두 개만 다룹니다.