암호화의 해싱에 대해 배우고 싶으십니까? 그렇다면 올바른 장소에 온 것입니다..

이 기사에서는 해싱에 대해 자세히 살펴 보겠습니다..

해싱은 개체 또는 값 그룹에서 개체 또는 값을 식별하는 컴퓨터 과학 기술입니다..

혼란 스러워요?

예를 들어 이해하려고 노력합시다.

글쎄, 대학과 학교는 각 학생에게 고유하게 할당 된 번호를 제공합니다. 이 고유 번호는 학생과 그와 관련된 정보를 식별하는 것입니다. 고유 번호를 생성하는 데 사용되는 방법은 해싱입니다..

또 다른 인기있는 예는 서가에서 수많은 책을 찾을 수있는 도서관입니다. 각 도서에는 고유 한 식별 번호가 있으므로 거대한 도서관에 보관할 수 있습니다.!

해싱의 현대적인 예는 게임에 등록하는 게임 플레이어입니다. Valorant는 Riot에서 출시 한 무료 게임입니다. 무료 플레이는 수백만 명의 사용자가 게임을 플레이한다는 것을 의미합니다..

각 플레이어는 해싱 알고리즘을 사용하여 생성 된 고유 식별 값을 사용하여 식별됩니다..

암호화의 해싱

아래에서 좀 더 자세히 이해해 봅시다.

해싱이란??

위에서 언급했듯이 Hashing은 그룹에서 객체를 식별하는 방법입니다..

각 객체는 해시 된 후 고유 한 식별 번호를받습니다..

그러나 이것이 기술적으로 무엇을 의미합니까??

기술적으로 수학 함수는 모든 길이의 입력 문자열에서 고정 길이 출력을 생성합니다..

비트 코인 거래는 거래가 고유 ID를 갖는 곳에서 해시됩니다..

“Hello, World!”를 넣으면 에 SHA-256 해싱 알고리즘, 다음과 같은 출력이 표시됩니다.

입력: 안녕하세요, 세계!

산출: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

여기서 SHA256은 주어진 입력에서 출력을 생성합니다. 보시다시피 Secure Hash Function (SHA-256) 해싱 알고리즘을 사용했습니다. Message Direct (MD5), Secure Hash Function (SHA1) 등 널리 알려진 해싱 방법 중 하나입니다..

해시 함수의 주요 속성으로 인해 신뢰할 수 있습니다. 아래에 나열하겠습니다..

  • 결정 론적 → 이것은 주어진 상황에서 주어진 입력에 대해 출력이 동일하다는 것을 의미합니다..
  • 사전 이미지 방지 → 사전 이미지 방지 기능은 해시 값이 입력 값 생성에 유용하지 않음을 보장합니다..
  • 계산 효율성 → 해시 함수가 효율적이며 실행에 막대한 계산 리소스가 필요하지 않음.
  • 리버스 엔지니어링 불가 → 해시 함수는 리버스 엔지니어링 할 수 없습니다..
  • 충돌 방지 → 충돌 저항은 두 입력이 동일한 출력을 생성하지 않도록합니다..

우리는 이미 초보자를위한 암호화 해싱을 여기서 다루었습니다. 확인해보세요 : 암호화 해싱 : 초보자 가이드.

하지만 고급 물건을 위해 여기에 있다면 실망하지 않을 것입니다..

해시 함수와 해시 테이블은 무엇입니까? 그리고 그들은 어떻게 작동합니까?

이 섹션에서는 해시 함수와 해시 테이블을 더 자세히 살펴 보겠습니다. 해싱 측면에서 해시 함수가 있습니다. 이 함수는 큰 입력을 작은 고정 입력으로 변환하는 역할을합니다. 해시 테이블은 출력을 저장합니다..

해싱 프로세스에서 객체는 키 / 값 쌍을 기반으로 배열에 배포됩니다. 따라서 요소 배열을 해시 함수에 전달하면 이제 각 요소에 키가 연결되어있는 배열 출력을 얻을 수 있습니다. 키 / 값 쌍은 인상적인 O (1) 시간을 제공하므로 실시간으로 요소에 액세스 할 때 매우 유용합니다..

