해시 코드와 체크섬-차이점은 무엇입니까?


115

내 이해는 해시 코드와 체크섬이 비슷한 것 입니다. 상대적으로 고유 한 데이터 블록에 대해 계산 된 숫자 값 입니다.

즉, 동일한 숫자 해시 / 체크섬 값을 생성하는 두 데이터 블록의 확률은 응용 프로그램의 목적을 위해 무시할 수있을만큼 충분히 낮습니다.

그래서 우리는 같은 것에 대해 두 단어를 가지고 있습니까, 아니면 해시 코드와 체크섬 사이에 중요한 차이점이 있습니까?


3
아래 답변을 요약하면 : 해시 코드는 충돌 가능성을 최소화하는 방식으로 입력을 적은 수로 줄입니다. 반면 체크섬은 충돌 가능성을 최소화하는 방식으로 입력을 적은 수로 줄입니다. 그 설명을 임의로 바꿔서 다른 소리와 다른 소리를 만들 수 있습니다.
Dan Stahlke 2015

3
@DanStahlke-아니요, 아래 답변이 말하는 것이 아닙니다. 예, 둘 다 입력을 더 작은 수로 줄입니다. 하지만 그렇게하는 방법에는 여러 가지가 있습니다. 사용할 알고리즘을 선택하는 방법은 무엇입니까? 그것은 당신의 목표에 달려 있습니다. 상위 두 가지 답변을 요약하면 체크섬 의 목표 는 " 가장 일반적인 오류를 감지하는 것 "입니다. 시나리오에서 "가장 일반적인"오류에 대해 다른 체크섬을 생성하는 알고리즘을 선택합니다. 하나 또는 두 개의 비트가 토글되는 것이 걱정된다면 특정 오류의 감지 를 보장 하는 알고리즘을 선택할 수 있습니다 ! 이것은 매우 구체적인 트레이드 오프입니다.
ToolmakerSteve

1
@DanStahlke-반면에 해시 코드 는 가능한 광범위한 장단점을 다룹니다. 해시 테이블을 만드는 데 사용되는 값을 의미한다면 충돌 이 많을 것임을 알고 있습니다. 이것은 체크섬과는 매우 다른 트레이드 오프입니다. 우리는 평균적으로 충돌을 줄이기 위해 노력하고 있습니다 . 우리는 아무것도 보장하지 않습니다. 1 비트 만 다르지만 동일한 해시를 생성하는 입력이있을 수 있습니다. 평균적 으로 해시 값의 좋은 확산을 얻는 다면 이것은 완벽하게 괜찮습니다 . 그러나 체크섬에는 허용되지 않습니다.
ToolmakerSteve

답변:


72

나는 말할 것이다 검사가 필요하다 해시 코드 . 그러나 모든 해시 코드가 좋은 체크섬을 만드는 것은 아닙니다.

체크섬에는 특별한 목적이 있습니다. --- 데이터의 무결성을 확인하거나 확인 합니다 (일부는 오류 수정 을 허용하여 그 이상을 할 수 있음 ). "좋은"체크섬은 계산하기 쉽고 여러 유형의 데이터 손상 (예 : 1, 2, 3 개의 잘못된 비트)을 감지 할 수 있습니다.

해시 코드는 단순히 데이터를 어떤 값에 매핑 하는 수학 함수 를 설명 합니다. 데이터 구조 (예 : 해시 테이블)에서 인덱싱 수단으로 사용되는 경우 낮은 충돌 확률이 바람직합니다.


6
하나를 다른 것으로 사용할 수 있지만 디자인 목표가 다르다는 점을 고려하면 문제를 혼란스럽게 할뿐입니다.
Wim Coenen

8
@gumbo : 아니요, 모든 해시 코드가 체크섬 인 것은 아닙니다. 아래 MSalters의 문자열 예를 참조하십시오.
MarcH 16.17.17

41

그들 각각 뒤에는 다른 목적이 있습니다.

  • 해시 코드-도메인 전체에서 무작위로 설계되었습니다 (해시 테이블 등의 충돌을 최소화하기 위해). 또한 암호화 해시 코드는 계산적으로 역전 할 수 없도록 설계되었습니다.
  • 체크섬-데이터에서 가장 일반적인 오류를 감지하고 종종 빠르게 계산하도록 설계되었습니다 (빠른 데이터 스트림을 효과적으로 체크섬하기 위해).

