이름 궁합과 Checksum(검사합)

Checksum(검사합)은 데이터 오류 여부를 확인하는 데 널리 사용되는 방법이다. 데이터가 전송되거나 저장되는 과정에서 손상되었는지 검증하는 데 목적이 있다. 하지만 Checksum 자체는 데이터의 무결성을 보장하지만, 보안성(기밀성이나 위변조 방지)은 제공하지 않는다. 즉, 의도적인 데이터 변조를 막지는 못한다.

Checksum의 작동 원리와 보안성의 한계

  • 계산 방식: 데이터를 보낼 때, 원본 데이터를 기반으로 특정 규칙에 따라 Checksum 값을 계산하여 함께 전송한다. 이 계산 규칙은 간단한 합산 방식을 따르는 데, 이때 중요한 것은 올림을 버리고 내림하는 방식이다. 예를 들어 5와 7을 더해 12가 되면, 자리올림을 버려 나머지 ‘2’만 취하는 식이다. 이 방식으로 일정 자릿수를 유지하며 데이터를 누적해서 더해 최종 Checksum 값을 얻는다
  • 검증 방식: 수신 측에서는 복사본 데이터를 받을 후, 동일한 방식으로 Checksum 값을 다시 계산한다. 이 새로 계산한 값과 원본과 함께 온 Checksum 값을 비교하여 일치하면 데이터가 손상되지 않았다고 판단한다
  • 보안성의 한계: Checksum은 누구나 쉽게 재계산할 수 있다. 만약 악의적 사용자가 데이터를 변조한 뒤, 변조된 데이터에 맞춰 Checksum 값을 다시 계산해 함께 보낸다면, 수신 측에서는 변조 여부를 구분할 수 없다. 이러한 이유로 Checksum은 보안성이 없다고 평가된다

Hash(해시)와의 연결점

Checksum의 보안성 한계를 해결하기 위해 등장한 것이 Hash(해시)이다. 정보 보안의 3원칙(기밀성, 무결성, 가용성) 중 ‘무결성’은 주로 해시를 통해 구현된다. 해시는 때로 Checksum과 유사한 수학적 조작을 포함할 수 있지만, 아래와 같은 중요한 차이가 있다.

  • 단방향성: 해시 함수는 ‘단방향성’이라는 특정을 가진다. 즉, 원본 데이터를 가지고 해시 값을 계산할 수는 있지만, 해기 값만으로는 원본 데이터를 거꾸로 추론하거나 복원하는 것이 거의 불가능하다
  • 보안성: 이러한 단방향성 때문에 해시 값은 데이터의 위변조를 감지하는 데 효과적이다. 데이터가 조금이라도 변경되면 해시 값이 완전히 달라지므로, 의도적인 변조를 시도하더라도 이를 쉽게 파악할 수 있다

이름 궁합과 단방향성의 예시

  • 계산 원리: 한글 이름의 각 글자 획수를 숫자로 변환한다. 예를 들어 ‘성’은 5획, ‘이’는 2획 등으로 변환된다. 이렇게 변환된 획수들을 Checksum과 유사한 방식으로 더하고 자리올림을 버려 한 자릿수를 유지하는 과정을 반복한다. 최종적으로 얻은 숫자를 궁합 점수로 활용하는 방식이다
  • 단방향성: 예를 들어 ‘성이완완종구’라는 이름 궁합 점수가 90으로 나왔다고 가정해보자. 이 90이라는 점수만으로는 역으로 ‘성이완완종구’라는 이름을 추론할 수 없다. 90이라는 점수를 만들어낼 수 있는 이름 조합은 무수히 많기 때문이다. 또한, 각 글자의 획수 자체도 단방향성을 가진다. ‘5획’이라는 정보만으로는 그것이 ‘성’ 글자인지 다른 5획 글자인지 알 수 없다
  • 이러한 이름 궁합 테스트의 계산 방식은 해시의 단방향성을 직관적으로 보여주는 사례로 이해할 수 있다. 결과 값만으로는 원본 데이터를 알 수 없다는 특성이 해시의 핵심적인 부분이다

정보 보안의 3원칙

  • 기밀성
    • 의미: 허가된 사용자만 정보에 접근할 수 있도록 하는 원칙
    • 예시: 암호화(Encryption), 접근 제어(Access Control), 권한관리(Role-Based Access)
    • 핵심: 정보가 누설되지 않도록 보호하는 것
  • 무결성
    • 의미: 정보가 위·변조되지 않고 정확하게 유지되는 원칙
    • 예시: 해시(Hash), 전자서명(Digital Signature), 체크섬(Checksum)
    • 핵심: 정보가 변경 없이 신뢰할 수 있는 상태로 유지되는 것
  • 가용성
    • 의미: 필요한 시점에 정보나 시스템에 접근할 수 있어야 함
    • 예시: 백업(Backup), 장애복구(Disaster Recovery), DDos 방어, 시스템 이중화
    • 핵심: 서비스가 중단되지 않고 지속적으로 제공되는 것

4사5입(四捨五入)

반올림의 전 용어로 근삿값을 구할 때 4이하의 수는 버리고 5 이상의 수는 그 윗자리에 1을 더하여 주는 방법

사사시킨다 = 버린다 (올림하지 않는다)
  • truncate(): 소수점 이하를 버림(단순히 자름)
    • truncate(3.9) → 3
    • truncate(-3.9) → -3
  • floor(): 무조건 아래쪽(작은 쪽)정수로 내림
    • floor(3.9) → 3
    • floor(-3.9) → -4
오입시킨다 = 올린다 (반올림 또는 올림한다)
  • ceil(): 항상 위쪽(큰 쪽) 정수로 올림
    • ceil(3.1) → 4
    • ceil(-3.1) → -3
round(): 가장 가까운 정수로 반올림
  • round(3.4) → 3
  • round(3.5) → 4
  • round(-3.5) → (언어마다 다를 수 있다)

인프런 강의 중 ‘널널한 개발자님의 외워서 끝내는 SSL과 최소한의 암호기술’ 강의 참고