프로그래밍/C언어를 활용한 네트워크 해킹

체크섬(Checksum)

cyanhe_wh 2019. 9. 3. 19:55
728x90
반응형

체크섬은 전송되는 헤더 및 데이터의 무결성을 보장하기 위해서 사용되며, 기본적으로 데이터의 합으로 계산된다.

 

통신 프로토콜에서 헤더 및 운반 중인 데이터에 오류가 발생하지 않았는지 확인하는 일반적인 방법은 바로 체크섬을 이용한다.

 

1. 데이터를 전송할 때 송신 측에서는 체크섬 값을 계산하고 이 값을 데이터와 함께 전송한다.

2. 데이터를 받는 수신 측에서는 송신 측에서 체크섬을 계산할 때와 동일한 알고리즘으로 체크섬을 계산한다.

3. 만약 데이터를 수신하는 쪽에서 계산된 체크섬 값과 수신된 체크섬 값이 서로 다른 값이 나오면 에러가 발생한 사실을 확인할 수 있다.

 

수신 측에서 데이터를 수신할 때 체크섬 계산 결과가 일치하지 않는다면 해당 패킷은 폐기되기 때문에 패킷을 전송할 때 정확한 체크섬 계산은 패킷을 만들어 전송하는데 필수적인 요소이다.

 

체크섬 계산 순서

  1. 데이터의 단위를 2바이트씩 나눈다.
  2. 만약 1바이트가 남았을 경우, 상위 자릿수에 0을 넣어 2바이트로 만든다.
  3. 데이터를 모두 2바이트 단위씩 더한다.
  4. 만약 자리올림(carry)이 발생하는 경우, 이를 다시 하위 비트에 더한다.
  5. 모두 더한 결과에 대하여 1의 보수를 취한다.

체크섬 구하는 프로그램 만들어 보자.

[그림 1-1] checksum 합 소스코드
[그림 1-2] checksum 실행결과

[그림 1-2] 이렇게 체크섬 값과 모든 데이터의 합인 값을 더해 모든 비트가 1이 되면 에러 없이 수신된 것이다.

728x90
반응형

'프로그래밍 > C언어를 활용한 네트워크 해킹' 카테고리의 다른 글

ARP 프로토콜  (0) 2020.12.02
Ethernet 헤더  (0) 2019.09.05
Packet Capture 라이브러리2  (0) 2019.09.03
Packet Capture 라이브러리  (0) 2019.09.03
RAW 소켓  (0) 2019.09.03