해시 함수를 구현하려면 두 가지 선호하는 접근 방식을 선택할 수 있습니다..

  • 첫 번째 방법은 해시 함수를 사용하여 요소를 정수로 변환하는 것입니다. 다음으로, 해시 테이블에 넣을 때 정수 출력을 사용하여 요소에 액세스 할 수 있습니다..
  • 또 다른 단계는 해시 테이블에 요소를 넣은 다음 해시 키를 사용하여 검색하는 것입니다..

두 번째 방법에서 기능은 다음과 같습니다.

해시 = hash_function (key) 인덱스 = 해시 % array_size

여기서 해시와 배열 크기는 서로 독립적입니다. 인덱스 값은 배열 크기를 기준으로 계산됩니다. 모듈로 연산자 (%)를 사용하면 값을 계산할 수 있습니다..

간단히 말해서 해시 함수는 임의 크기의 데이터 세트를 고정 된 크기의 데이터 세트에 매핑 할 수있는 함수로 정의 할 수 있습니다. 결과 고정 크기 데이터 세트는 해시 테이블에 저장할 수 있습니다. 해시 함수가 반환하는 값에는 많은 이름이 지정됩니다. 해시 값, 해시, 해시 합계 및 해시 코드라고 할 수 있습니다..

좋은 해시 함수 작성

좋은 해시 함수 또는 메커니즘을 생성하려면 생성의 기본 요구 사항을 이해해야합니다. 아래에 나열 해 보겠습니다.

  • 해시 함수는 계산하기 쉬워야합니다. 즉, 실행하는 데 많은 리소스가 필요하지 않아야합니다..
  • 해시 함수는 균일하게 분산되어야합니다. 이렇게하면 클러스터링이 발생하지 않도록 해시 값을 저장하는 데 해시 테이블이 활용됩니다..
  • 마지막 요구 사항은 충돌이 거의 없거나 전혀없는 것입니다. 충돌 없음은 단일 출력이 두 입력에 매핑되지 않음을 의미합니다..

기술적으로 충돌은 해시 함수의 일부이며 단순히 해시 함수에서 제거 할 수 없습니다. 목표는 좋은 해시 테이블 성능을 제공하고 충돌 해결 기술을 통해 충돌을 해결할 수있는 해시 함수를 만드는 것입니다..

좋은 해시 함수가 필요한 이유?

유용한 해시 함수의 필요성을 이해하기 위해 아래 예제를 살펴 보겠습니다..

입력 문자열이 { “agk”, “kag”, “gak”, “akg”, “kga”, “gka”와 같은 해싱 기술을 사용하여 해시 테이블을 생성한다고 가정 해 보겠습니다.}

이제 a (97), g (103), k (107)의 ASCII 값을 더한 다음 합을 307로 모듈로하는 해시 함수를 만듭니다..

분명히 세 숫자의 합은 307입니다. 이것은 우리가 모든 숫자를 변경 한 다음 모듈로 연산을 수행하면 동일한 결과를 얻을 수 있음을 의미합니다. 최종 결과는 모든 문자열을 동일한 인덱스 번호에 저장하는 것입니다. 해시 함수의 알고리즘 시간도 O (n) 복잡도이므로 바람직하지 않습니다. 우리가 설명한 해시 함수가 실제 시나리오에 적합하지 않다는 결론을 쉽게 내릴 수 있습니다..

해시 함수를 수정하기 위해 각 요소의 ASCII 값 합계를 다른 소수 인 727로 나누는 방법을 배포 할 수 있습니다. 이렇게하면 주어진 입력 문자열 배열에 대해 다른 출력을 얻을 수 있습니다..

해시 테이블에 대해 알아보기

해시 테이블은 인덱스를 계산하고 그에 대한 값을 저장하는 해시 함수의 결과를 저장하는 데 매우 유용합니다. 최종 결과는 O (1) 복잡성으로 더 빠른 계산 프로세스가 될 것입니다..

해시 테이블은 전통적으로 O (n) 시간이 필요한 문제를 해결하는 데 좋은 선택입니다..

따라서 고정 된 길이의 문자열을 집어 들고 문자열의 문자 빈도를 배우려고하면.

따라서 string = “aacddce”인 경우 일반적인 접근 방식은 문자열을 여러 번 통과하고 각 주파수를 저장하는 것입니다..

# 입력 문자열을 제공하고 해당 문자열의 문자 빈도를 계산합니다.

