해시: Difference between revisions

From IT Wiki
No edit summary
 
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[분류:자료 구조]]
[[분류:보안]]
;Hash
;Hash
* 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것


== 해시 함수 종류 ==
*하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것
* 제곱법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
 
* 제산법 : 키값을 제곱한 후에 중간의 몇자리를 선택하고 그 중간 값을 주소로 이용
==해시 함수 종류==
* 중첩법(폴딩법) : 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR 하여 주소 이동
 
* 숫자분석법 : 각 숫자의 분포를 이요해서 균등한 분포의 숫자를 선택해서 사용
*제곱법 : 키값을 제곱한 후에 중간의 몇자리를 선택하고 그 중간 값을 주소로 이용
* 기수 변환법 : 주어진 키의 값을 다른 진법으로 변환하여 얻은 값을 주소로 사용
*제산법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
* 무작위 방법 : 난수를 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용
*중첩법(폴딩법) : 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR 하여 주소 이동
*숫자분석법 : 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택해서 사용
*기수 변환법 : 주어진 키의 값을 다른 진법으로 변환하여 얻은 값을 주소로 사용
*무작위 방법 : 난수를 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용
 
==개념 및 용어==


== 개념 및 용어 ==
*'''해시 함수(Hash function)''' : 데이터를 키로 변환하는 함수. 예를 들어 길고 복잡한 문자열을 짧고 단순한 문자열로 변경
* '''해시 함수(Hash function)''' : 데이터를 키로 변환하는 함수. 예를 들어 길고 복잡한 문자열을 짧고 단순한 문자열로 변경
*'''홈 주소(Home address)''': 해시 함수에 의해 변환된 키값의 주소
* '''홈 주소(Home address)''': 해시 함수에 의해 변환된 키값의 주소
*'''해시 테이블(Hash table)''': 해시 함수가 키값을 생성할때 참조하는 테이블
* '''해시 테이블(Hash table)''': 해시 함수가 키값을 생성할때 참조하는 테이블                
*'''버킷(Bucket)''': 하나의 주소를 갖는 파일의 한 구역. 버킷의 크기는 같은 주소에 포함될 수 있는 레코드의 수
* '''버킷(Bucket)''': 하나의 주소를 갖는 파일의 한 구역, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드의 수
*'''슬롯(Slot)''': 한개의 레코드를 저장 할 수 있는 공간. 한 버킷 안에 여러개의 슬롯이 있다.
* '''슬롯(Slot)''': 한개의 레코드를 저장 할 수 있는 공간. 한 버킷 안에 여러개의 슬롯이 있다.  
*'''충돌(Collision)''': 다른 레코드가 같은 키를 가지는 충돌 현상. 레코드는 버킷의 다음 슬롯에 들어감
* '''충돌(Collision)''': 다른 레코드가 같은 키를 가지는 충돌 현상. 레코드는 버킷의 다음 슬롯에 들어감. 레코드를 삽입할 때 2개의 상이한 레코드가 똑같은 홈 주소로 해싱되는 경우
*'''동의어(Synonym)''': 동일한 홈 주소로 인하여 충돌이 일어난 레코드의 집합. 키값이 같은 레코드의 집합으로, 동의어가 슬롯의 갯수보다 많으면 오버플로우가 일어날 수 있다.
* '''충돌 회피성(충돌 저항성)''': 동일한 출력을 산출하는 서로 다른두 입력을 계산적으로 찾기 어려운 성질
*'''오버플로(Overflow)''' : 한 홈 주소의 버킷 내에 더 이상의 레코드를 저장할 슬롯이 없는 상태
** '''강한 충돌 회피성''': H(X) = H(Y) 인 서로 다른 임의의 두 입력 X, Y 를 찾는 것은 계산적으로 어려워야 한다.
** '''약한 충돌 회피성''': X가 주어졌을 때 H(X) = H(Y) 인 X!=Y 것을 찾는 것은 계산적으로 어려워야 한다.
* '''동의어(Synonym)''': 동일한 홈 주소로 인하여 충돌이 일어난 레코드의 집합. 키값이 같은 레코드의 집합으로, 동의어가 슬롯의 갯수보다 많으면 오버플로우가 일어날 수 있다.
* '''오버플로(Overflow)''' : 한 홈 주소의 버킷 내에 더이상의 레코드를 저장할 슬롯이 없는 상태


