검수요청.png검수요청.png

"CRC-32"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (개요)
(개요)
(태그: 모바일 편집, 모바일 웹 편집)
 
(사용자 3명의 중간 판 8개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''CRC-32'''은 Cyclic Redundancy Check (CRC) 방식중의 하나이며 CRC 알고리즘 계산을 추진할 때 CRC32 다항식 (Polynomial) 을 사용한다. CRC는 네트워크 데이터블록 또는 파일 등 데이터에 근거하여 짧고 간단하며 자리수가 고정 된 검증코드를 발생시키는 채널코딩기술 (Channel Coding Techniques) 이며 주로 데이터 전송 또는 저장 후에 발생할 수 있는 오류 등을 감지 또는 검증하는데 사용된다. CRC는 1961년에 미국의 정보와 컴퓨터과학 전문가 W. Wesley Peterson 이 발명하였다.
+
'''CRC-32'''은 Cyclic Redundancy Check (CRC) 방식 중의 하나이며 [[CRC]] 알고리즘 계산을 추진할 때 CRC32 다항식(Polynomial)을 사용한다. CRC는 네트워크 데이터블록 또는 파일 등 데이터에 근거하여 짧고 간단하며 자리수가 고정 된 검증코드를 발생시키는 채널코딩기술(Channel Coding Techniques)이며 주로 데이터 전송 또는 저장 후에 발생할 수 있는 오류 등을 감지 또는 검증하는데 사용된다. CRC는 1961년에 미국의 정보와 컴퓨터과학 전문가 [[웨슬리 피터슨]](W. Wesley Peterson)이 발명하였다.
 +
 
 
==개요==
 
==개요==
CRC-32은 Cyclic Redundancy Check (CRC) 방식중에 CRC32 다항식을 적용하여 검증코드 (체크섬;Checksum) 를 취득하고 이를 통신에 적용하는 채널코딩기술이다.
+
CRC-32은 Cyclic Redundancy Check (CRC) 방식중에 CRC32 다항식을 적용하여 검증코드 (체크섬;Checksum) 를 취득하고 이를 통신에 적용하는 채널코딩 기술이다.
  
적용시 송신자측은 전송하고자 하는 메세지에 산출 된 체크섬을 더하여 전송하고 수신자측은 체크섬 산출 시 사용하였던 다항식을 그대로 적용하여 수신한 메세지에 나누기를 적용하여 산출 된 값이 Zero인지를 판단한다. Zero 이면 데이터 송수신이 정확히 진행되었고 아닐 경우 송수신 오류가 발생하였다고 판단한다.
+
적용 시 송신자측은 전송하고자 하는 메세지에 산출된 체크섬을 더하여 전송하고 수신자측은 체크섬 산출 시 사용하였던 다항식을 그대로 적용하여 수신한 메세지에 나누기를 적용하여 산출된 값이 Zero인지를 판단한다. Zero이면 데이터 송수신이 정확히 진행되었고 아닐 경우 송수신 오류가 발생하였다고 판단한다.
  
CRC검증작업에서 실수(검증작업에서 오류를 발견못하는) 할 확율은 1/2^32이다. 실제 작업중에는 실수가 없다고 과언해도 무리는 아니다.
+
CRC 검증작업에서 실수할(검증작업에서 오류를 발견 못 하는) 확률은 1/2^32이다. 실제 작업 중에는 실수가 없다고 과언해도 무리는 아니다.<ref>〈[https://bbs.csdn.net/topics/300184418 来分析一下crc的误码率]〉, 《CSDN论坛》, 2009-04-09</ref>
  
CRC-32 다항식은 x<sup>32</sup> + x<sup>26</sup> + x<sup>23</sup> + x<sup>22</sup> + x<sup></sup> + x<sup>16</sup> + x<sup>12</sup> + x<sup>11</sup> + x<sup>10</sup> + x<sup>8</sup> + x<sup>7</sup> + x<sup>5</sup> +x<sup>4</sup> + x<sup>2</sup> + x + 1
+
ISO, ANSI 등에서 적용하는 CRC-32 다항식은 x<sup>32</sup> + x<sup>26</sup> + x<sup>23</sup> + x<sup>22</sup> + x<sup></sup> + x<sup>16</sup> + x<sup>12</sup> + x<sup>11</sup> + x<sup>10</sup> + x<sup>8</sup> + x<sup>7</sup> + x<sup>5</sup> +x<sup>4</sup> + x<sup>2</sup> + x + 1이다.
  
 
CRC-32 산하에는 적용하는 다항식에 따라 CRC-32 알고리즘군이 구성되어 있으며 넓은 영역에서 사용된다. 구체적으로 아래시트를 참조할 수 있다.<ref>"[https://en.wikipedia.org/wiki/Cyclic_redundancy_check Cyclic redundancy check]", ''Wikipedia''</ref><ref>하늘 가득 비, 〈[https://blog.naver.com/tatara4/221352897546 CRC란 무엇인가?]〉, 《네이버 블로그》, 2018-09-05</ref>
 
CRC-32 산하에는 적용하는 다항식에 따라 CRC-32 알고리즘군이 구성되어 있으며 넓은 영역에서 사용된다. 구체적으로 아래시트를 참조할 수 있다.<ref>"[https://en.wikipedia.org/wiki/Cyclic_redundancy_check Cyclic redundancy check]", ''Wikipedia''</ref><ref>하늘 가득 비, 〈[https://blog.naver.com/tatara4/221352897546 CRC란 무엇인가?]〉, 《네이버 블로그》, 2018-09-05</ref>
 
[[파일:CRC32 Family.png|썸네일|850픽셀|가운데|CRC-32 알고리즘 군]]
 
[[파일:CRC32 Family.png|썸네일|850픽셀|가운데|CRC-32 알고리즘 군]]
  
==CRC원리==
+
==CRC 원리==
 +
▷ 다항식과 바이너리 코드
 +
 
 +
다항식과 바이너리코드사이에는 직접적인 대응관계가 존재한다. X의 최고지수가 바이너리의 최고위와 대응되며 아래 각 항들이 일일이 각 제곱과 대응된다. 지수가 있을 경우는 1로 표시하고 없는 경우에는 0으로 표기한다. X의 최고지수가 R일 경우 R+1 비트 바이너리 코드로 전환할 수 있다. 예를 들면 다항식 G(x)=x4 + x3 + x + 1 은 바이너리 코드 11011로 전환할 수 있다.
 +
 
 +
▷ 다항식
 +
 
 +
송수신 양측이 약정하여 메세지 데이터 처리에 사용하는 바이너리 데이터이며 데이터 전송 전반과정에서 불변한다. 다항식은 용도에 따라 상당수 분야에서 과학가들이 이미 정해놓았다.
 +
 
 +
▷ CRC원리
 +
 
 +
전송하고자 하는 어떤 데이터에 CRC 알고리즘을 적용하여 k 비트 바이너리 서열이 형성되고 형성된 서열은 다항식 (Pplynomial) 이라 불리우는 바이너리 서열에 나뉜다. 나뉜 뒤, r 비트의 나머지를 체크섬 (Checksum) 이라하며 송신측은 (k + r) 비트의 신규 바이너리 서열을 만들어 전송한다.
 +
 
 +
수신측은 접수 한 바이너리 서열 (서열에는 체크섬이 포함되어 있다) 을 송신측에서 사용하였던 다항식으로 나누기를 추진한다. 나눈 결과가 zero 이면 송신은 정확히 진행되었고 아닐 경우 송신오류가 발생하였다고 판단한다. 
 +
 
 +
여기서 나누기 계산은 산술계산의 나누기가 아니고 Logic 계산 XOR를 가르킨다.
 +
 
 
==CRC 검증코드 수동계산 사례==
 
==CRC 검증코드 수동계산 사례==
 +
▶ 작업목표:
 +
다항식 G(x)=x4 + x3 + 1 일때 바이너리 코드 10110011의 CRC 검증코드를 산출한다.
 +
 +
▶ 계산내역:
 +
 +
1)다항식의 바이너리 서열
 +
 +
G(x)=x4 + x3 + 1, 대응되는 바이너리 서열 11001 (설명: x4 는 5비트 바이너리 서열의 최고위치를 가르키고 Logic 값은 1을 나타내며 x3 은 5비트 서열의 그 다음 위치, Logic 값은 1을 나타낸다. x2 는 없기에 3번째 위치를 가르키고 Logic 값은 0을 나타낸다. 이런 식으로 마지막까지 처리하면 위의 바이너리 서열을 얻을 수 있다.)
 +
 +
2)검증코드는 4자리수를 맞추어야 함으로 바이너리 코드 10110011에 0 4개를 첨부하여 신규 서열 1011 0011 0000 을 얻는다.
 +
 +
3)검증코드 산출계산
 +
 +
* 메시지 = 10110011
 +
* 다항식 = 11001
 +
[[파일:caculate.png|섬네일|850픽셀|가운데| CRC 수동계산 사례]]
 +
 +
4)신규 취득 바이너리 서열
 +
 +
메시지 1011001를 대상으로 CRC 알고리즘 계산 추진 후 신규 서열 1011 0011 0100 이 형성되었으며 이가 나중에 공식적으로 전송하는 발송메세지가 된다.<ref>步孤天,〈[https://www.cnblogs.com/bugutian/p/6221783.html CRC校验码原理、实例、手动计算]〉, 《博客园》</ref>
 +
 
{{각주}}
 
{{각주}}
 +
 
==참고자료==
 
==참고자료==
 +
* "[https://en.wikipedia.org/wiki/Cyclic_redundancy_check Cyclic redundancy check]", ''Wikipedia''
 +
 
==같이 보기==
 
==같이 보기==
 +
* [[웨슬리 피터슨]]
 
* [[CRC-16]]
 
* [[CRC-16]]
{{암호 알고리즘|토막글}}
+
 
 +
{{암호 알고리즘|검토 필요}}

2022년 5월 16일 (월) 18:15 기준 최신판

CRC-32은 Cyclic Redundancy Check (CRC) 방식 중의 하나이며 CRC 알고리즘 계산을 추진할 때 CRC32 다항식(Polynomial)을 사용한다. CRC는 네트워크 데이터블록 또는 파일 등 데이터에 근거하여 짧고 간단하며 자리수가 고정 된 검증코드를 발생시키는 채널코딩기술(Channel Coding Techniques)이며 주로 데이터 전송 또는 저장 후에 발생할 수 있는 오류 등을 감지 또는 검증하는데 사용된다. CRC는 1961년에 미국의 정보와 컴퓨터과학 전문가 웨슬리 피터슨(W. Wesley Peterson)이 발명하였다.

개요[편집]

CRC-32은 Cyclic Redundancy Check (CRC) 방식중에 CRC32 다항식을 적용하여 검증코드 (체크섬;Checksum) 를 취득하고 이를 통신에 적용하는 채널코딩 기술이다.

적용 시 송신자측은 전송하고자 하는 메세지에 산출된 체크섬을 더하여 전송하고 수신자측은 체크섬 산출 시 사용하였던 다항식을 그대로 적용하여 수신한 메세지에 나누기를 적용하여 산출된 값이 Zero인지를 판단한다. Zero이면 데이터 송수신이 정확히 진행되었고 아닐 경우 송수신 오류가 발생하였다고 판단한다.

CRC 검증작업에서 실수할(검증작업에서 오류를 발견 못 하는) 확률은 1/2^32이다. 실제 작업 중에는 실수가 없다고 과언해도 무리는 아니다.[1]

ISO, ANSI 등에서 적용하는 CRC-32 다항식은 x32 + x26 + x23 + x22 + x + x16 + x12 + x11 + x10 + x8 + x7 + x5 +x4 + x2 + x + 1이다.

CRC-32 산하에는 적용하는 다항식에 따라 CRC-32 알고리즘군이 구성되어 있으며 넓은 영역에서 사용된다. 구체적으로 아래시트를 참조할 수 있다.[2][3]

CRC-32 알고리즘 군

CRC 원리[편집]

▷ 다항식과 바이너리 코드

다항식과 바이너리코드사이에는 직접적인 대응관계가 존재한다. X의 최고지수가 바이너리의 최고위와 대응되며 아래 각 항들이 일일이 각 제곱과 대응된다. 지수가 있을 경우는 1로 표시하고 없는 경우에는 0으로 표기한다. X의 최고지수가 R일 경우 R+1 비트 바이너리 코드로 전환할 수 있다. 예를 들면 다항식 G(x)=x4 + x3 + x + 1 은 바이너리 코드 11011로 전환할 수 있다.

▷ 다항식

송수신 양측이 약정하여 메세지 데이터 처리에 사용하는 바이너리 데이터이며 데이터 전송 전반과정에서 불변한다. 다항식은 용도에 따라 상당수 분야에서 과학가들이 이미 정해놓았다.

▷ CRC원리

전송하고자 하는 어떤 데이터에 CRC 알고리즘을 적용하여 k 비트 바이너리 서열이 형성되고 형성된 서열은 다항식 (Pplynomial) 이라 불리우는 바이너리 서열에 나뉜다. 나뉜 뒤, r 비트의 나머지를 체크섬 (Checksum) 이라하며 송신측은 (k + r) 비트의 신규 바이너리 서열을 만들어 전송한다.

수신측은 접수 한 바이너리 서열 (서열에는 체크섬이 포함되어 있다) 을 송신측에서 사용하였던 다항식으로 나누기를 추진한다. 나눈 결과가 zero 이면 송신은 정확히 진행되었고 아닐 경우 송신오류가 발생하였다고 판단한다.

여기서 나누기 계산은 산술계산의 나누기가 아니고 Logic 계산 XOR를 가르킨다.

CRC 검증코드 수동계산 사례[편집]

▶ 작업목표: 다항식 G(x)=x4 + x3 + 1 일때 바이너리 코드 10110011의 CRC 검증코드를 산출한다.

▶ 계산내역:

1)다항식의 바이너리 서열

G(x)=x4 + x3 + 1, 대응되는 바이너리 서열 11001 (설명: x4 는 5비트 바이너리 서열의 최고위치를 가르키고 Logic 값은 1을 나타내며 x3 은 5비트 서열의 그 다음 위치, Logic 값은 1을 나타낸다. x2 는 없기에 3번째 위치를 가르키고 Logic 값은 0을 나타낸다. 이런 식으로 마지막까지 처리하면 위의 바이너리 서열을 얻을 수 있다.)

2)검증코드는 4자리수를 맞추어야 함으로 바이너리 코드 10110011에 0 4개를 첨부하여 신규 서열 1011 0011 0000 을 얻는다.

3)검증코드 산출계산

  • 메시지 = 10110011
  • 다항식 = 11001
CRC 수동계산 사례

4)신규 취득 바이너리 서열

메시지 1011001를 대상으로 CRC 알고리즘 계산 추진 후 신규 서열 1011 0011 0100 이 형성되었으며 이가 나중에 공식적으로 전송하는 발송메세지가 된다.[4]

각주[편집]

  1. 来分析一下crc的误码率〉, 《CSDN论坛》, 2009-04-09
  2. "Cyclic redundancy check", Wikipedia
  3. 하늘 가득 비, 〈CRC란 무엇인가?〉, 《네이버 블로그》, 2018-09-05
  4. 步孤天,〈CRC校验码原理、实例、手动计算〉, 《博客园》

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 CRC-32 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.