내 이해는 해시 코드와 체크섬이 비슷한 것 입니다. 상대적으로 고유 한 데이터 블록에 대해 계산 된 숫자 값 입니다.
즉, 동일한 숫자 해시 / 체크섬 값을 생성하는 두 데이터 블록의 확률은 응용 프로그램의 목적을 위해 무시할 수있을만큼 충분히 낮습니다.
그래서 우리는 같은 것에 대해 두 단어를 가지고 있습니까, 아니면 해시 코드와 체크섬 사이에 중요한 차이점이 있습니까?
내 이해는 해시 코드와 체크섬이 비슷한 것 입니다. 상대적으로 고유 한 데이터 블록에 대해 계산 된 숫자 값 입니다.
즉, 동일한 숫자 해시 / 체크섬 값을 생성하는 두 데이터 블록의 확률은 응용 프로그램의 목적을 위해 무시할 수있을만큼 충분히 낮습니다.
그래서 우리는 같은 것에 대해 두 단어를 가지고 있습니까, 아니면 해시 코드와 체크섬 사이에 중요한 차이점이 있습니까?
답변:
나는 말할 것이다 검사가 필요하다 해시 코드 . 그러나 모든 해시 코드가 좋은 체크섬을 만드는 것은 아닙니다.
체크섬에는 특별한 목적이 있습니다. --- 데이터의 무결성을 확인하거나 확인 합니다 (일부는 오류 수정 을 허용하여 그 이상을 할 수 있음 ). "좋은"체크섬은 계산하기 쉽고 여러 유형의 데이터 손상 (예 : 1, 2, 3 개의 잘못된 비트)을 감지 할 수 있습니다.
해시 코드는 단순히 데이터를 어떤 값에 매핑 하는 수학 함수 를 설명 합니다. 데이터 구조 (예 : 해시 테이블)에서 인덱싱 수단으로 사용되는 경우 낮은 충돌 확률이 바람직합니다.
그들 각각 뒤에는 다른 목적이 있습니다.
실제로 동일한 기능이 두 가지 목적 모두에 좋은 경우가 많습니다. 특히, 암호화 된 강력한 해시 코드는 계산 비용을 감당할 수 있다면 좋은 체크섬입니다 (임의 오류가 강력한 해시 함수를 손상시키는 것은 거의 불가능합니다).
실제로 몇 가지 차이점이 있습니다.
해시 코드와 체크섬은 모두 데이터 항목에서 짧은 숫자 값을 만드는 데 사용됩니다. 차이점은 데이터 항목을 약간 수정하더라도 체크섬 값이 변경되어야한다는 것입니다. 해시 값의 경우 요구 사항은 실제 데이터 항목에 고유 한 해시 값이 있어야한다는 것입니다.
명확한 예는 문자열입니다. 문자열의 체크섬에는 모든 비트가 포함되어야하며 순서가 중요합니다. 반면에 해시 코드는 종종 제한된 길이의 접두사의 체크섬으로 구현 될 수 있습니다. 즉, "aaaaaaaaaaba"는 "aaaaaaaaaaab"와 동일하게 해시되지만 해시 알고리즘은 이러한 충돌을 처리 할 수 있습니다.
Wikipedia는 다음과 같이 잘 설명합니다.
체크섬 함수는 해시 함수, 지문, 무작위 화 함수 및 암호화 해시 함수와 관련이 있습니다. 그러나 이러한 각 개념에는 서로 다른 응용 프로그램이 있으므로 디자인 목표가 다릅니다. 체크 디지트 및 패리티 비트는 작은 데이터 블록 (예 : 사회 보장 번호, 은행 계좌 번호, 컴퓨터 단어, 1 바이트 등)에 적합한 체크섬의 특수한 경우입니다. 일부 오류 수정 코드는 일반적인 오류를 감지 할뿐만 아니라 특정 경우 원본 데이터를 복구 할 수있는 특수 체크섬을 기반으로합니다.
체크섬은 우발적 인 변경으로부터 보호합니다.
암호화 해시는 매우 의욕적 인 공격자로부터 보호합니다.
와이어에서 비트를 보낼 때 실수로 일부 비트가 뒤집어 지거나 삭제되거나 삽입 될 수 있습니다. 수신자가 이와 같은 사고를 감지 (또는 때때로 수정) 할 수 있도록 발신자는 체크섬을 사용합니다.
그러나 누군가가 능동적이고 지능적으로 메시지를 수정하고 있다고 가정하고 이런 종류의 공격자로부터 보호하고 싶다면 암호화 해시를 사용하십시오 (해시에 암호화 방식으로 서명하거나 보조 채널 등을 사용하는 것은 무시합니다). 질문은 이것에서 벗어나지 않는 것 같습니다).
해싱과 체크섬은 둘 다 파일의 내용을 기반으로 값을 생성한다는 점에서 비슷하지만 해싱은 체크섬을 만드는 것과 다릅니다. 체크섬은 데이터의 무결성을 확인 (확인)하고 데이터 전송 오류를 식별하기위한 것이며 해시는 데이터의 고유 한 디지털 지문을 생성하도록 설계되었습니다.
출처 : CompTIA ® Security + 네트워크 보안 기본 사항 가이드-제 5 판-Mark Ciampa-페이지 191
해시 코드와 체크섬 함수의 차이점은 서로 다른 목적으로 설계되었다는 것입니다.
체크섬은 입력 내용이 변경 되었는지 확인 하는 데 사용됩니다 .
해시 코드 찾아 사용할 경우 입력에서 무언가 변경 및 가능한 개별 해시 코드 값 사이의 많은 "거리"로서 가지고.
또한 해시 코드 값의 트리 / 클러스터 / 버킷을 조기에 형성하는 기능과 같이이 규칙과 반대되는 해시 함수에 대한 추가 요구 사항 이있을 수 있습니다.
공유 된 초기 무작위 화를 추가하면 최신 암호화 / 키 교환에 대한 개념을 얻을 수 있습니다.
확률 정보 :
예를 들어 입력 데이터가 실제로 항상 변경된다고 가정합니다 (시간의 100 %). 그리고 1 비트 해시 / 체크섬 값을 생성하는 "완벽한"해시 / 체크섬 함수가 있다고 가정 해 보겠습니다. 따라서 무작위 입력 데이터에 대해 50 %의 다른 해시 / 체크섬 값을 얻게됩니다.
임의의 입력 데이터에서 정확히 1 비트가 변경된 경우 입력 데이터의 크기에 관계없이 시간의 100 %를 감지 할 수 있습니다.
임의 입력 데이터의 2 비트가 변경된 경우 두 변경 사항이 서로를 무력화 할 수 있고 해시 / 체크섬 함수가 입력 데이터에서 실제로 2 비트가 다른 것을 감지하지 못하므로 "변경"을 감지 할 확률을 2로 나눕니다. .
...
사용자의 입력 데이터의 비트 수는 사용자의 해시 / 체크섬 값의 비트 수보다 여러 배 큰 경우, 실제로는 서로 다른 입력 값에 대해 서로 다른 해시 / 체크섬 값을 얻고,이 수단은, 귀하의 확률이 감소하고 도착 하지 않은 것이다 상수 .
파일이나 데이터가 손상되지 않았는지 확인 하는 데 사용할 수있는 파일 또는 데이터 조각에 대해 생성 된 코드 (숫자 또는 기타)를 참조 할 때 체크섬이라는 단어를 사용하는 경향이 있습니다 . 내가 접하는 가장 일반적인 사용법은 네트워크를 통해 전송 된 파일이 (의도적으로 또는 다른 방식으로) 변경되지 않았는지 확인하는 것입니다.
Redis 클러스터 데이터 샤딩에서는 a hash slot
를 사용하여 이동할 노드를 결정합니다. 아래의 모듈로 연산을 예로 들어 보겠습니다.
123 % 9 = 6
122 % 9 = 5
141 % 9 = 6
는 6
서로 다른 입력에 걸쳐 두 번납니다. 해시의 목적은 단순히 입력 값을 출력 값에 매핑하는 것이며 고유성은 거래의 일부가 아닙니다. 따라서 동일한 출력을 생성하는 두 개의 다른 입력은 해시 세계에서 괜찮습니다.
반면 체크섬은 매핑이 아니라 데이터 손상을 감지하기위한 것이기 때문에 입력의 한 비트가 변경 되더라도 출력을 달라야합니다. 따라서 동일한 출력을 생성하는 두 개의 다른 입력은 체크섬에서 허용되지 않습니다.
체크섬은 단순히 데이터 필드에서 oring (논리적 덧셈, 즉 합계)에 의해 생성 된 숫자입니다. 체크섬은 생성 된 데이터 필드 내에서 비트 또는 비트 수의 손상을 감지 할 수있는 기능이 있습니다. 즉, 모든 오류를 확인하고 수정할 수 없습니다. 체크섬의 크기가 원래 데이터보다 작기 때문에 체크섬은 해시입니다. 예, 체크섬이 데이터 필드의 비트 위치에 전혀 민감하지 않기 때문에 충돌이 발생합니다.
CRC (Cyclic Redundancy Check)는 매우 다르고 더 복잡 하며 체크섬이라고 부르지 않습니다. 생성 된 데이터 필드 내에서 선택한 수의 개별 손상된 비트를 수정하는 기능을 가진 다항식 시리즈의 응용 프로그램입니다. CRC를 생성하면 체크섬과 달리 원래 데이터 필드보다 크기가 더 커집니다. 따라서 "중복"이라는 단어가 포함 된 이름과 오류 수정 기능에 대해 지불하는 비용이 포함됩니다. 따라서 CRC는 해시가 아니며 혼동하거나 체크섬으로 명명해서는 안됩니다. 중복성이 반드시 원본 데이터의 크기에 추가되기 때문입니다.