실제로 동일한 기능이 두 가지 목적 모두에 좋은 경우가 많습니다. 특히, 암호화 된 강력한 해시 코드는 계산 비용을 감당할 수 있다면 좋은 체크섬입니다 (임의 오류가 강력한 해시 함수를 손상시키는 것은 거의 불가능합니다).


1
또한 해시 코드의 비 암호화 버전은 의도적이든 통신 오류 / 비트 썩음이든 상관없이 계산 시간 (CRC에 가까운)과 오류 감지간에 좋은 절충안을 제공 할 수 있다는 점을 언급하는 것이 좋습니다. 의도적으로 충돌을 설계하는 것은 상대적으로 쉽습니다).
gaborous

1
저에게 대답의 핵심 문구는 체크섬이 가장 일반적인 오류를 감지하도록 설계 되었다는 것 입니다. 그래 그거야. 데이터 손상 가능성에 대해 다른 값을 산출하도록 선택된 해시 알고리즘입니다 . 이것은 특정 목적이며, 관심있는 섭동의 유형에 따라 최적화하는 특정 알고리즘으로 이어집니다.
ToolmakerSteve

22

실제로 몇 가지 차이점이 있습니다.

  • 체크섬은 입력이 다를 때 (가능한 자주) 달라야하지만 계산 속도가 빠르다는 것이 거의 중요합니다.
  • 해시 코드 (해시 테이블에서 사용하기위한)는 동일한 요구 사항을 가지고 있으며, 특히 유사한 입력에 대해 코드 공간 전체에 균등하게 배포되어야합니다.
  • 암호화 해시는 해시가 주어지면이 해시를 생성하는 입력을 구성 할 수 없다는 훨씬 더 엄격한 요구 사항이 있습니다. 계산 시간은 두 번째이며 응용 프로그램에 따라 해시가 매우 느리게 계산되는 것이 바람직 할 수도 있습니다 (무차별 대입 공격을 방지하기 위해).

1
나는 체크섬이 다른 입력에 대해 다른 이점이 있다고 생각하지 않습니다. 해싱이 아닌 무결성 검사를위한 것입니다.
user541686

1
@Mehrdad : 그렇다면 다른 입력에 대해 다른 결과를 얻지 않고 무결성 검사를 어떻게 제안합니까?
Michael Borgwardt

어, 내가 말한 걸 잘못 썼을까요? 나는 당신이 "가능한 한"이라고 말한 부분을 언급했습니다. 나는 단지 그들이 해시처럼 예측할 수 없거나 "멀리"될 이유가 없다고 말하는 것입니다. 언제 까지나 존재하는 한 어떤 입력이 전형적인 변화를 겪는 경우 검사의 변화, 그것은 좋은 체크섬입니다. 해시와는 대조적입니다. 해시는 가능한 한 균등하게 / 무작위로 / 예측할 ​​수없이 / "멀리"배포하는 것을 목표로합니다.
user541686

나는 당신이 "가능한 한"내가 의미하는 바를 오해했다고 생각합니다. 물론 충돌은 피할 수 없지만 가능한 한 드 물어야한다는 것을 의미했습니다. 문구를 바꿀 게요.
마이클 Borgwardt

@Mehrdad-처음에는 나에게 의미가 없었습니다. 체크섬이 가능한 체크섬 값에 대해 좋은 분포를 갖지 않으면 다른 체크섬보다 더 많은 입력 값에 대해 반환되는 일부 체크섬 값이 있음을 의미합니다. 그러나 이것이 체크섬의 유용성을 줄입니까? [교란 된 데이터가 동일한 결과를 반환 할 확률이 높아집니다. 맞습니까?] 흠, 틀 렸습니다. 맞습니다. 체크섬은 가능한 교란 을 감지하는 데 능숙해야합니다 . 모든 값에 대해 균등하게 분포 할 필요는 없습니다.
ToolmakerSteve

10

해시 코드와 체크섬은 모두 데이터 항목에서 짧은 숫자 값을 만드는 데 사용됩니다. 차이점은 데이터 항목을 약간 수정하더라도 체크섬 값이 변경되어야한다는 것입니다. 해시 값의 경우 요구 사항은 실제 데이터 항목에 고유 한 해시 값이 있어야한다는 것입니다.

