[인터넷 보안] 이름 궁합과 Checksum

Robert.Yang·2023년 6월 11일

Security

목록 보기
1/9
post-thumbnail

이 포스트는 널널한 개발자님 강의를 참조하여 작성하였습니다.

이름 궁합과 Checksum

어렸을 때 이름궁합으로 친구들끼리 해봤을 것이다. 이 이름궁합이 굉장히 중요하다. 이게 왜 중요한가? checksum이 뭐고 hash가 뭔지 설명할때 사용되는 것이 바로 이름 궁합이다.

Checksum(검사합)

  • 데이터 오류 여부 확인 방법으로 널리 사용된다.
  • 일정 자릿수를 정하고 범위를 넘는 자리올림은 버려서 자릿수를 유지한다.
  • 8 + 5 = 13이다.
  • 자리올림 1을 버리면 결과는 3이다. 같은 원리로 6 + 5 = 1이 된다.
  • 결국 '성이길영동희'라는 문자열에 대한 최종결과는 73이다.
  • 73을 근거로 '성이길영동희'라는 원본 문자열을 복원하는 것은 불가능하다. (Hash)
  • 획수를 알아도 원본 문자를 정확히 알 수 없다. (Hash)

검사합이란 데이터의 오류가 있는지 확인할려고 하는 것이다. 여기서 중요한 것은 이 검사합은 보안성이라고 하는 것은 없다. 이게 무슨 의미냐면 보안성이 없다라는 것은 크게 2가지인데 즉, 기밀성, 무경성이 없다라는 것이다. 무결성이 없다라는 것은 다음과 같다. 예를 들어 어떤 데이터를 인터넷으로 보낸다고 가정하자. 이 데이터가 원본인데 이 원본을 인터넷을 통해 보냈는데 날라온 데이터는 당연히 복사본일 것이다. 문제는 원본과 사본이 완벽하게 일치하는지 어떻게 알 수 있을까? 즉, 네트워크 송신하는 과정에서 뭔가 문제가 나지 않았을까? 이 둘을 비교하는 방법론이 checksum이다. 그래서 어떻게 비교하냐면 데이터를 보낸 다음에 추가적으로 검사합이라는 checksum 값을 보낸다. 그럼 수신할 때도 복사본 + 검사합 값을 받을 것이다. 그래서 어떻게 하냐면 검사합은 원본 데이터를 가지고 계산을 하는데 이와 같은 방법으로 복사본을 가지고 검사합을 계산해서 보내준 원본 검사합과 비교하여 일치하면 손상되지 않은 데이터라 판정된다.

검사합을 구하는 논리는 매우 심플하다. 자릿수를 우지하고 자리올림 발생 시 그 올림 숫자를 버리면 된다. 그리고 남은 자리를 유지한다. 즉, 일정자리를 유지한 채, 일정단위로 자른 데이터를 더해서 합산한다. 이렇게 해서 데이터의 유효성을 따지는건데 보안성이 없다고 하는 것은 누군가 의도적으로 값을 변경시키고 원본 검사합을 재계산해서 바꿔치기가 가능하기 때문에 보안성이 없다고 하는 것이다. 그래서 이런 문제를 해결하기 위해 hash가 나온다. hash가 구현될 때는 검사합과 비슷한 로직이 같이 들어간다.

그럼 다시 이름궁합 애기를 하자. 위의 그림에서 '성'이라는 문자에서 5로 바뀌는 규칙이 바로 획수이다. 그리고 이 획수를 구하는것이 단방향성을 지닌다. 무슨 이야기냐면 어떤 글자의 획수는 구할 수 있는데 그 구한 획수를 가지고 역계산을 할 수 없다는 것이다. 그리고 이름궁합에 중요한게 8 + 5부분이다. 더하면 13이지만 자리올림을 버리면 3이된다. 이런 방식으로 계산하면 최종 결과가 73이 된다.

우리는 대부분 ASCII를 알 것이다. ASCII의 'A'가 65인것처럼 모든 눈에 보이는 것을 숫자로 바꿀 수 있고 이것을 합산이 가능하다. 그래서 검사합 개념은 데이터가 문제가 생겼는지 변조가 되었는지 변경이 되었는지 확인할 때 쓰는 기초적 방법이다. 즉, ASCII의 문자를 숫자로 변경해 합을 진행해서 확인한다.

그러면 의문점이 결과 값 73을 '성이길영동희'라는 문자열로 바꿀 수 있을까? 불가능하다. 그래서 hash는 쉽게 말해 단방향성을 지닌 함수라고 생각하면 쉽다.

profile
모든 것을 즐길 줄 아는 개발자, 양성빈입니다.

0개의 댓글