인코딩 제어 표기법
Encoding Control Notation인코딩 제어 표기법(ECN)은 국제 표준의 추상 구문 표기법 1(ASN.1) 계열의 일부인 표준화된 공식 언어다.[1] ECN은 ASN.1과 함께 사용하도록 설계되었으며, 각 ECN 규격(일관된 인코딩 정의 집합)은 특정 ASN.1 규격(유형 정의의 일관성 있는 집합)과 명시적으로 관련된다.
ECN 표준은 ITU-T와 ISO 양쪽에서 발행하며, ITU-T 권장사항 X.692 ISO/IEC 8825-3, 정보 기술 – ASN.1 인코딩 규칙: ECN(인코딩 제어 표기법) 명세.[2]
ECN은 ASN.1 형식 정의에 대해 비표준 인코딩 규칙의 정식 사양을 지원하며, BER이나 PER과 같이 표준화된 인코딩 규칙에서 제공하는 것과 다른 인코딩을 사용할 필요가 있을 때마다 사용되도록 되어 있다.
ECN 사용
ASN.1 유형은 추상적인 값의 집합을 가진다. 인코딩 규칙은 이러한 추상적 값의 표현을 비트 시리즈로 지정한다. ASN.1 인코딩 규칙의 표준 세트를 통해 얻을 수 있는 것과 다른 특별한 인코딩이 필요한 애플리케이션이 있다.
다음은 표준 인코딩에서 일부 더 작거나 더 큰 편차를 필요로 하는 가능한 상황의 예들이다.
- 프로토콜은 극도로 컴팩트한 인코딩을 요구할 수 있다; 비록 비정렬 포장 인코딩 규칙(PER)이 일반적으로 매우 컴팩트하지만, 특정 필드의 값의 통계적 분포를 이용하거나 다른 형태의 중복성을 제거함으로써 특정 경우에 더 컴팩트한 인코딩을 달성할 수 있다.
- 프로토콜은 예를 들어 완전한 PER 디코더로 전체 메시지를 해독할 필요 없이 암호화된 메시지의 특정 부분에 쉽게 접근할 수 있도록 요구할 수 있다. 일반적으로, PER 인코딩된 메시지의 중간에 뛰어들어 그 시점으로부터 디코딩을 시작하는 것은 권장되는 관행은 아니지만, 특정 경우에 이것은 필요하거나 유용할 수 있다.uch의 경우, 수정된 버전의 PER을 지정하여 인코딩의 특정 부분에 대한 접근을 용이하게 하고 신뢰할 수 있게 할 수 있다.
- BER과 유사한 태그 길이 값(TLV) 형식으로 데이터를 인코딩하는 몇 가지 표준 프로토콜이 있다. 이러한 프로토콜 중 하나에 대해 공식적인 ASN.1 규격을 생성하고 임시 TLV 형식과 일치하는 수정된 버전의 BER을 지정할 수 있다.
- PER 또는 ASN.1 인코딩 규칙의 다른 집합과 상당히 다를 수 있는 특별 이진 형식으로 데이터를 인코딩하는 많은 표준 프로토콜이 있다. 이러한 프로토콜 중 하나에 대한 공식 ASN.1 규격을 만들고 특별 형식과 일치하는 이진 인코딩을 지정할 수 있다.
위의 사례와 그 밖의 많은 유사한 사례에서 ASN.1과 ECN을 함께 사용하면 추상 구문(구성표)과 인코딩 둘 다에 대한 완전하고 공식적인 규격을 만들 수 있다. 그런 다음 결합된 규격에서 인코더와 디코더를 자동으로 생성할 수 있다. 이는 작업량과 상호운용 가능한 시스템을 만들 때 오류가 발생할 가능성을 모두 줄이는 데 중요한 요인이다. ECN의 또 다른 중요한 이점은 시험을 위한 자동 도구 지원을 제공하는 능력이다. 이러한 장점은 표준화된 인코딩 규칙이 충분할 때 ASN.1에서만 이용할 수 있지만, ECN은 표준화된 인코딩 규칙이 충분하지 않은 상황에서 이러한 장점을 제공한다.
ECN 개요
개념
ECN의 작동 방식을 이해하려면 ASN.1 언어의 네 가지 요소, 즉 내장형(예: INTEGER 그리고 UTF8String(), 내장된 생성자 키워드(예: SEQUENCE, CHOICE, SEQUENCE OF, OPTIONAL)), 사용자 정의 단순 유형(예: Age ::= INTEGER(0..200), Color ::= ENUMERATED { green, yellow, red }) 및 사용자 정의 복합 유형(예: Name ::= SEQUENCE { first UTF8String, middle UTF8String, last UTF8String }). ASN.1의 다른 측면도 ECN에 반영되지만, 여기서는 논의하지 않을 것이다.
ECN 언어에는 내장형, 내장형 생성자 키워드, 사용자 정의 단순형, 사용자 정의 복합형 등도 있다. ECN 언어의 이러한 요소들은 ASN.1의 요소들과 유사하지만, 그들의 이름은 항상 다음과 같이 시작한다. #공식적으로는 인코딩 클래스라고 하지만 여기서는 ECN type과 ECN constructor 키워드라고 부른다. ECN 유형의 예는 다음과 같다. #INTEGER (빌트인), #UTF8String (빌트인), #Age (사용자 정의 필요), #Name (사용자 정의 필요). ECN 생성자 키워드의 예는 다음과 같다. #SEQUENCE, #CHOICE, #SEQUENCE-OF그리고 #OPTIONAL (모든 기능이 내장되어 있음)
ASN.1과 달리 ECN은 언어 사용자가 ECN 생성자 키워드의 동의어(예: #InterleavedSequence ::= #SEQUENCE따라서 ECN에는 사용자 정의 ECN 생성자 키워드뿐만 아니라 내장된 ECN 생성자 키워드가 있다.
ECN 관점에서 ASN.1 규격에서 발생하는 모든 사용자 정의 ASN.1 유형은 숨겨진 ECN 유형을 암시적으로 관련시킨다. 공식적으로 이 숨겨진 ECN 타입은 암묵적으로 생성된 인코딩 구조라고 불리지만 여기서는 단순히 ASN.1 타입의 숨겨진 ECN 타입이라고 부르겠다. Hidden ECN type은 특별한 종류의 사용자 정의 ECN type(그들의 ECN 정의는 사용자가 제공하는 것이 아니라 사용자 정의 ASN.1 type에서 자동으로 생성됨)이지만, 다른 사용자 정의 ECN type과 같이 동작한다.
ASN.1 유형의 숨겨진 ECN 유형은 원래 ASN.1 유형(그러나 약간 단순화됨)과 거의 동일하며, ECN에 명시된 인코딩 프로세스의 시작점으로, 궁극적으로 원래의 ASN.1 유형의 주어진 값을 나타내는 일련의 비트를 생성한다. ASN.1 유형(또는 그 일부)은 ECN에서 인코딩을 지정할 목적으로 직접 참조할 수 없지만 숨겨진 ECN 유형은 다음과 같다. ECN 유형과 ECN 생성자 키워드는 ECN 규격 내에서 명시적으로 참조할 수 있으며 ECN 규격에 포함된 규칙을 적용하여 인코딩된다.
대략적으로 말하면 ECN 규격은 두 가지를 하는데, 그것은 숨겨진 ECN 유형을 수정하여 새로운(색상; 아래 참조) 숨겨진 ECN 유형을 생성하는 방법과 ECN 유형(복잡한 유형일 경우 각 구성 요소뿐만 아니라)을 인코딩하는 방법을 말한다. 후자는 ECN 형식의 구성요소에 대한 인코딩 단계가 인코딩 중인 ECN 유형의 나머지 부분에 대한 추가 내부 수정으로 이어질 수 있다는 점에서 반복적으로 적용할 수 있다. 이 프로세스는 최종 ECN 유형이 완전히 인코딩될 때까지, 즉 원래 ASN.1 유형의 값을 나타내는 모든 비트가 생성될 때까지, 임의의 사이클 수를 통해 진행될 수 있다.
마지막으로 개체 인코딩 개념을 소개한다. 이것은 ECN 언어의 매우 중요한 요소로서, ECN 규격의 일부분이며, 규격에서 발생하는 내장형 또는 사용자 정의 ECN 생성자 키워드에 적용되는 각각의 개별 인코딩 규칙을 가리킨다.
메커니즘
인코딩 프로세스의 첫 번째 단계는 ASN.1 규격에 존재하는 모든 ASN.1 유형으로부터 숨겨진 ECN 유형의 자동 생성이다. 복잡한 사용자 정의 ASN.1 형식에 해당하는 숨겨진 ECN 형식은 색소라는 메커니즘에 의해 수정할 수 있으며, 이는 해당 구성 요소의 일부 형식 이름을 동의어로 대체하는 것으로 구성된다. ECN 빌트인 생성자 키워드(예: #SEQUENCE, #OPTIONAL) 동의어가 있는 숨겨진 ECN 유형에서 발생. ECN에서는 생성자 키워드와 내장형(예: 내장형) 모두에 대해 몇 가지 기본 제공 동의어가 있다. #CONCATENATION 의 동의어다 #SEQUENCE, #INT 의 동의어다 #INTEGER)) 그러나 언어 사용자는 사용자 정의 유형과 사용자 정의 생성자 키워드를 모두 다른 언어의 동의어로 정의할 수 있다. 색칠 단계의 목적은 숨겨진 ECN 유형에 존재하는 동일한 ECN 유형의 다른 발생 또는 동일한 ECN 생성자 키워드의 다른 발생으로 인코딩할 필요가 있는 경우 다음 단계인 구성요소의 인코딩인 숨겨진 ECN 유형을 준비하는 것이다. 예를 들어, 숨겨진 복합 ECN 유형은 두 개의 목록을 포함할 수 있다.#SEQUENCE-OF)) 그러나 하나의 목록은 목록의 첫 번째 항목 앞에 카운트 필드를 삽입하여 인코딩하고, 다른 하나는 목록의 마지막 항목 뒤에 종료 패턴을 삽입하여 인코딩한다. 예를 들어, 첫 번째 것을 교체함으로써 이 작업을 수행할 수 있다. #SEQUENCE-OF 숨겨진 ECN 유형의 키워드, 예를 들어 #CountBasedRepetition, 두 번째를 교체하여 #SEQUENCE-OF 키워드:말하자면 #TerminatingPatternBasedRepetition이 두 이름을 ECN 생성자 키워드의 사용자 정의 동의어로 선언함으로써 #SEQUENCE-OF이 두 개의 다른 생성자 키워드가 숨겨진 ECN 유형에 포함되면, 두 개의 목록은 각각 다른 인코딩 개체로 인코딩될 수 있다.
인코딩 프로세스의 두 번째 단계는 숨겨진 ECN 유형에 인코딩 객체를 적용하는 것이다. 인코딩할 값은 ASN.1 규격에 정의된 ASN.1 유형의 가능한 값 중 하나가 될 것이며, 인코딩 프로세스는 해당 ASN.1 유형의 숨겨진 ECN 유형을 선택하고 그에 적절한 인코딩 객체를 적용한다.
ECN 유형(또는 그 일부)을 다른 ECN 유형으로 대체하여 작동하는 개체 인코딩의 재귀적 적용에 추가 단계가 있을 수 있다.
ECN에는 여러 종류의 인코딩 객체가 있다. 일부 인코딩 객체는 간단한 ECN 유형의 실제 비트 레벨 인코딩을 완전히 결정하며 가장 이해하기 쉽다. 다른 것들은 ECN 타입보다는 ECN 생성자 키워드에 적용되며, ECN 생성자 키워드에 의해 구성된 복잡한 ECN 타입(또는 그것의 일부)의 인코딩의 일부 구조적 측면을 결정한다(그러나 전체 인코딩은 지정하지 않음). 또 다른 방법은 ECN 유형(또는 그 일부)을 다른 ECN 유형으로 교체하는 방식으로 작동하며, 그 유형에는 다른 인코딩 개체를 적용하여 인코딩해야 한다.
ECN에서 가장 중요한 종류의 인코딩 객체는 다음과 같다.
- 일부 인코딩 개체는 ECN 유형의 비트 레벨 인코딩을 지정한다.
- 이러한 인코딩 개체는 대부분 단순한 ECN 유형에 적용되며, 값의 비트 레벨 인코딩, 인코딩 크기, 선행 또는 후행 패딩, 옥텟 또는 워드 경계에 대한 정렬, 비트 역방향 등을 지정하는 여러 매개변수를 가지고 있다.
- 일부 인코딩 개체는 ECN 유형을 구성 요소 중 하나로 이전 ECN 유형을 포함하는 사용자 정의 ECN 유형으로 대체해야 함을 명시한다.
- 교체 유형은 ASN.1 사양이 아닌 ECN 사양에 명시되어야 한다. 사용자 정의 ECN 유형에는 다음 이름으로 시작하는 이름이 있어야 함
#은 숨겨진 ECN 유형의 이름과 동일하지 않아야 한다.
- 교체 유형은 ASN.1 사양이 아닌 ECN 사양에 명시되어야 한다. 사용자 정의 ECN 유형에는 다음 이름으로 시작하는 이름이 있어야 함
- 일부 인코딩 개체는 ECN 유형을 사용자 정의 ECN 유형으로 대체해야 한다고 지정하고, 이전 유형의 각 값을 후자 유형의 값에 매핑하는 방법을 지정하십시오.
- 교체 유형은 ASN.1 사양이 아닌 ECN 사양에 명시되어야 한다. 사용자 정의 ECN 유형에는 다음 이름으로 시작하는 이름이 있어야 함
#은 숨겨진 ECN 유형의 이름과 동일하지 않아야 한다.
- 교체 유형은 ASN.1 사양이 아닌 ECN 사양에 명시되어야 한다. 사용자 정의 ECN 유형에는 다음 이름으로 시작하는 이름이 있어야 함
- 일부 인코딩 개체는 구성 요소의 존재 또는 부재를 나타내는 방법을 지정한다.
#SEQUENCE선언된 활자#OPTIONAL; 이러한 인코딩 개체는 의 선택적 구성 요소인 ECN 유형에만 적용할 수 있다.#SEQUENCE타자를 치다;
- 다음은 이러한 인코딩 객체가 선택적 구성요소의 존재를 나타낼 수 있는 몇 가지 일반적인 방법이다.
- (일반적으로 부울) 필드를 활용하여 (일반적으로 부울) 값은 선택적 구성요소의 유무를 나타내며, 이전 단계에서 적용된 다른 인코딩 객체에 의해 ECN 유형에 삽입되었다.
- 선택적 구성 요소의 가능한 모든 값의 인코딩 내에서 특정 정밀한 비트 위치에서 발생하지만 ECN 규격에 따라 선택적 구성 요소 다음에 올 수 있는 모든 유형의 인코딩 내에서 발생하지 않는 특정 비트 패턴에 의존함
- 선택적 구성요소의 인코딩이 나머지 공간에 적합한지 여부를 결정하기 위해 엔클로저 인코딩 크기에 의존하여.
- 다음은 이러한 인코딩 객체가 선택적 구성요소의 존재를 나타낼 수 있는 몇 가지 일반적인 방법이다.
- 일부 인코딩 개체는 목록의 항목 수를 나타내는 방법을 지정한다.
#SEQUENCE-OF); 이러한 인코딩 개체는 ECN 유형에만 적용할 수 있음#SEQUENCE-OF유형;
- 다음은 이러한 인코딩 객체가 목록의 길이를 나타낼 수 있는 몇 가지 일반적인 방법이다.
- 목록의 길이를 포함하고 이전 단계에서 적용된 다른 인코딩 객체에 의해 ECN 유형에 삽입된 필드를 활용.
- 목록의 반복 구성 요소의 가능한 모든 값의 인코딩 내에서 특정 정밀한 비트 위치에서 발생하지만 ECN 규격에 따라 목록 뒤에 올 수 있는 모든 유형의 인코딩 내에서 발생하지 않는 특정 비트 패턴에 의존함
- 반복 구성요소의 인코딩 인스턴스 수를 결정하기 위해 엔클로저 인코딩 크기에 의존함
- 목록의 반복 구성 요소의 값 인코딩과 일치하지 않는 비트 문자열을 선택하고 목록의 마지막 항목 뒤에 해당 비트 문자열을 삽입하는 방법
- 반복 구성요소 내의 (이중 부울) 필드를 활용하며, 이 필드의 값은 해당 항목이 목록의 마지막 항목인지 여부를 나타낸다.
- 다음은 이러한 인코딩 객체가 목록의 길이를 나타낼 수 있는 몇 가지 일반적인 방법이다.
- 일부 인코딩 개체는 의 대안 중 어떤 것을 표시하는 방법을 지정한다.
#CHOICE유형이 존재하며, 다음 유형의 ECN 유형에만 적용할 수 있음#CHOICE유형;
- 다음은 이러한 인코딩 객체가 a의 대안 중 어떤 것을 나타낼 수 있는 몇 가지 전형적인 방법이다.
#CHOICE있음:- 대안 인덱스를 포함하고 이전 단계에서 적용된 다른 인코딩 객체에 의해 ECN 유형에 추가된 필드를 활용.
- 각 대안의 가능한 모든 값의 인코딩 내에서 특정 정밀한 비트 위치에서 발생하는 특정 비트 패턴에 의존하고 각 대안에 따라 다르다.
- 다음은 이러한 인코딩 객체가 a의 대안 중 어떤 것을 나타낼 수 있는 몇 가지 전형적인 방법이다.
- 일부 인코딩 개체는 ECN 유형을 인코딩 규칙의 표준 집합(예: PER)을 적용하여 인코딩하도록 지정한다.
참조
- ^ "ITU-T Rec. X.680 / ISO/IEC 8824-1". Retrieved 2008-08-28.
- ^ "ITU-T Rec. X.692 / ISO/IEC 8825-3". Retrieved 2008-08-28.