명확한 예는 문자열입니다. 문자열의 체크섬에는 모든 비트가 포함되어야하며 순서가 중요합니다. 반면에 해시 코드는 종종 제한된 길이의 접두사의 체크섬으로 구현 될 수 있습니다. 즉, "aaaaaaaaaaba"는 "aaaaaaaaaaab"와 동일하게 해시되지만 해시 알고리즘은 이러한 충돌을 처리 할 수 ​​있습니다.


이 대답은 나를 위해 종을 울리는 대답입니다. 따라서 데이터 무결성은 해시의 초점이 아닙니다.
truthadjustr

9

Wikipedia는 다음과 같이 잘 설명합니다.

체크섬 함수는 해시 함수, 지문, 무작위 화 함수 및 암호화 해시 함수와 관련이 있습니다. 그러나 이러한 각 개념에는 서로 다른 응용 프로그램이 있으므로 디자인 목표가 다릅니다. 체크 디지트 및 패리티 비트는 작은 데이터 블록 (예 : 사회 보장 번호, 은행 계좌 번호, 컴퓨터 단어, 1 바이트 등)에 적합한 체크섬의 특수한 경우입니다. 일부 오류 수정 코드는 일반적인 오류를 감지 할뿐만 아니라 특정 경우 원본 데이터를 복구 할 수있는 특수 체크섬을 기반으로합니다.


28
그것을 읽은 후에도 차이점이 무엇인지 여전히 궁금합니다.
kirk.burleson 2010-07-27

@ kirk.burleson-나는 그것들이 동일한 원칙 이라고 말하고 싶지만 실제로는 항상 트레이드 오프를 합니다. 상황에 따라 서로 다른 장단점이 적용되므로 서로 다른 접근 방식이 사용됩니다. 체크섬에 대한 좋은 기술을 검색하면 해시 코드를 검색 할 때와 다른 알고리즘 집합을 찾을 수 있다고 말하는 두 개의 다른 단어가 있다는 사실은 정당하지 않습니다.
ToolmakerSteve

5

체크섬은 우발적 인 변경으로부터 보호합니다.

암호화 해시는 매우 의욕적 인 공격자로부터 보호합니다.

와이어에서 비트를 보낼 때 실수로 일부 비트가 뒤집어 지거나 삭제되거나 삽입 될 수 있습니다. 수신자가 이와 같은 사고를 감지 (또는 때때로 수정) 할 수 있도록 발신자는 체크섬을 사용합니다.

그러나 누군가가 능동적이고 지능적으로 메시지를 수정하고 있다고 가정하고 이런 종류의 공격자로부터 보호하고 싶다면 암호화 해시를 사용하십시오 (해시에 암호화 방식으로 서명하거나 보조 채널 등을 사용하는 것은 무시합니다). 질문은 이것에서 벗어나지 않는 것 같습니다).


3
"암호화 해시"는 "해시"와 "체크섬"간의 혼동을 증가시킵니다. "암호화 체크섬"은 그렇지 않기 때문에 더 좋습니다.
MarcH

5

해싱과 체크섬은 둘 다 파일의 내용을 기반으로 값을 생성한다는 점에서 비슷하지만 해싱은 체크섬을 만드는 것과 다릅니다. 체크섬은 데이터의 무결성을 확인 (확인)하고 데이터 전송 오류를 식별하기위한 것이며 해시는 데이터의 고유 한 디지털 지문을 생성하도록 설계되었습니다.

출처 : CompTIA ® Security + 네트워크 보안 기본 사항 가이드-제 5 판-Mark Ciampa-페이지 191


4

요즘에는 서로 바꿔서 사용할 수 있지만, 예전에는 체크섬이 모든 데이터 (일반적으로 바이트 단위)를 더하고 끝에 해당 값으로 바이트를 추가하는 매우 간단한 기술이었습니다. 원본 데이터가 손상되었는지 확인합니다. 체크 비트와 유사하지만 바이트가 있습니다.


4

해시 코드와 체크섬 함수의 차이점은 서로 다른 목적으로 설계되었다는 것입니다.

  • 체크섬은 입력 내용이 변경 되었는지 확인 하는 데 사용됩니다 .

  • 해시 코드 찾아 사용할 경우 입력에서 무언가 변경 가능한 개별 해시 코드 값 사이의 많은 "거리"로서 가지고.

    또한 해시 코드 값의 트리 / 클러스터 / 버킷을 조기에 형성하는 기능과 같이이 규칙과 반대되는 해시 함수에 대한 추가 요구 사항 이있을 있습니다.

    공유 된 초기 무작위 화를 추가하면 최신 암호화 / 키 교환에 대한 개념을 얻을 수 있습니다.