== 대표적 해시 함수 ==
==해시의 보안성==
* MD5, SHA, HAS


== 오버플로우 처리 기법 ==
*'''[[해시 충돌 저항성|충돌 저항성]]''': 동일한 출력을 산출하는 서로 다른두 입력을 계산적으로 찾기 어려운 성질
* '''개방 주소법(Open Addressing)'''
**'''강한 충돌 저항성''': H(X) = H(Y) 인 서로 다른 임의의 두 입력 X, Y 를 찾는 것은 계산적으로 어려워야 한다.
** 선형 방법(Linear Method)이라고도 함
**'''약한 충돌 저항성''': X가 주어졌을 때 H(X) = H(Y) 인 X!=Y 것을 찾는 것은 계산적으로 어려워야 한다.
** Collision이 발생했을 때 순차적으로 다음 빈 버킷을 찾아 저장
*'''[[해시 역상 저항성|역상 저항성]]''': 해시값 m에 대해 H(X) = m을 만족하는 X값을 찾기 어려운 성질
* '''폐쇄 주소법(Close Addressing)'''
**'''제2역상 저항성''': 해시값 m에 대해 h(x)=h(x'), x≠x'를 만족하는 x'를 찾는 것이 어려운 성질
** Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결
 
** Direct Chaining: 해시표 내의 빈 자리(Cylinder Overflow Area)에 Overflow 레코드를 보관
==대표적 해시 함수==
** Indirect Chaining: 해시표와는 별도의 기억공간(Independent Overflow Area)에 Overflow 레코드를 보관
 
* '''재해싱(Rehashing)'''
*[[MD5]]
** Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식
*[[SHA]]
*[[HAS]]
*[[RIPEMD|RIPEMD(RMD)]]
 
==오버플로우 처리 기법==
 
*'''개방 주소법(Open Addressing)'''
**선형 방법(Linear Method)이라고도 함
**Collision이 발생했을 때 순차적으로 다음 빈 버킷을 찾아 저장
*'''폐쇄 주소법(Close Addressing)'''
**Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결
**Direct Chaining: 해시표 내의 빈 자리(Cylinder Overflow Area)에 Overflow 레코드를 보관
**Indirect Chaining: 해시표와는 별도의 기억공간(Independent Overflow Area)에 Overflow 레코드를 보관
*'''재해싱(Rehashing)'''
**Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식
 
==해시 탐색==


== 해시 탐색 ==
;레코드 키 값을 어떤 해싱 함수에 의해 주소로 변환시켜 해당 주소 위치에 레코드를 저장하는 방식으로 키 변환 값이 같은 경우 오버플로우 문제가 발생하지만 검색할 때 찾고자 하는 레코드의 키 값을 주소 변환에 의 해 해당 위치를 검색하므로 조사 횟수가 상당히 작은 방식
;레코드 키 값을 어떤 해싱 함수에 의해 주소로 변환시켜 해당 주소 위치에 레코드를 저장하는 방식으로 키 변환 값이 같은 경우 오버플로우 문제가 발생하지만 검색할 때 찾고자 하는 레코드의 키 값을 주소 변환에 의 해 해당 위치를 검색하므로 조사 횟수가 상당히 작은 방식
* 특정 데이터가 저장된 기억장소의 주소를 관리하기 위한 사상테이블(Mapping Table)을 정의하기 위해 해시를 사용
* 빠르다는 장점 때문에 운영체제 및 직접 접근파일을 구성하는데 사용된다.
* 사상 테이블의 용량부족으로 인한 Overflow가 발생할 수 있다.
* 동일한 주소를 만들어 내는 두 개 이상의 키 값인 동의어(Synonym)에 의해 충돌(Collision)이 발생 할 수 있다.


== 해시 암호화 ==
*특정 데이터가 저장된 기억장소의 주소를 관리하기 위한 사상테이블(Mapping Table)을 정의하기 위해 해시를 사용
*빠르다는 장점 때문에 운영체제 및 직접 접근파일을 구성하는데 사용된다.
*사상 테이블의 용량부족으로 인한 Overflow가 발생할 수 있다.
*동일한 주소를 만들어 내는 두 개 이상의 키 값인 동의어(Synonym)에 의해 충돌(Collision)이 발생 할 수 있다.
 
==해시 암호화==
 
*
*

Latest revision as of 17:39, 29 August 2022


Hash
  • 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것

해시 함수 종류[edit | edit source]

  • 제곱법 : 키값을 제곱한 후에 중간의 몇자리를 선택하고 그 중간 값을 주소로 이용
  • 제산법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
  • 중첩법(폴딩법) : 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR 하여 주소 이동
  • 숫자분석법 : 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택해서 사용
  • 기수 변환법 : 주어진 키의 값을 다른 진법으로 변환하여 얻은 값을 주소로 사용
  • 무작위 방법 : 난수를 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용

개념 및 용어[edit | edit source]

  • 해시 함수(Hash function) : 데이터를 키로 변환하는 함수. 예를 들어 길고 복잡한 문자열을 짧고 단순한 문자열로 변경
  • 홈 주소(Home address): 해시 함수에 의해 변환된 키값의 주소
  • 해시 테이블(Hash table): 해시 함수가 키값을 생성할때 참조하는 테이블
  • 버킷(Bucket): 하나의 주소를 갖는 파일의 한 구역. 버킷의 크기는 같은 주소에 포함될 수 있는 레코드의 수
  • 슬롯(Slot): 한개의 레코드를 저장 할 수 있는 공간. 한 버킷 안에 여러개의 슬롯이 있다.
  • 충돌(Collision): 다른 레코드가 같은 키를 가지는 충돌 현상. 레코드는 버킷의 다음 슬롯에 들어감
  • 동의어(Synonym): 동일한 홈 주소로 인하여 충돌이 일어난 레코드의 집합. 키값이 같은 레코드의 집합으로, 동의어가 슬롯의 갯수보다 많으면 오버플로우가 일어날 수 있다.
  • 오버플로(Overflow) : 한 홈 주소의 버킷 내에 더 이상의 레코드를 저장할 슬롯이 없는 상태

해시의 보안성[edit | edit source]

  • 충돌 저항성: 동일한 출력을 산출하는 서로 다른두 입력을 계산적으로 찾기 어려운 성질
    • 강한 충돌 저항성: H(X) = H(Y) 인 서로 다른 임의의 두 입력 X, Y 를 찾는 것은 계산적으로 어려워야 한다.
    • 약한 충돌 저항성: X가 주어졌을 때 H(X) = H(Y) 인 X!=Y 것을 찾는 것은 계산적으로 어려워야 한다.
  • 역상 저항성: 해시값 m에 대해 H(X) = m을 만족하는 X값을 찾기 어려운 성질
    • 제2역상 저항성: 해시값 m에 대해 h(x)=h(x'), x≠x'를 만족하는 x'를 찾는 것이 어려운 성질

대표적 해시 함수[edit | edit source]

오버플로우 처리 기법[edit | edit source]

  • 개방 주소법(Open Addressing)
    • 선형 방법(Linear Method)이라고도 함
    • Collision이 발생했을 때 순차적으로 다음 빈 버킷을 찾아 저장
  • 폐쇄 주소법(Close Addressing)
    • Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결
    • Direct Chaining: 해시표 내의 빈 자리(Cylinder Overflow Area)에 Overflow 레코드를 보관
    • Indirect Chaining: 해시표와는 별도의 기억공간(Independent Overflow Area)에 Overflow 레코드를 보관
  • 재해싱(Rehashing)
    • Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식

해시 탐색[edit | edit source]

레코드 키 값을 어떤 해싱 함수에 의해 주소로 변환시켜 해당 주소 위치에 레코드를 저장하는 방식으로 키 변환 값이 같은 경우 오버플로우 문제가 발생하지만 검색할 때 찾고자 하는 레코드의 키 값을 주소 변환에 의 해 해당 위치를 검색하므로 조사 횟수가 상당히 작은 방식
  • 특정 데이터가 저장된 기억장소의 주소를 관리하기 위한 사상테이블(Mapping Table)을 정의하기 위해 해시를 사용
  • 빠르다는 장점 때문에 운영체제 및 직접 접근파일을 구성하는데 사용된다.
  • 사상 테이블의 용량부족으로 인한 Overflow가 발생할 수 있다.
  • 동일한 주소를 만들어 내는 두 개 이상의 키 값인 동의어(Synonym)에 의해 충돌(Collision)이 발생 할 수 있다.

해시 암호화[edit | edit source]