문자열 인코딩 및 해싱
이 도움말 페이지의 정보는 CXone Studio 및 Desktop Studio에 모두 적용됩니다.
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 코드의 예시를 스크립트에 사용할 수 있도록 제공해 드립니다. 각 함수를 설명하는 테이블의 이 도움말 페이지에서도 코드를 복사할 수 있습니다.
- 예시 스크립트 ZIP 파일을 다운로드합니다.
- ZIP 파일의 콘텐츠를 압축 해제합니다. 다음과 같은 스크립트 파일 두 개가 포함되어 있습니다.
EncodeAndHashScriptExample.xml: 함수를 테스트할 수 있는 예시 스크립트가 포함되어 있습니다.
ExampleSnippetActions.xml: 이 페이지의 각 알고리즘마다 하나의 스니펫을 포함한 파일입니다. 각 스니펫에는 해당 함수를 위한 샘플 코드가 포함되어 있습니다.
- 두 XML 파일을 Studio 안으로 가져옵니다.
- 사용할 함수를 위해 ExampleSnippetActions.xml 파일에 있는 스니펫에서 스니펫 코드를 복사합니다.
- EncodeAndHashScriptExample.xml 파일의 스니펫 안에 복사한 코드를 붙여넣습니다.
- 시뮬레이션된 상호작용을 설정한 다음 Start with Trace을(를) 클릭합니다. 또한 편집기 창에서 디버거를 사용할 수도 있습니다. 두 가지 옵션 중 무엇을 사용하든 스니펫에서 변화하는 변수의 콘텐츠를 볼 수 있습니다.
문자열 인코딩을 위한 함수
인코딩은 데이터를 다른 형식으로 변환합니다. 이를 사용하여 대량의 데이터를 전송하거나 사용하는 프로토콜로는 전송할 수 없는 데이터를 전송할 수 있습니다. 인코딩된 데이터는 원래 형식으로 다시 변환할 수 있습니다.
문자열을 인코딩하는 데 사용할 수 있는 함수는 두 가지가 있습니다. 두 가지 모두 Base64 스키마를 사용하여 데이터를 인코딩합니다.
함수 이름 | 설명 |
---|---|
|
일부 프로토콜은 이진 데이터를 전송할 수 없습니다. 이 함수를 사용하면 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
Base64 함수를 사용하면 URL을 웹 애플리케이션으로 인코딩할 수 있습니다. 하지만, URL에서 다른 방식으로 구문 분석해야 하는 인코딩에서 사용되는 특수 문자가 세 가지 있습니다. 그 특수 문자는 더하기 기호( + ), 정방향 슬래시 ( / ), 등호( = )입니다. 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
문자열을 디코딩하는 함수
이 함수를 사용하면 EncodeBase64 함수로 인코딩된 문자열을 디코딩할 수 있습니다.
함수 이름 | 설명 |
---|---|
|
이 함수는 인코딩된 데이터( 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
문자열을 비밀 키로 해싱하는 함수
해시 함수는 고정된 길이의 출력 문자열을 생성하는 수학적 계산을 사용합니다. 해시라고 하는 출력 문자열은 해시된 데이터의 진위를 검증하는 데 유용합니다. 암호 확인, 디지털 서명 등에 사용할 수 있습니다. 예를 들면 암호의 해시된 버전을 저장할 수 있습니다. 사용자가 암호를 입력하면 이를 해싱한 다음 저장한 암호의 해시된 버전과 비교할 수 있습니다. 두 항목이 동일하면 암호가 올바른 것입니다.
이 섹션에서 설명하는 해시 함수는 모두 키가 적용된 해시 알고리즘입니다. 이는 해시 기반 메시지 인증 코드(HMAC) 알고리즘을 사용합니다. 각 알고리즘은 특정한 길이의 해싱된 출력을 생성합니다. HMAC 알고리즘은 비밀 키와 해시 함수의 조합을 사용하여 해싱된 출력을 생성합니다. HMAC 프로세스는
- 비밀 키를 메시지 데이터와 혼합합니다.
- 결과를 해시 함수로 해싱합니다.
- 해시 값을 비밀 키와 다시 혼합합니다.
- 해시 함수를 두 번째로 적용합니다.
해시 함수는 일방적입니다. 즉, 취소 불가능하다는 의미입니다. 이 때문에 이러한 함수는 데이터 암호화에 사용할 수 없습니다. 또한 암호화 역시 이 섹션의 해시 함수처럼 키를 사용합니다. 하지만, 암호화 알고리즘에는 해싱 알고리즘이 포함되지 않으므로 되돌릴 수 있습니다. Studio은(는) 어떠한 암호화된 함수도 제공하지 않습니다.
키를 획득하고 이를 수신하는 엔터티 또는 시스템에 공유하는 것은 조직의 책임입니다.
비밀 키의 보안을 보호합니다. 이 키를 잃어버리면 이 키를 사용하여 해시된 모든 데이터를 사용할 수 없게 됩니다. 문자열이 동일해도 서로 다른 키 두 개로 해싱된 문자열은 비교할 수 없습니다.
함수 이름 | 설명 |
---|---|
|
이 함수는 SHA-256 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA256을 사용합니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
이 함수는 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
이 함수는 SHA-384 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA384을 사용합니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
이 함수는 SHA-512 해시 알고리즘으로 구축되었으며 해시 기반 메시지 인증 코드(HMAC)로 사용되는 키가 적용된 해시 알고리즘인 HMACSHA512을 사용합니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
문자열을 공개/프라이빗 키 쌍으로 해싱하는 함수
해시 함수는 고정된 길이의 출력 문자열을 생성하는 수학적 계산을 사용합니다. 해시라고 하는 출력 문자열은 해시된 데이터의 진위를 검증하는 데 유용합니다. 암호 확인, 디지털 서명 등에 사용할 수 있습니다. 예를 들면 암호의 해시된 버전을 저장할 수 있습니다. 사용자가 암호를 입력하면 이를 해싱한 다음 저장한 암호의 해시된 버전과 비교할 수 있습니다. 두 항목이 동일하면 암호가 올바른 것입니다.
이 함수는 RSA 및 SHA 알고리즘을 사용합니다. RSA는 공개/프라이빗 키 쌍을 사용하는 암호화 알고리즘입니다. SHA는 해싱 알고리즘 세트입니다. 이 둘은 함께 고정된 길이의 해시를 생성합니다. 지원되는 함수는 세 가지가 있으며, 각각 서로 길이가 다른 해시를 생성합니다. 프라이빗 키는 해시를 생성하는 데 사용합니다. 공개 키는 해시를 확인하는 데 사용합니다.
해시 함수는 일방적입니다. 즉, 취소 불가능하다는 의미입니다. 이 때문에 이러한 함수는 데이터 암호화에 사용할 수 없습니다. 또한 암호화 역시 이 섹션의 해시 함수처럼 키를 사용합니다. 하지만, 암호화 알고리즘에는 해싱 알고리즘이 포함되지 않으므로 되돌릴 수 있습니다. Studio은(는) 어떠한 암호화된 함수도 제공하지 않습니다.
이 섹션에서 설명하는 해시 함수를 위해서는 모두 CXone테넌트 고급 조직 그룹화는 CXone 환경을 위해 기술 지원, 청구 및 글로벌 설정을 관리하는 데 사용됩니다.에 SSL 인증서를 생성 및 설치해야 합니다. 인증서에는 이 함수가 사용하는 공개 및 프라이빗 키가 포함됩니다. 이 프로세스에 대한 지원을 원하시면 CXone 계정 담당자에게 문의하십시오.
이 옵션을 사용하려면 시스템에서 인증서를 설정하기 위해 NICE CXone의 도움이 필요합니다. 자세한 내용은 CXone 계정 담당자에게 문의하십시오.
함수 이름 | 설명 |
---|---|
|
이 함수는 RSA Signature with SHA-256라고 하는 RS256 알고리즘을 사용합니다. 해시 출력의 길이는 사용하는 프라이빗 키의 길이에 따라 달라집니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
이 함수는 RSA Signature with SHA-384라고 하는 RS384 알고리즘을 사용합니다. 해시 출력의 길이는 사용하는 프라이빗 키의 길이에 따라 달라집니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
|
이 함수는 RSA Signature with SHA-512라고 하는 RS512 알고리즘을 사용합니다. 해시 출력의 길이는 사용하는 프라이빗 키의 길이에 따라 달라집니다. 소스 데이터 이 예시 스크립트의 Snippet 작업에는 다음과 같은 코드가 포함됩니다.
|
토큰 및 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)
토큰은 세 가지 부분인 헤더, 페이로드, 서명으로 구성됩니다. 이러한 함수에는 많은 매개 변수가 있으며, 이러한 부분을 생성하는 데 사용되는 데이터를 제공합니다. 매개 변수는 다음 테이블에서 정의됩니다.
매개 변수 | 유형 | 설명 |
---|---|---|
|
문자열 | 연결하는 API 엔드포인트의 URL입니다. |
|
문자열 | 이 함수로 해싱할 때 스크립트가 사용할 비밀 키입니다. |
|
문자열 | 토큰 발행자입니다. |
|
문자열 | 토큰의 제목입니다. |
|
문자열 | 토큰의 의도한 소비자입니다. 일반적으로 이는 클라이언트가 액세스하려는 인증 서버입니다. |
|
동적 데이터 | 토큰의 헤더에 포함하려는 데이터입니다. |
|
동적 데이터 | 토큰에 포함해야 하는 페이로드를 보유한 키-값 쌍입니다. 여기에는 토큰의 만료 시간이 포함될 수 있습니다. 이는 아래 샘플 스니펫에 |
|
동적 데이터 | 토큰에 포함하려는 쿼리 매개 변수를 보유한 키-값 쌍입니다. 확장 함수에서만 사용할 수 있습니다. |
|
동적 데이터 | 요청 헤더 정보를 보유한 키-값 쌍입니다. 확장 함수에서만 사용할 수 있습니다. |
이 예시 스크립트의 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)
샘플 스크립트에는 사용 가능한 각 함수를 위한 코드가 있습니다. 이 예시에서는 사용 가능한 여섯 가지 함수 중 두 개만 다룹니다.