확률 정보 :

예를 들어 입력 데이터가 실제로 항상 변경된다고 가정합니다 (시간의 100 %). 그리고 1 비트 해시 / 체크섬 값을 생성하는 "완벽한"해시 / 체크섬 함수가 있다고 가정 해 보겠습니다. 따라서 무작위 입력 데이터에 대해 50 %의 다른 해시 / 체크섬 값을 얻게됩니다.

  • 임의의 입력 데이터에서 정확히 1 비트가 변경된 경우 입력 데이터의 크기에 관계없이 시간의 100 %를 감지 할 수 있습니다.

  • 임의 입력 데이터의 2 비트가 변경된 경우 두 변경 사항이 서로를 무력화 할 수 있고 해시 / 체크섬 함수가 입력 데이터에서 실제로 2 비트가 다른 것을 감지하지 못하므로 "변경"을 감지 할 확률을 2로 나눕니다. .

    ...

사용자의 입력 데이터의 비트 수는 사용자의 해시 / 체크섬 값의 비트 수보다 여러 배 큰 경우, 실제로는 서로 다른 입력 값에 대해 서로 다른 해시 / 체크섬 값을 얻고,이 수단은, 귀하의 확률이 감소하고 도착 하지 않은 것이다 상수 .


2

파일이나 데이터가 손상되지 않았는지 확인 하는 데 사용할 수있는 파일 또는 데이터 조각에 대해 생성 된 코드 (숫자 또는 기타)를 참조 할 때 체크섬이라는 단어를 사용하는 경향이 있습니다 . 내가 접하는 가장 일반적인 사용법은 네트워크를 통해 전송 된 파일이 (의도적으로 또는 다른 방식으로) 변경되지 않았는지 확인하는 것입니다.


1
체크섬은 되돌리기가 어렵지 않기 때문에 의도적으로 변경되었는지 여부를 확인하는 데 적합하지 않을 것입니다.
benblasdell

0

Redis 클러스터 데이터 샤딩에서는 a hash slot를 사용하여 이동할 노드를 결정합니다. 아래의 모듈로 연산을 예로 들어 보겠습니다.

123 % 9 = 6
122 % 9 = 5
141 % 9 = 6

6서로 다른 입력에 걸쳐 두 번납니다. 해시의 목적은 단순히 입력 값을 출력 값에 매핑하는 것이며 고유성은 거래의 일부가 아닙니다. 따라서 동일한 출력을 생성하는 두 개의 다른 입력은 해시 세계에서 괜찮습니다.

반면 체크섬은 매핑이 아니라 데이터 손상을 감지하기위한 것이기 때문에 입력의 한 비트가 변경 되더라도 출력을 달라야합니다. 따라서 동일한 출력을 생성하는 두 개의 다른 입력은 체크섬에서 허용되지 않습니다.


-4

체크섬은 단순히 데이터 필드에서 oring (논리적 덧셈, 즉 합계)에 의해 생성 된 숫자입니다. 체크섬은 생성 된 데이터 필드 내에서 비트 또는 비트 수의 손상을 감지 할 수있는 기능이 있습니다. 즉, 모든 오류를 확인하고 수정할 수 없습니다. 체크섬의 크기가 원래 데이터보다 작기 때문에 체크섬은 해시입니다. 예, 체크섬이 데이터 필드의 비트 위치에 전혀 민감하지 않기 때문에 충돌이 발생합니다.

CRC (Cyclic Redundancy Check)는 매우 다르고 더 복잡 하며 체크섬이라고 부르지 않습니다. 생성 된 데이터 필드 내에서 선택한 수의 개별 손상된 비트를 수정하는 기능을 가진 다항식 시리즈의 응용 프로그램입니다. CRC를 생성하면 체크섬과 달리 원래 데이터 필드보다 크기가 더 커집니다. 따라서 "중복"이라는 단어가 포함 된 이름과 오류 수정 기능에 대해 지불하는 비용이 포함됩니다. 따라서 CRC는 해시가 아니며 혼동하거나 체크섬으로 명명해서는 안됩니다. 중복성이 반드시 원본 데이터의 크기에 추가되기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.