# 알고리즘은 0 (n) 복잡도 시간

temp_list = [] 시작 = "ㅏ" str = "ababcddefff" def alpha_zeta () : alpha = ‘a’for i in range (0,26) : temp_list.append (alpha) alpha = chr (ord (alpha) + 1) return temp_list temp_list = alpha_zeta () #print (temp_list) def character_frequency (str, temp_list) : for each in temp_list : freq = 0 for i in str : if (i == each) : _list)

위 프로그램의 출력은 다음과 같습니다.

a 2 b 2 c 1 d 2 e 1 f 3g 0 h 0 i 0 .. ..

이제 C ++로 해시 테이블을 구현하고 문자 빈도를 계산해 보겠습니다..

#include using namespace std; int 주파수 [26]; int hashFunc (char c) {반환 (c- ‘a’); } void countFre (string S) {for (int i = 0; i< S.length (); ++ i) {int index = hashFunc (S [i]); 빈도 [색인] ++; } for (int i = 0; i<26; ++ i) {cout << (문자) (i + ‘a’) << ” << 주파수 [i]<< endl; }} int main () {cout<<"Hello World"; countFre ("abbaccbdd"); }

프로그램의 출력은 다음과 같습니다.

a 2 b 3 2

알고리즘의 O (N) 복잡성은 다른 선형 접근 방식에 비해 더 빠릅니다..

충돌을 해결하는 방법

해시 함수의 충돌을 해결하는 고유 한 방법이 있습니다. 인기있는 방법 중 하나는 개방형 해싱이라고도하는 별도의 체인입니다. 체인의 각 요소 자체가 연결된 목록 인 연결 목록으로 구현됩니다. 이 접근 방식을 사용하면 요소를 저장하고 특정 요소가 특정 연결 목록의 일부일뿐임을 확인하여 충돌을 해결할 수 있습니다. 즉, 두 입력 값이 동일한 출력 해시 값을 가질 수 없습니다..

Python에서 해시 탐색

이 섹션에서는 Python의 해시를 빠르게 살펴볼 것입니다. Python을 선택한 이유는 읽기 쉽고 누구나 쉽게 사용할 수 있기 때문입니다..

해싱은 일반적인 함수이므로 이미 Python 라이브러리에 구현되어 있습니다. 모듈을 사용하여 개체를 입력으로 제공 한 다음 해시 된 값을 반환 할 수 있습니다..

해시 메서드의 구문은 다음과 같습니다.

해시 (객체)

보시다시피 개체 인 단일 매개 변수를받습니다. 객체는 정수, 부동 소수점 또는 문자열 일 수 있습니다..

hash () 메서드의 반환 값은 입력에 따라 다릅니다. 정수의 경우 동일한 숫자를 반환 할 수 있지만 십진수와 문자열의 경우는 다릅니다..

아래에서 몇 가지 예를 살펴 보겠습니다..

숫자 = 10 데시 = 1.23556 str1 = "Nitish" print (hash (num)) print (hash (deci)) print (hash (str1))

위 코드의 출력은 다음과 같습니다.

암호화에서 해싱

그러나 모든 개체 유형에 해싱을 적용 할 수는 없습니다. 예를 들어, 첫 번째 프로그램에서 a에서 z까지의 목록을 만든 것을 기억한다면. 해시하려고하면 출력 창에 TypeError : unhashable type :‘list’가 표시됩니다.

해싱 in crpytography-python-error

객체 목록에 해싱을 적용하려면 튜플을 사용해야합니다..

모음 = ( ‘a’, ‘e’, ​​’i’, ‘o’, ‘u’) print (hash (vowels)) 출력 ⇒ -5678652950122127926

암호화의 해싱

해싱은 암호화에 유용합니다. Bitcoin은 해싱을 사용하여 Merkle 트리를 만들고 관리합니다.

또한 해싱은 오랫동안 암호화의 일부였습니다. 그러나 해싱의 가장 좋은 사용 사례는 암호를 해시하고 저장하는 것입니다..

머클 나무

머클 트리는 대규모 데이터 풀에서 안전한 데이터 검증을 수행 할 때 유용한 데이터 구조입니다. 비트 코인과 이더 리움은 모두 머클 트리를 활용하여 개방형 네트워크에서 데이터를 저장하고 액세스 할 때 많은 기술적 장벽을 해결합니다..

