Network
[ASN.1] ASN.1 format
Tribal
2019. 6. 10. 10:14
여러 네트워크 프로토콜들을 분석해보면 ASN.1 format을 사용하는 것을 자주 볼 수 있다. 와이어샤크에서는 ASN.1에 대해서 알아서 파싱해서 처리해 버려서 이런 부분은 프로토콜 분석 내용이 표시하지 않고, 헥스 창 아래에 별도로 표시하고 있다.
ASN.1에 대해 요약 내용은 https://nacamp.tistory.com/17 를 참고하면 될 것 같다.
ASN.1 format 자체는 어떤 데이터를 어떤 크기만큼 보내는지 명시하는 추상적인 형태의 표준이기 때문에 이를 실제로 네트워크로 보내기 위해 변환시키는 형식은 따로 있다.
- BER : Basic Encoding Rules
- CER : Canonical Encoding Rules
- DER : Distinguished Encoding Rules
- XER : XML Encoding Rules
- PER : Packed Encoding Rules
- GSER : Generic String Encoding Rules
ASN.1의 format은 Type, Length, Data로 3 부분으로 나눠진다.
- Type : 데이터가 어떤 데이터인지 명시(integer, floot, string, boolean, oid....), 이에 대해서는 별도의 값으로 정의가 되어 있다.
- Length : 데이터의 길이를 명시, 0x7f 이하의 길이는 1바이트를 사용하고, 길어지는 경우 확장 길이를 명시해서 사용한다.
- Data : 실제 데이터를 명시
Length는 위에서 설명하였듯이 0x7f 이하는 단순 1바이트로 표현하고 이 이상인 경우는 0x80의 값에 Length의 바이트 크기를 or(|) 연산하여 명시(길이의 크기이기 때문에 nlength 라고 함)한다. nlength를 명시한 뒤, nlength에 명시된 바이트 크기만큼 실제 Length가 추가된다.
Length가 4인 경우 : 0x04 |
Length가 300인 경우 : 0x82 0x01 0x2c |
DER(Distinguished Encoding Rules)
- net-snmp
DER Type | |
Type | Value |
boolean | 0x01 |
integer | 0x02 |
bit string | 0x03 |
octet string | 0x04 |
null | 0x05 |
object id(oid) | 0x06 |
sequence | 0x10 |
.... | .... |
참고