제 생각에는 많은 사람들이 2007년부터 미국 NIST(National Institute of Standards and Technology)가 SHA-1 및 SHA-2 알고리즘 제품군을 대체할 해시 알고리즘을 개발하기 위한 경쟁을 개최해 왔다는 것을 알고 있습니다. 그러나이 주제는 어떤 이유로 사이트에서 관심을 끌지 못합니다. 이것은 실제로 나를 당신에게 데려온 것입니다. 해시 알고리즘에 대한 일련의 기사를 알려드립니다. 이 주기에서 우리는 해시 함수의 기초를 함께 연구하고 가장 유명한 해시 알고리즘을 고려하고 SHA-3 경쟁의 분위기에 뛰어들고 우승을 주장하는 알고리즘을 고려하고 확실히 테스트할 것입니다. 또한 가능하면 러시아 해싱 표준이 고려됩니다.

자신에 대해

정보보안학과 학생입니다.

해싱 정보

현재 해싱을 사용하지 않고 완전한 암호화 응용 프로그램은 거의 없습니다.
해시 함수는 일반적으로 이진 알파벳으로 작성된 임의의 메시지 또는 데이터 집합을 컨볼루션이라고 하는 고정 길이 비트 조합으로 "압축"하도록 설계된 함수입니다. 해시 함수는 통계 실험, 논리 장치 테스트, 빠른 검색을 위한 알고리즘 구축 및 데이터베이스의 레코드 무결성 검사에 다양한 응용 프로그램을 가지고 있습니다. 해시 함수의 주요 요구 사항은 임의의 인수 값을 선택하여 해당 값 분포의 균일성입니다.
암호화 해시 함수는 암호화 방식으로 안전한 모든 해시 함수입니다. 즉, 암호화 응용 프로그램과 관련된 여러 요구 사항을 충족합니다. 암호화에서 해시 함수는 다음 문제를 해결하는 데 사용됩니다.
- 전송 또는 저장 중 데이터 무결성 제어 시스템 구축,
- 데이터 소스 인증.

해시 함수는 모든 함수입니다. h:X -> Y, 쉽게 계산할 수 있고 모든 메시지에 대해 의미 h(M) = H(컨볼루션)비트 길이가 고정되어 있습니다. 엑스- 모든 메시지 세트, 와이- 고정 길이의 이진 벡터 세트.