중앙 집중식 네트워크는 데이터 액세스 및 저장을위한 소스가 하나뿐이므로 데이터 저장 및 액세스에 대해 걱정할 필요가 없습니다. 그러나 이제는 수백 명의 참여 피어간에 데이터를 복사해야하므로 분산 형 네트워크가 있으면 방정식이 바뀝니다..

머클 트리는 동료간에 데이터를 공유하고 확인할 수있는 신뢰할 수 있고 효율적인 방법을 제공하여 문제를 해결합니다..

머클 트리 예제

머클 트리 예

하지만 여기서 머클 트리에 대해 논의하는 이유는 무엇입니까? 머클 트리는 해시를 핵심 기능으로 사용하여 서로 다른 노드와 데이터 블록을 연결합니다..

Merkle Trees는 전체 트랜잭션 세트를 요약 할 수있는 거꾸로 된 트리입니다..

Merkle 트리에 대해 자세히 알아보고 암호화에서 해싱을 사용하는 방법에 대해 자세히 알아 보려면 자세한 가이드 : Merkle 트리 가이드를 확인하세요. 여기서 우리는 Merkle 트리 구현이 비트 코인 및 기타 사용 사례에서 어떻게 수행되는지 논의했습니다..

채굴 과정

마이닝 프로세스는 또한 해싱을 활용합니다. 비트 코인 채굴의 경우 수요가있을 때 블록 체인에 새로운 블록이 추가됩니다..

블록을 블록 체인에 추가하려면 방법을 따라야합니다. 새 블록이 도착하면 블록의 내용에 따라 해시 값이 생성됩니다. 또한 생성 된 해시가 네트워크 난이도 이상이면 블록 체인에 블록을 추가하는 과정이 시작됩니다..

완료되면 네트워크의 모든 피어가 새 블록 추가를 승인합니다..

그러나 대부분의 경우 네트워크 난이도가 생성 된 해시에 비해 항상 높기 때문에 거의 발생하지 않습니다. 채굴 과정에서 중요한 역할을하는 또 다른 측면이 있습니다. 논스입니다.

임시 값은 블록의 해시에 추가되며 임의의 문자열입니다. 완료되면 연결된 문자열을 난이도와 비교합니다. 난이도가 연결된 문자열보다 낮 으면 난이도가 높아질 때까지 임시 값이 변경됩니다..

프로세스는 다음 단계로 요약 할 수 있습니다.

  • 콘텐츠는 새 블록이 생성되거나 가져올 때마다 새 해시 값을 생성하기 위해 해시됩니다.,
  • 새로운 nonce 값이 생성되어 해시에 추가됩니다.
  • 해싱 프로세스는 새로운 접촉 문자열에서 발생합니다.
  • 그런 다음 해시의 최종 값을 네트워크의 난이도와 비교합니다.
  • 최종 해시 값이 nonce보다 낮 으면 프로세스가 다시 반복됩니다. 프로세스는 해시 값이 nonce보다 클 때만 중지됩니다..
  • 블록은 난이도가 높아지면 체인에 합류합니다.
  • 그런 다음 채굴자는 새 블록을 채굴하고 보상을 서로 공유 할 책임이 있습니다..

“해시 율”이라는 용어도 여기에서 나옵니다. 해시 비율은 해싱 작업이 발생하는 비율입니다. 해시 율이 높으면 채굴자가 채굴 프로세스에 참여하기 위해 더 많은 계산 능력이 필요함을 의미합니다..

결론

이것은 암호화 심층 가이드에서 해싱의 끝으로 이어집니다. 해싱에 대해 자세히 다루고 그 뒤에있는 코드도 살펴 보았습니다..

그래서 그것에 대해 어떻게 생각하십니까? 아래에 댓글을 달고 알려주세요..

#자주하는 질문

암호화에서 해싱이란??

암호화에서 해싱은 효율적인 방법을 사용하여 데이터를 고유 한 텍스트 문자열로 변환하는 방법입니다. 또한 데이터 유형이나 크기에 제한이 없습니다. 모든 데이터에 대해 해싱이 작동합니다..

암호화에서 해싱이 사용되는 방식?

암호화는 해싱을 사용하여 암호를 해시하거나 고유 한 식별 번호를 생성합니다..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me