Programming
Study/Crypto / / 2024. 5. 9. 14:48

sha256(hash algorithm)에 대해서 알아보자 (C++)

728x90

<sha256 해시 알고리즘이란?>

1) sha는 'Secure Hash Algorithm'의 약자고, 256은 메모리를 차지하는 비트 수이다. 

2) 해시(16진법)의 길이는 언제나 64자이고 숫자뿐만 아니라 문자가 올 수 있다.

sha256을 테스트해보고 싶으면 아래 사이트를 확인해 보자.

 1. https://tools.superdatascience.com/blockchain/hash 2. https://emn178.github.io/online-tools/sha256.html

3) 해시(hash)의 특징: 

- 입력값의 길이가 달라도, 출력값은 언제나 고정되어 있는 길이를 반환한다.

- 동일한 값이 입력되면 언제나 같은 값을 출력한다.

4) 암호화 해시 함수:

- 암호화 해시 함수는 위 해시함수의 부분집합에 포함된다. 암호화 해시 함수는 이름 그대로 암호화에 활용될 수 있는 경우를 의미하며, 역상저항성, 제2역상저항성, 충돌저항성을 가지고 있다.

출처: 업비트 투자자보호센터

<> 역상저항성: 해시 값이 주어졌을 때, 그 해시 값을 생성하는 초기 입력값을 모르면, 입력값을 알아내기가 불가능하다. 

<> 제2역상저항성: 어떤 입력 값과 동일한 해시 값을 가지는 다른 입력 값을 찾을 수 없어야 한다는 특성이다.

<> 충동저항성: 해시 값이 같은 입력 값 두 개를 찾을 수 없다는 특성이다. 충돌저항성은 제2역상저항성의 외부효과(부수효과)이자 부분집합이다.

<> 압축효과: 암호화 해시 함수는 큰 파일이나 데이터에 대해 작은 크기의 해시 값을 반환하는데, 이 작은 해시 값만으로도 해당 데이터의 무결성을 보장할 수 있다. 예를 들어 SHA-256은 100GB의 파일이라도 단 256비트의 해시 값을 통해 그 내용의 무결성을 확인할 수 있어요.

<> 눈사태 효과: 입력 데이터가 조금만 변해도 해시 값이 완전히 다른 값으로 바뀌는 것을 의미한다. 이는 해시 함수의 안전성과 무결성을 보장하는 중요한 특성 중 하나로, 만약 눈사태 효과가 발생하지 않는다면, 해시 함수는 취약점을 가질 수 있으며 데이터 무결성을 보장하기 어려워진다.


<블록체인에서의 해시함수>

1. 블록 생성: 블록체인에서는 각각의 블록이 이전 블록의 해시를 포함한다. 이전 블록의 해시는 해당 블록이 이전 블록과 연결되어 있음을 증명하고, 무결성을 보장한다. sha256은 블록 데이터를 해싱하여 고유한 해시 값을 생성하는 데에 사용된다.

2. 작업증명 (Proof of Work): 블록체인의 일부 시스템에서는 새로운 블록을 추가하기 위해 작업 증명 메커니즘을 사용한다. 이는 블록의 해시 값이 특정 기준을 충족해야만 새로운 불록을 추가할 수 있도록 하는 것이다.


 

<실습(C++)>

아래 사이트에서 sha256 헤더 파일을 찾을 수 있다

http://www.zedwood.com/article/cpp-sha256-function

 

C++ sha256 function :: zedwood.com

 

www.zedwood.com

[환경: Visual Studio]

주어진 파일을 그대로 가져와봤다

실행을 해보면, main.cpp의 grape,

 string input = "grape";

가 변형되어 출력된다. 이번엔 코드를 변경하여 내가 입력하고 싶은 내용을 변형하게 끔 고쳐보면,

    string input;
    cout << "문자열을 입력하세요: ";
    cin >> input;
    cout << "입력한 문자열: " << input << std::endl;

출력 결과

요렇게 나온다.


[참고 사이트]

- https://upbitcare.com/academy/education/blockchain/52

- https://bitcoin.org/bitcoin.pdf

728x90
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유