일반적으로 해시 함수는 소위 1단계 축소 함수를 기반으로 구축됩니다. y \u003d f (x 1, x 2)두 개의 변수, 여기서 x 1, x2그리고 와이- 이진 길이 벡터 , N그리고 N각각, 그리고 N는 컨볼루션의 길이이며, - 메시지 블록 길이.
값을 얻으려면 시(남)메시지는 먼저 길이 블록으로 나뉩니다. (동시에 메시지의 길이가 의 배수가 아닌 경우 그런 다음 마지막 블록은 전체 블록에 어떤 특별한 방식으로 보완된 다음 수신된 블록에 추가됩니다. 남 1 , 남 2 ,.., 남컨볼루션을 계산하기 위해 다음과 같은 순차적 절차를 적용합니다.

호 \u003d v,
H i = f(M i , H i-1), i = 1,.., N,
h(M) = H N

여기 V- 일부 상수, 종종 초기화 벡터라고 합니다. 그녀는 나온다
여러 가지 이유로 인해 비밀 상수 또는 임의 데이터 세트(예: 날짜 및 시간 선택)가 될 수 있습니다.
이 접근 방식을 사용하면 해시 함수의 속성이 1단계 축소 함수의 속성에 의해 완전히 결정됩니다.

암호화 해시 함수에는 키가 있는 것과 키가 없는 것의 두 가지 중요한 유형이 있습니다. 키 해시 함수를 메시지 인증 코드라고 합니다. 데이터 소스의 정확성과 상호 신뢰하는 사용자가 있는 시스템의 데이터 무결성을 추가 수단 없이 보장할 수 있습니다.
키가 없는 해시 함수를 오류 감지 코드라고 합니다. 데이터 무결성을 보장하기 위해 추가 수단(예: 암호화)을 사용하여 가능합니다. 이러한 해시 함수는 신뢰하는 사용자와 신뢰하지 않는 사용자가 모두 있는 시스템에서 사용할 수 있습니다.

통계 속성 및 요구 사항 정보

내가 말했듯이 해시 함수의 주요 요구 사항은 인수 값을 무작위로 선택하여 값을 균일하게 분포시키는 것입니다. 암호화 해시 함수의 경우 인수가 조금만 변경되어도 함수 값이 크게 변경되는 것도 중요합니다. 이것을 눈사태 효과라고 합니다.

에게 주요 기능해싱에는 다음과 같은 요구 사항이 있습니다.
- 제작 불가능,
- 수정 불가능.

첫 번째 요구 사항은 메시지를 올바른 접기 값과 일치시키는 것이 매우 어렵다는 것을 의미합니다. 두 번째는 알려진 접기 값이 있는 주어진 메시지에 대해 올바른 접기 값을 가진 다른 메시지를 일치시키는 높은 복잡성입니다.

키리스 기능에 대한 요구 사항은 다음과 같습니다.
- 단방향,
- 충돌에 대한 저항,
- 두 번째 프로토타입 찾기에 대한 저항.

단방향성은 주어진 컨볼루션 값으로 메시지를 찾는 높은 복잡성으로 이해됩니다. 에 유의해야 합니다. 이 순간입증된 단방향 해시 함수를 사용하지 않습니다.
충돌 저항은 동일한 접기 값을 가진 한 쌍의 메시지를 찾기가 어려운 것으로 이해됩니다. 일반적으로 알고리즘의 진부화와 빠른 교체의 필요성에 대한 첫 번째 신호 역할을 하는 암호 분석가가 충돌을 구성하는 방법을 찾는 것입니다.
두 번째 프리이미지를 찾는 것에 대한 저항은 알려진 폴드 값을 가진 주어진 메시지에 대해 동일한 폴드 값을 가진 두 번째 메시지를 찾는 어려움으로 이해됩니다.

이것은 미래에 우리에게 유용 할 이론적인 부분이었습니다 ...

인기 있는 해시 알고리즘 정보

알고리즘 CRC16/32- 체크섬(암호화 변환 아님).

알고리즘 MD2/4/5/6. RSA 알고리즘의 저자 중 한 명인 Ron Rivest가 만든 것입니다.
MD5 알고리즘은 한때 매우 인기가 있었지만 해킹의 첫 번째 전제 조건은 90년대 후반에 나타났으며 지금은 그 인기가 급격히 감소하고 있습니다.
MD6 알고리즘은 건설적인 관점에서 매우 흥미로운 알고리즘입니다. SHA-3 대회에 후보로 지명되었지만 불행히도 저자는 이를 표준으로 가져오지 못했고 이 알고리즘은 2차 라운드에 통과한 후보자 목록에 없습니다.

눈금자 알고리즘 오늘날 널리 사용되는 알고리즘. SHA-1에서 SHA-2 버전 표준으로의 적극적인 전환이 있습니다. SHA-2는 SHA224, SHA256, SHA384 및 SHA512 알고리즘의 집합적인 이름입니다. SHA224 및 SHA384는 본질적으로 각각 SHA256 및 SHA512와 유사하며, 컨볼루션이 계산된 후에만 해당 정보의 일부가 삭제됩니다. 장비의 구형 모델과의 호환성을 보장하기 위해서만 사용해야 합니다.

러시아 표준 - GOST 34.11-94.

다음 기사에서

MD 알고리즘(MD4, MD5, MD6) 개요.

문학

A. P. Alferov, 암호화 기초.

Bruce Schneier, 응용 암호화.

해싱은 데이터 주소를 지정하는 특별한 방법입니다(일종의 간격 알고리즘). 고유 키( 열쇠 ) 필요한 정보를 빠르게 찾을 수 있습니다.

기본 컨셉

해시 테이블

해시 테이블은 어떤 함수(해시 함수)에 의해 주어진 특별한 주소를 가진 일반 배열입니다.

해시 함수

데이터 항목의 키를 테이블의 일부 인덱스로 변환하는 함수( 해시 테이블), 호출 해시 함수 또는 해시 함수 :

= 시간 (열쇠 );

어디 열쇠- 컨버터블 키, - 결과 테이블 인덱스, 즉 키는 예를 들어 정수( 해시 주소 ), 나중에 데이터에 액세스하는 데 사용됩니다.

이러한 방식의 해싱은 키 값을 사용하여 특수 테이블에서의 위치를 ​​결정하는 것과 관련된 기술입니다.

그러나 확산 기능은 몇몇의 고유 키 값은 동일한 위치 값을 제공합니다 해시 테이블에서. 두 개 이상의 키가 동일한 인덱스(해시 주소)를 받는 상황을 호출합니다. 충돌 (충돌) 해싱.따라서 해싱 체계는 다음을 포함해야 합니다. 충돌 해결 알고리즘 , 행동의 순서를 정의하는 경우, 위치 =시간(열쇠)은(는) 이미 다른 키를 가진 항목이 차지하고 있습니다.

사용되는 해시 함수가 다른 많은 해시 체계가 있습니다. 시간(열쇠) 및 충돌 해결 알고리즘.

해시 함수를 지정하는 가장 일반적인 방법은 다음과 같습니다. 분할 방식.

초기 데이터는 다음과 같습니다. - 일부 정수 키 열쇠그리고 테이블 사이즈 . 이 함수의 결과는 이 키를 테이블 크기로 나눈 나머지입니다. C/C++ 프로그래밍 언어에서 이러한 함수의 일반적인 형식:

정수 시간 (정수 열쇠 , 정수 ) {

을 위한 = 10 해시 함수는 키의 최하위 숫자를 반환합니다.

m=100인 경우 해시 함수는 키의 최하위 숫자 2개를 반환합니다.

고려된 예에서 해시 함수 =시간(열쇠) 키가 있는 항목을 찾거나 처음에 테이블에 배치할 위치만 정의합니다. 열쇠. 다음으로 일종의 해싱 스키마(알고리즘)를 사용해야 합니다.

해싱 체계

대부분의 문제에서 둘 이상의 키는 동일한 방식으로 해시되지만 해시 테이블에서 동일한 셀을 차지할 수는 없습니다. 두 가지가있다 가능한 옵션: 새 키에 대해 다른 위치를 찾거나 이 인덱스에 매핑된 모든 키가 배치되는 각 해시 테이블 인덱스에 대해 별도의 목록을 만듭니다.

이러한 변형은 두 가지 고전적인 해싱 체계입니다.

    선형 탐색을 통한 개방 주소 지정에 의한 해싱 - 선의 조사 열려 있는 주소 지정.

    체인 해싱(목록 포함) 또는 소위 다차원 해싱 - 연쇄 ~와 함께 분리된 기울기;

선형 프로빙을 사용한 개방형 주소 지정 방법 . 초기에는 일반 1차원 배열인 해시 테이블의 모든 셀이 비어 있는 것으로 표시됩니다. 따라서 새 키를 추가할 때 해당 셀이 점유되어 있는지 확인합니다. 셀이 사용 중이면 알고리즘은 빈 공간("열린 주소")이 있을 때까지 원을 검색합니다.

저것들. 동종 키가 있는 요소는 결과 인덱스 근처에 배치됩니다.

앞으로 검색을 하면 먼저 키로 위치를 찾아 테이블에서 키가 일치하지 않으면 충돌 해결 알고리즘에 따라 위치부터 시작하여 후속 검색이 수행됩니다. . .

체인 방식 지배적인 전략이다 . 이 경우 선택한 해시 함수에서 얻은 시간(열쇠)=, 목록의 해시 테이블에 대한 인덱스로 처리됩니다. 키 먼저 열쇠다음 항목은 위치에 매핑됩니다. = 시간(열쇠) 테이블. 위치가 비어 있으면 키가 있는 요소가 그 안에 배치됩니다. 열쇠, 사용 중이면 충돌 해결 알고리즘이 작동하여 다음에서 시작하는 목록에 이러한 키가 배치됩니다. -해시 테이블의 해당 셀. 예를 들어

결과적으로 연결 목록 또는 트리 배열의 테이블이 있습니다.

해시 테이블을 채우는(읽기) 프로세스는 간단하지만 요소에 액세스하려면 다음 작업이 필요합니다.

지수 계산 ;

해당 체인에서 검색합니다.

새 요소를 추가할 때 검색을 향상시키려면 목록의 끝이 아니라 순서와 함께 삽입 알고리즘을 사용할 수 있습니다. 요소를 추가하다 올바른 장소.

선형 프로빙을 사용한 직접 주소 지정 방법 구현의 예 . 초기 데이터는 선언된 구조 유형의 7개 레코드(간단함을 위해 정보 부분은 정수 데이터로만 구성됨)입니다.

인트키; // 열쇠

정보; // 정보

(59.1), (70.3), (96.5), (81.7), (13.8), (41.2), (79.9); 해시 테이블 크기 m=10.

해시 함수 =시간(데이터) =데이터.열쇠%십; 저것들. 10으로 나눈 나머지 - .

초기 데이터를 기반으로 해시 테이블을 순차적으로 채웁니다.

처음 5개 키를 해싱하면 다른 인덱스(해시 주소)가 생성됩니다.

첫 번째 충돌은 키 81과 41 사이에서 발생합니다. 인덱스가 1인 위치가 점유됩니다. 따라서 가장 가까운 여유 공간을 찾기 위해 해시 테이블을 살펴봅니다. 이 경우 = 2.

다음 키(79)는 또한 충돌을 생성합니다. 위치 9는 이미 점유되어 있습니다. 알고리즘의 효율성이 급격히 떨어집니다. 빈 자리를 찾는 데 6번의 시도(비교)가 걸렸고, 인덱스는 무료로 밝혀졌습니다. = 4.

이 방법의 총 샘플 수는 요소당 1에서 n-1 샘플이며, 여기서 n은 해시 테이블의 크기입니다.

연쇄 방법의 구현 이전 예의 경우. 목록 요소(단방향)에 대한 구조적 유형을 선언합니다.

인트키; // 열쇠

정보; // 정보

잽*다음; // 포인터 다음 요소목록에

초기 데이터를 기반으로 다음을 추가하여 해시 테이블을 순차적으로 채웁니다. 새로운 요소장소가 이미 사용 중인 경우 목록의 끝까지.

앞의 경우와 같이 처음 5개 키를 해싱하면 9, 0, 6, 1 및 3과 같은 다른 인덱스(해시 주소)가 제공됩니다.

충돌이 발생하면 새 요소가 목록 끝에 추가됩니다. 따라서 키 41이 있는 요소는 키 81이 있는 요소 뒤에 배치되고 키 79가 있는 요소는 키 59가 있는 요소 뒤에 배치됩니다.

개별 작업

1. 이진 트리.난수 생성 프로그램을 사용하여 1에서 99까지 10개의 값을 가져와 이진 트리를 만듭니다.

우회하세요:

1.a 왼쪽에서 오른쪽으로 순회: 왼쪽-루트-오른쪽: 먼저 왼쪽 하위 트리를 방문한 다음 루트, 마지막으로 오른쪽 하위 트리를 방문합니다.

(또는 그 반대로, 오른쪽에서 왼쪽으로: Right-Root-Left)

1.b 위에서 아래로 순회: Root-Left-Right: 루트를 방문하여 하위 트리로 이동합니다.

1.in 아래에서 위로 순회: Left-Right-Root: 하위 트리 이후 루트 방문

다양한 산업 분야에서 정보 기술해시 함수의 용도를 찾습니다. 한편으로는 사용자 간의 데이터 교환과 특정 목적에 사용되는 파일 처리를 크게 단순화하고 다른 한편으로는 해당 리소스에 대한 액세스 제어를 보장하기 위한 알고리즘을 최적화하도록 설계되었습니다. 해시 함수는 다음 중 하나입니다. 핵심 도구데이터의 암호 보호를 보장하고 EDS를 사용하여 서명된 문서 교환을 구성합니다. 파일을 캐시할 수 있는 많은 표준이 있습니다. 그들 중 많은 사람들이 러시아 전문가에 의해 개발되었습니다. 해시 함수의 유형은 무엇입니까? 실제 적용을 위한 주요 메커니즘은 무엇입니까?

그것은 무엇입니까?

먼저 해시 함수의 개념을 살펴보겠습니다. 이 용어는 일반적으로 수학적 방법을 사용하여 특정 양의 정보를 더 짧은 문자 시퀀스로 변환하는 알고리즘으로 이해됩니다. 해시 함수의 실질적인 중요성은 다양한 영역에서 추적할 수 있습니다. 따라서 파일과 프로그램의 무결성을 검사할 때 사용할 수 있습니다. 또한 암호화 알고리즘에는 암호화 해시 함수가 사용됩니다.

형질

연구 중인 알고리즘의 주요 특성을 살펴보겠습니다. 이들 중:

  • 원래 길이의 데이터를 더 짧은 문자 시퀀스로 변환하기 위한 내부 알고리즘의 존재;
  • 암호화 검증을 위한 개방성;
  • 원본 데이터를 안전하게 암호화할 수 있는 알고리즘의 존재
  • 작은 것을 사용하여 암호 해독에 대한 적응성 컴퓨팅 파워.

해시 함수의 다른 중요한 속성은 다음과 같습니다.

  • 임의 길이의 초기 데이터 배열을 처리하는 기능;
  • 고정 길이의 해시 블록을 생성합니다.
  • 출력에서 함수 값을 고르게 분포시킵니다.

고려 중인 알고리즘은 1비트 수준에서 입력 데이터에 대한 민감도도 가정합니다. 즉, 상대적으로 말해서 소스 문서에서 최소한 1글자가 변경되더라도 해시 함수는 다르게 보일 것입니다.

해시 함수에 대한 요구 사항

특정 영역에서 실제 사용을 위한 해시 함수에는 여러 가지 요구 사항이 있습니다. 첫째, 해당 알고리즘은 해시된 문서의 내부 구조 변경에 민감해야 합니다. 즉, 해시 함수는 다음과 같이 인식되어야 합니다. 텍스트 파일, 단락 순열, 하이픈 넣기. 한편으로는 문서의 내용이 바뀌지 않고, 다른 한편으로는 구조가 수정되어 이 과정을 해싱 시 인식해야 한다. 두 번째로 고려 중인 알고리즘은 역 연산(해시를 원본 문서로 변환)이 실제로 불가능하도록 데이터를 변환해야 합니다. 셋째, 해시 함수는 해시 형태로 동일한 문자 시퀀스를 형성할 가능성, 즉 소위 충돌의 출현 가능성을 실질적으로 배제하는 이러한 알고리즘의 사용을 포함해야 합니다. 우리는 그들의 본질을 조금 후에 고려할 것입니다.

해시 함수 알고리즘이 충족해야 하는 언급된 요구 사항은 주로 복잡한 수학적 접근 방식을 사용하여 달성할 수 있습니다.

구조

고려된 기능의 구조가 무엇인지 연구해 보겠습니다. 위에서 언급했듯이 고려 중인 알고리즘의 주요 요구 사항 중 하나는 단방향 암호화의 제공입니다. 해시만 있는 사람은 실제로 이를 기반으로 한 원본 문서를 얻을 수 없습니다.

그러한 목적으로 사용되는 해시 함수는 어떤 구조로 나타낼 수 있습니까? 컴파일의 예는 다음과 같습니다. H(해시, 즉, 해시) = f(T(텍스트), H1), 여기서 H1은 텍스트 처리 알고리즘 T입니다. 이 기능 H1에 대한 지식 없이는 T를 본격적인 파일로 여는 것이 실질적으로 불가능하도록 T를 해시합니다.

해시 함수의 실제 사용: 파일 다운로드

이제 실제로 해시 함수를 사용하는 옵션에 대해 자세히 살펴보겠습니다. 인터넷 서버에서 파일을 다운로드하기 위한 스크립트를 작성할 때 적절한 알고리즘을 사용할 수 있습니다.

대부분의 경우 각 파일에 대해 특정 체크섬이 결정됩니다. 이것이 해시입니다. 서버에 있고 사용자의 컴퓨터에 다운로드된 개체에 대해 동일해야 합니다. 그렇지 않으면 파일이 열리지 않거나 잘못 시작될 수 있습니다.

해시 함수 및 디지털 서명

해시 함수의 사용은 디지털 서명이 포함된 문서 교환을 구성하는 데 일반적입니다. 이 경우 서명된 파일은 받는 사람이 정품인지 확인할 수 있도록 해시됩니다. 해시 함수가 구조에 공식적으로 포함되어 있지는 않지만 전자 열쇠, 예를 들어 eToken과 같이 문서에 서명하는 하드웨어의 플래시 메모리에 고정될 수 있습니다.

전자 서명은 공개 키와 개인 키를 사용하여 파일을 암호화하는 것입니다. 즉, 개인키로 암호화된 메시지를 원본파일에 첨부하고, 전자서명을 통해 검증한다. 공개 키. 두 문서의 해시 함수가 일치하면 받는 사람의 파일이 진본으로 인식되고 보낸 사람의 서명이 올바른 것으로 인식됩니다.

위에서 언급했듯이 해싱은 EDS의 직접적인 구성 요소는 아니지만 사용을 위한 알고리즘을 매우 효과적으로 최적화할 수 있습니다. 전자 서명. 따라서 문서 자체가 아닌 해시만 암호화할 수 있습니다. 결과적으로 파일 처리 속도가 크게 증가함과 동시에 보다 효과적인 EDS 보호 메커니즘을 제공할 수 있게 됩니다. 이 경우 컴퓨팅 작업에 중점을 두는 것이 초기 데이터 처리가 아니라 서명의 암호화 강도. 또한 해시 함수를 사용하면 텍스트뿐만 아니라 다양한 데이터 유형에 서명할 수 있습니다.

비밀번호 검사기

해싱을 적용할 수 있는 또 다른 영역은 특정 파일 리소스에 대한 액세스를 차별화하기 위해 설정된 암호 확인 알고리즘 구성입니다. 특정 유형의 해시 함수가 이러한 문제를 해결하는 데 어떻게 관련될 수 있습니까? 매우 간단합니다.

사실 액세스가 차별화되는 대부분의 서버에서 비밀번호는 해시된 값의 형태로 저장됩니다. 이것은 매우 논리적입니다. 암호가 원래 텍스트 형식으로 제공된 경우 암호에 액세스한 해커가 비밀 데이터를 쉽게 읽을 수 있습니다. 결국 해시를 기반으로 암호를 계산하는 것은 쉽지 않습니다.

고려 중인 알고리즘을 사용할 때 사용자 액세스를 어떻게 확인합니까? 사용자가 입력한 비밀번호는 서버에 저장된 해시 함수에 고정된 내용과 대조됩니다. 텍스트 블록의 값이 일치하면 사용자는 리소스에 필요한 액세스 권한을 얻습니다.

가장 간단한 해시 함수를 암호 검사 도구로 사용할 수 있습니다. 그러나 실제로 IT 전문가는 복잡한 다단계 암호화 알고리즘을 가장 자주 사용합니다. 일반적으로 보안 채널 데이터 전송 표준을 사용하여 보완되므로 해커가 해시된 텍스트 블록에 대해 확인되기 전에 사용자의 컴퓨터에서 서버로 전송된 암호를 감지하거나 알아낼 수 없습니다.

해시 함수 충돌

해시 함수 이론에서는 충돌과 같은 현상이 제공됩니다. 그 본질은 무엇입니까? 해시 충돌은 두 개의 다른 파일이 동일한 해시 코드를 갖는 상황입니다. 이는 대상 문자 시퀀스의 길이가 작은 경우 가능합니다. 이 경우 해시 일치의 확률이 높아집니다.

특히 충돌을 피하기 위해 "해시 함수 해싱"이라는 이중 알고리즘을 사용하는 것이 좋습니다. 여기에는 개방 및 폐쇄 코드의 형성이 포함됩니다. 중요한 문제를 해결하는 많은 프로그래머는 해시 함수가 필요하지 않은 경우 해시 함수를 사용하지 않고 특정 키와의 최상의 호환성을 위해 항상 해당 알고리즘을 테스트할 것을 권장합니다.

등장의 역사

해시 함수 이론의 창시자는 Carter, Wegman, Simonson, Bierbrouer 연구원으로 간주될 수 있습니다. 첫 번째 버전에서 해당 알고리즘은 고유한 길이의 문자 시퀀스에 대한 고유한 이미지를 생성하는 도구로 사용되었으며 이후에는 진위 여부를 식별하고 확인할 수 있습니다. 차례로 지정된 기준에 따라 해시의 길이는 30-512비트여야 합니다. 스페셜로 유용한 재산적절한 기능, 빠른 파일 검색 또는 정렬을 위한 리소스로 사용하기에 적합한지 고려했습니다.

인기 있는 해싱 표준

이제 대중적인 표준 해시 함수가 무엇인지 생각해 봅시다. 그 중 하나가 CRC입니다. 이 알고리즘은 순환 코드, 체크섬이라고도 합니다. 이 표준은 단순함과 동시에 다용성을 특징으로 합니다. 이를 통해 가장 광범위한 데이터를 해시할 수 있습니다. CRC는 가장 일반적인 비암호화 알고리즘 중 하나입니다.

차례로 MD4 및 MD5 표준은 암호화에 널리 사용됩니다. 또 다른 인기 있는 암호화 알고리즘은 SHA-1입니다. 특히 MD5보다 큰 해시 크기가 160비트인 것이 특징이다. 이 규격은 128비트를 지원한다. 해시 함수의 사용을 규제하는 러시아 표준이 있습니다. GOST R 34.11-94와 이를 대체한 GOST R 34.11-2012입니다. 러시아 연방에서 채택한 알고리즘이 제공하는 해시 값은 256비트임을 알 수 있다.

문제의 표준은 다양한 방식으로 분류될 수 있습니다. 예를 들어 블록 및 특수 알고리즘을 사용하는 것이 있습니다. 첫 번째 유형의 표준을 기반으로 한 계산의 단순성은 종종 저속을 동반합니다. 따라서 블록 알고리즘의 대안으로 필요한 계산 연산이 적은 알고리즘을 사용할 수 있습니다. 고속 표준, 특히 위에서 언급한 MD4, MD5, SHA를 참조하는 것이 관례입니다. SHA의 예에서 특수 해싱 알고리즘의 세부 사항을 더 자세히 살펴보겠습니다.

SHA 알고리즘의 특징

SHA 표준에 기반한 해시 함수의 사용은 도구 개발 분야에서 가장 많이 수행됩니다. 전자 서명 DSA 문서. 위에서 언급했듯이, SHA 알고리즘 160비트 해시를 지원합니다(문자 시퀀스의 소위 "다이제스트" 제공). 처음에 고려 중인 표준은 데이터 배열을 512비트 블록으로 나눕니다. 필요한 경우 마지막 블록의 길이가 지정된 숫자에 도달하지 않으면 파일 구조가 1로 채워지고 필요한 수의 0이 채워집니다. 또한 해당 블록의 끝에는 메시지의 길이를 고정하는 코드가 입력됩니다. 고려 중인 알고리즘은 32비트로 표현되는 3개의 단어가 처리되는 80개의 논리 기능을 포함합니다. SHA 표준은 또한 4개의 상수 사용을 제공합니다.

해싱 알고리즘 비교

위에서 논의한 러시아 표준 GOST R 34.11-94와 미국 SHA의 특성을 비교하는 예를 사용하여 다른 표준과 관련된 해시 함수의 속성이 어떻게 상관되는지 연구해 보겠습니다. 우선, 러시아 연방에서 개발된 알고리즘은 1주기당 4개의 암호화 작업을 구현한다는 점에 유의해야 합니다. 이것은 128 라운드에 해당합니다. 차례로, 1라운드 동안 SHA를 사용할 경우, 총 80라운드 동안 약 20개의 명령을 계산할 것으로 예상되므로, SHA를 사용하면 1사이클 내에 512비트의 초기 데이터를 처리할 수 있습니다. 러시아 표준은 256비트 데이터 주기에서 작업을 수행할 수 있습니다.

최신 러시아 알고리즘의 세부 사항

위에서 GOST R 34.11-94 표준이 GOST R 34.11-2012 Stribog라는 새로운 표준으로 대체되었음을 확인했습니다. 그 구체적인 내용을 좀 더 자세히 살펴보자.

을 통해 이 표준위에서 논의한 알고리즘의 경우와 같이 암호화 해시 기능을 구현할 수 있습니다. 최신 러시아 표준은 512비트 양의 입력 데이터 블록을 지원합니다. GOST R 34.11-2012의 주요 장점:

  • 암호 해독에 대한 높은 수준의 보호;
  • 입증된 설계의 사용으로 뒷받침되는 신뢰성;
  • 해시 함수의 즉각적인 계산, 함수 구성을 복잡하게 만들고 계산 속도를 늦추는 알고리즘의 변환 부재.

새로운 러시아 표준의 주목할만한 이점 암호화 암호화규제 법률 조항에 명시된 가장 엄격한 기준을 충족하는 워크 플로 구성에서 사용할 수 있습니다.

암호화 해시 함수의 특수성

우리가 연구하고 있는 알고리즘 유형이 암호화 분야에서 어떻게 사용될 수 있는지 더 자세히 살펴보겠습니다. 해당 기능의 핵심 요구 사항은 위에서 언급한 충돌에 대한 저항입니다. 즉, 이러한 값이 이미 인접 알고리즘의 구조에 존재하는 경우 중복 해시 값이 생성되지 않아야 합니다. 위에 언급된 다른 기준도 암호화 기능에 의해 충족되어야 합니다. 회복의 이론적 가능성이 항상 있다는 것은 분명합니다. 소스 파일특히 사용 가능한 강력한 컴퓨팅 도구가 있는 경우 해시를 기반으로 합니다. 그러나 이 시나리오는 강력한 암호화 알고리즘 덕분에 최소화되어야 합니다. 따라서 계산 강도가 공식 2^(n/2)에 해당하면 해시 함수를 계산하기가 매우 어렵습니다.

암호화 알고리즘의 또 다른 중요한 기준은 초기 데이터 배열이 수정되는 경우 해시의 변경입니다. 위에서 우리는 암호화 표준이 1비트 수준의 민감도를 가져야 한다고 언급했습니다. 따라서 이 속성은 파일 액세스에 대한 안정적인 암호 보호를 보장하는 핵심 요소입니다.

반복 체계

이제 암호화 해싱 알고리즘을 구축하는 방법을 연구해 보겠습니다. 이 문제를 해결하기 위한 가장 일반적인 방법은 반복 순차 모델을 사용하는 것입니다. 이것은 입력 비트 수가 출력에 고정된 비트 수보다 훨씬 더 많은 소위 축소 기능의 사용을 기반으로 합니다.

물론 압축 기능은 필요한 암호화 강도 기준을 충족해야 합니다. 대화형 방식에서 입력 데이터 스트림을 처리하는 첫 번째 작업은 블록으로 나뉘며 그 크기는 비트 단위로 계산됩니다. 해당 알고리즘은 또한 주어진 비트 수의 임시 변수를 사용합니다. 잘 알려진 숫자가 첫 번째 값으로 사용되는 반면, 후속 데이터 블록은 출력에서 ​​해당 함수의 값과 결합됩니다. 해시 값은 첫 번째 값을 포함하여 전체 입력 스트림을 고려하는 마지막 반복의 비트 출력이 됩니다. 해싱의 소위 "눈사태 효과"가 제공됩니다.

반복 방식으로 구현된 해싱을 특징짓는 주요 어려움은 입력 스트림이 초기 데이터 배열이 분할되는 블록의 크기와 동일하지 않은 경우 해시 함수를 구성하기 어려운 경우가 있다는 것입니다. 그러나 이 경우 알고리즘은 해싱 표준으로 작성될 수 있으며 이를 통해 원래 스트림을 어떤 방식으로든 확장할 수 있습니다.

경우에 따라 반복 방식의 프레임워크 내에서 데이터 처리 프로세스에 소위 다중 패스 알고리즘이 포함될 수 있습니다. 그들은 훨씬 더 강렬한 "눈사태 효과"의 형성을 제안합니다. 이러한 시나리오에는 반복되는 데이터 배열의 형성이 포함되며 두 번째로 확장이 있습니다.

블록 알고리즘

압축 기능은 암호화가 수행되는 블록 알고리즘을 기반으로 할 수도 있습니다. 따라서 보안 수준을 높이기 위해 현재 반복에서 해싱 대상이 되는 데이터 블록을 키로 사용하고 그 이전에 압축 기능을 실행하면서 얻은 연산 결과를 입력으로 사용할 수 있습니다. . 결과적으로 마지막 반복은 알고리즘의 출력을 제공합니다. 해시의 보안은 관련된 알고리즘의 견고성과 관련이 있습니다.

그러나 위에서 언급했듯이 고려 다른 종류해시 함수, 블록 알고리즘은 종종 큰 컴퓨팅 성능을 사용해야 할 필요성을 동반합니다. 사용할 수 없는 경우 파일 처리 속도가 해시 함수 사용과 관련된 실용적인 문제를 해결하기에 충분하지 않을 수 있습니다. 동시에 필요한 암호화 강도는 소스 데이터 스트림을 사용하여 적은 수의 작업으로도 실현할 수 있습니다. 특히 우리가 고려한 알고리즘(MD5, SHA 및 러시아 암호화 암호화 표준)은 이러한 문제를 해결하는 데 적합합니다.

해시 란 무엇입니까?해시 함수는 정보를 특정 길이의 짧은 문자열로 수학적으로 변환하는 것입니다.

이것이 필요한 이유는 무엇입니까?해시 함수 분석은 종종 중요한 파일의 무결성을 확인하는 데 사용됩니다. 운영 체제, 중요한 프로그램, 중요한 데이터. 모니터링은 필요에 따라 정기적으로 수행할 수 있습니다.

어떻게 완료되었나요?먼저 제어해야 하는 파일의 무결성을 확인합니다. 각 파일에 대해 해시 값은 특수 알고리즘에 따라 계산되고 결과가 저장됩니다. 필요한 시간이 지나면 유사한 계산이 수행되고 결과가 비교됩니다. 값이 다르면 파일에 포함된 정보가 변경된 것입니다.

해시 함수에는 어떤 특성이 있어야 합니까?

  • 임의 길이의 데이터를 고정된 데이터로 변환할 수 있어야 합니다.
  • 암호화 강도를 조사할 수 있도록 공개 알고리즘이 있어야 합니다.
  • 즉, 결과에서 초기 데이터를 결정할 수 있는 수학적 가능성이 없어야 합니다.
  • 충돌을 "저항"해야 합니다. 즉, 다른 입력 데이터에 대해 동일한 값을 생성하지 않아야 합니다.
  • 큰 컴퓨팅 리소스가 필요하지 않아야 합니다.
  • 입력 데이터가 약간만 변경되어도 결과가 크게 변경되어야 합니다.

인기 있는 해싱 알고리즘은 무엇입니까?다음 해시 함수가 현재 사용 중입니다.

  • CRC는 순환 중복 코드 또는 체크섬을 나타냅니다. 알고리즘은 매우 간단하며 필요한 출력 길이에 따라 많은 변형이 있습니다. 암호화되지 않습니다!
  • MD 5는 매우 인기 있는 알고리즘입니다. 그를 좋아하다 이전 버전 MD 4는 암호화 기능입니다. 해시 크기는 128비트입니다.
  • SHA-1은 또한 매우 인기 있는 암호화 기능입니다. 해시 크기는 160비트입니다.
  • GOST R 34.11-94는 해시 함수를 계산하기 위한 러시아 암호화 표준입니다. 해시 크기는 256비트입니다.

시스템 관리자는 언제 이러한 알고리즘을 사용할 수 있습니까?종종 제조사의 웹사이트에서 프로그램, 음악, 영화 또는 기타 정보와 같은 콘텐츠를 다운로드할 때 특정 알고리즘을 사용하여 계산된 체크섬 값이 있습니다. 보안상의 이유로 다운로드 후 해시 함수를 독립적으로 계산하고 해당 값을 사이트 또는 파일 첨부 파일에 표시된 값과 비교해야 합니다. 당신은 이것을 한 적이 있습니까?

해시를 계산하는 데 더 편리한 것은 무엇입니까?이제 유료 및 무료 사용이 가능한 많은 유틸리티가 있습니다. 저는 개인적으로 HashTab을 좋아했습니다. 첫째, 설치하는 동안 유틸리티가 파일 속성의 탭으로 포함되고, 둘째, 많은 해싱 알고리즘을 선택할 수 있으며, 셋째, 비상업적 개인 용도로 무료입니다.

러시아어는 무엇입니까?위에서 언급했듯이 러시아에는 많은 정보 보안 도구 제조업체에서 널리 사용되는 해싱 표준 GOST R 34.11-94가 있습니다. 이러한 도구 중 하나는 고정 및 제어 프로그램입니다. 초기 상태 소프트웨어 패키지"고치다". 이 프로그램은 정보 보안 시설 사용의 효율성을 모니터링하는 수단입니다.

Windows 9x/NT/2000/XP용 FIX(버전 2.0.1)

  • 5가지 구현된 알고리즘 중 하나를 사용하여 주어진 파일의 체크섬 계산.
  • 소프트웨어 패키지의 초기 상태에 대한 고정 및 후속 제어.
  • 소프트웨어 패키지 버전 비교.
  • 디렉토리 수정 및 제어.
  • 지정된 파일(디렉토리)의 변경 제어.
  • TXT, HTML, SV 형식의 보고서 생성.
  • 제품에는 2013년 6월 1일까지 NDV 3 No. 913에 따른 FSTEC 인증서가 있습니다.

ECP는 어떻습니까?해시 함수 계산의 결과는 사용자의 비밀 키와 함께 디지털 서명이 계산되는 암호화 알고리즘의 입력을 입력합니다. 엄밀히 말하면 해시 함수는 EDS 알고리즘의 일부가 아니지만 공개 키 공격을 배제하기 위해 의도적으로 수행되는 경우가 많습니다.

오늘날 많은 전자 상거래 응용 프로그램을 통해 저장할 수 있습니다. 비밀 키토큰(ruToken , eToken )의 개인 영역에 있는 사용자 없이 기술적 타당성거기에서 추출합니다. 토큰 자체에는 킬로바이트 단위로 측정되는 매우 제한된 메모리 영역이 있습니다. 문서에 서명하기 위해 문서를 토큰 자체로 전송할 수 있는 방법은 없지만 문서의 해시를 토큰으로 전송하고 출력에서 ​​EDS를 얻는 것은 매우 쉽습니다.

해시 테이블

해시 테이블(셔플된 테이블, 계산된 주소가 있는 테이블)은 동적 집합 지원 작업요소 추가, 검색 및 삭제 및 특수 방법 사용 주소 지정.

테이블과 다른 동적 집합의 주요 차이점은 다음과 같습니다. 요소 주소 계산키 값으로.

해시 구현의 아이디어는 하나의 큰 배열로 작업하는 것이 여러 개의 작은 집합으로 작업하는 것으로 축소된다는 것입니다.

예를 들어, 노트북. 책의 페이지는 글자로 표시되어 있습니다. 문자로 표시된 페이지에는 해당 문자로 시작하는 성이 포함되어 있습니다. 큰 성은 28개의 하위 집합으로 나뉩니다. 검색 시 원하는 글자로 바로 책이 열리고 검색 속도가 빨라집니다.

해시 테이블 프로그래밍에서- 이것은 구조쌍(키 또는 인덱스 + 값)을 저장하고 새 쌍 추가, 키로 쌍 검색 및 삭제의 세 가지 작업이 수행되는 데이터입니다.

해시 테이블에서 검색두 단계로 수행:

첫번째단계 - 변환하는 해시 함수 계산 열쇠스프레드시트에서 검색 주소:

단계는 이러한 키 처리에서 충돌을 해결하는 프로세스입니다.

만약 다른 값테이블 키 해시 함수 생성 똑같다주소가 생긴다고 합니다. 충돌(충돌, 충돌).

해시 함수

해시 함수의 주요 목적은 다양한 열쇠가능하다면 여러부정적이지 않다 전부의번호.

주제 해시 함수 더 나은, 어떻게 더 적은 동일한가치를 생성합니다.

해시 함수는 다음 속성이 충족되는 방식으로 선택해야 합니다.

    해시 함수는 집합의 요소에 대해 정의되고 음이 아닌 정수가치;

    해시 함수 계산하기 쉬운;

    해시 함수는 여러약에서 값 동등하게 가능성(충돌 최소화);

    친척 인수 값해시 함수는 서로의 가치.

좋은 해시 함수를 구축하려면 키 분포를 알아야 합니다. 키 분포를 알면 이상적인 경우 키 밀도와 해시 값 밀도 분포가 동일해야 합니다.

허락하다 ( 열쇠 ) - 주요 요청의 분포 밀도. 그런 다음 이상적인 경우 테이블 입력 요청의 분포 밀도는 다음과 같습니다. g ( 시간 ( 열쇠 )) 평균적으로 요소의 수가 고양이가 되도록 합니다. 쌍둥이 사슬을 통과해야했지만 최소한이었습니다.

예시.

세트가 있게 해주세요 열쇠

{0, 1, 4, 5, 6, 7, 8, 9, 15, 20, 30, 40}

그리고 테이블을 허용하자 4 입구.

해시 함수를 작성할 수 있습니다.

시간(열쇠) = 열쇠 % 4 .

그러면 다음을 얻습니다. 구애입력용

{0, 1, 2, 3} 테이블:

시간(열쇠)

엔트리 번호

최대 체인 길이

% 조회수

3 0.5+1.5 0.25+0.5 0.08+1 0.17 ≈ 2.1목록 요소.

예시다른 해시 함수로.

시간(열쇠)

엔트리 번호

% 조회수

평균적으로 걸릴 것입니다 4 1.5 0.25 = 1.5목록 요소.

이것이 정보 검색 시스템이라면 검색 성능이 약 25% 향상됩니다.

해시 함수를 구성하는 방법

모듈식 해싱

간단하고 효율적이며 일반적으로 사용되는 해싱 방법입니다.

테이블 크기는 다음과 같이 선택됩니다. 단순한번호 해시 함수는 다음과 같이 계산됩니다. 나머지 부분:

시간(열쇠) = 열쇠 %

열쇠– 키의 정수 숫자 값,

- 해시 값의 수(해시 테이블 항목).

그러한 기능을 호출 모듈러및 변경 사항 0 전에 ( - 1 ).

C++의 모듈식 해시 함수:

형식 정의정수해시 인덱스 유형;

해시 인덱스 유형해시시(정수열쇠)

{ 반품열쇠 % ; }

예시

열쇠 = {1, 3, 56, 4, 32, 40, 23, 7, 41,13, 6,7}

허락하다 = 5

시간(열쇠) = {1, 3, 1, 4, 2, 0, 3, 2, 1, 3, 1, 2}

선택의 문제 . 키의 무작위 분포를 얻으려면 다음을 수행해야 합니다. 단순한숫자.

곱셈법

해시 함수:

h(키) =

0 < < 1 상수입니다.

12 모드5 = 2 (12를 5로 나눈 나머지).

5,04 모드1= 0,04 (눈에 띄는분수 부분)

예시

열쇠 = 123456

= 10000

= 0,6180339887499 = 0,618…

시간(열쇠) = =

가산법

에 사용됩니다 윤곽가변 길이(테이블 크기 256).

{ 해시 인덱스 유형 h = 0;

동안(*str)

h += (*str)++;

반품시간;

덧셈법의 단점은 유사한 단어와 아나그램을 구별하지 못한다는 것입니다. 시간(XY ) = 시간(YX )

가산법, 여기서 키는 문자열입니다. 해시 함수에서 문자열은 모든 문자를 합하고 로 나눈 나머지를 반환하여 정수로 변환됩니다. (보통 테이블 크기 = 256).int h(char *key, int m) (int s = 0;while(*key)s += *key++;return s % m;) 알파벳그리고 택시.이 메서드는 키 문자열의 처음과 마지막 문자만 합산하여 결과를 얻을 수 있도록 약간 수정할 수 있습니다. int h(char *key, int m) (int len ​​​​= strlen(key), s = 0;if (렌< 2) // Если длина ключа равна 0 или 1,s = key; // возвратить keyelse s = key + key;return s % m;}В этом случае коллизии будут возникать только в строках, например, 알파벳그리고 .

해시 함수는 키를 가져와서 테이블의 주소를 계산합니다(주소는 체인이 연결된 배열의 인덱스일 수 있음). 예를 들어 "abcd" 문자열에서 숫자 3을 얻을 수 있습니다. "이고 문자열 "efgh"에서 숫자 7을 얻은 다음 해시를 통해 체인의 첫 번째 구조를 가져오거나 해시를 통해 "abcd"가 해시의 구조 체인에서 발견될 때까지 체인을 따라 검색을 계속합니다. , 또는 "efgh"는 "abcd"가 있는 구조가 발견될 때 해시의 구조 체인에서 발견되고 나머지 데이터가 취해져서 반환되거나 전체가 일반적으로(해당 주소) 반환되므로 다음을 수행할 수 있습니다. 나머지 데이터를 가져올 수 있고 구조의 사슬이 생성됩니다. 다른 키, 테이블에서 동일한 주소를 갖습니다. 예를 들어 "abcd"에 대한 해시 함수는 3을 반환할 수 있고 "zxf9"에 대해서도 3을 반환할 수 있으므로 세 번째 인덱스에 있는 체인에 연결됩니다. 배열 .... ....

배열 H는 키-값 쌍 자체를 저장합니다. 요소 삽입 알고리즘은 새로운 요소가 기록될 첫 번째 자유 셀이 발견될 때까지 배열 H의 셀을 어떤 순서로 검사합니다.

검색 알고리즘은 원하는 키가 있는 요소 또는 빈 셀(해시 테이블에 요소가 없음을 의미)이 발견될 때까지 삽입할 때와 동일한 순서로 해시 테이블의 셀을 검색합니다.

XOR

가변 길이 문자열에 사용됩니다. 방법은 덧셈법과 유사하지만 유사한 단어를 구별합니다. "배타적 OR" 연산이 문자열의 요소에 순차적으로 적용된다는 사실에 있습니다.

typedef unsigned char HashIndexType;

서명되지 않은 문자 Rand8;

HashIndexType 해시(char *str)

(부호 없는 문자 h = 0;

동안 (*str) h = Rand8;

반품시간; }

여기 랜드8 – 256개의 8비트 난수 테이블.

테이블 크기<= 65536

typedef unsigned short int HashIndexType;

서명되지 않은 문자 Rand8;

HashIndexType 해시(char *str)

( HashIndexType h; unsigned char h1, h2;

if (*str == 0) 반환 0;

h1 = *str; h2 = *문자열 + 1; str++;

동안(*str)

(h1 = Rand8, h2 = Rand8,

str++; )

h = ((HashIndexType)h1<< 8) | (HashIndexType)h2;

h % HashTableSize 반환)

만능인 해싱

암시 무작위의하는 동안 일부 집합에서 해시 함수 선택 이행프로그램들.

다음과 같이 사용할 곱셈 방법의 경우 하지만하위 시퀀스 무작위의고정 숫자 대신 값을 사용하면 범용 해시 함수를 얻을 수 있습니다.

그러나 난수를 생성하는 시간도 .

사용할 수 있습니다 의사 무작위번호.

// 의사 난수 생성기

형식 정의정수해시 인덱스 유형;

해시 인덱스 유형해시(char*v, int m)

( int h, a = 31415, b = 27183;

for(h = 0;*v != 0; v++, a = a*b %(m - l))

h = (a*h + *v) % m;

반환(h< 0) ? (h + m) : h;