체크섬 - 신뢰성 없는 채널을 통한 통신이 이루어져 비트레어가 있는지 감지하는 방법

체크섬은 중복 검사의 한 형태이며

송신된 자료의 무결성을 보호하는 단순한 방법이다.

통신에서 CRC, 즉 순환 중복 검사를 체크섬이라고도 말하는데 엄밀히 따지면 체크섬은 나열된 데이터를 더하여 체크섬 숫자를 얻고, 정해진 비트 수의 모듈라로 정해진 비트 수로 재구성한다.

체크섬은 기본적인 메시지 구성 요소를 추가해 결과값을 저장함으로 써 동작한다. 만약 체크섬이 맞아 떨어지지 않는다면 메시지가 손상되었다고 결론을 내릴 수 있다.

 

 

 

 

예시

4 바이트의 데이터가 있다. 0x25, 0x62, 0x3F, 0x52

1단계 : 모든 바이트를 덧셈하면 0x118 이 된다.

2단계 : 캐리 니블(1바이트의 절반으로 보통 4비트를 가리키는 컴퓨터 환경의 용어)을 버림으로써 0x18을 만든다.

3단계 : 0x18의 2의 보수를 얻어 0xE8을 얻는데 이것이 바로 체크섬 바이트이다.

체크섬 바이트를 테스트하려면 원래의 그룹의 바이트에 체크섬 바이트까지 더하면 0x200이 된다.

다시 캐리 니블을 버림으로써 0x00이 된다. 0x00이라는 뜻은 오류가 없다는 뜻인데 오류가 있어도 우연히 될 수도 있다.

  • -출처 wikipedia

 

 

계산해보기

0x25, 0x62, 0x3F, 0x52를 10진수로 계산하자.

0x25 = 37

0x62 = 98

0x3F = 63

0x52 = 82

모두 다 더하면 280이고 280을 다시 16진수로 변환시키면 0x118이다.

여기서 캐리 니블을 버리도록 해보자. 0x118을 2진수로 변환시키면?

계산하는 법은 그냥 1, 1, 8을 2진수로 변환시키면 된다. 만약 11A라면 A는 10으로 계산하는 식으로!

어쨌든 118은 0001 0001 1000이 되게 된다.

캐리니블, 즉 최상위 니블을 버리면 0001을 버리게 되니까 0001 1000만 남게 된다.

이제 2의 보수를 취하면 되는데
2의 보수는 먼저 1의 보수로 바꾸고 거기에 +1을 하면 된다.

해보자.

0001 1000 -> 1110 0111 = 1의 보수

1110 0111 +1 1110 1000 = 2의 보수

1110 1000을 다시 16진법으로 표현하면 0xE8이 완성!
이것을 바로 체크섬 바이트라고 한다는 것이다.

 

 

출처 :hojak99.tistory.com/246

 

 

이런식으로 한번 계산을 해보니 확실히 이해가 되었다.

반응형

+ Recent posts