GGmon
해싱이란 무엇인가요? 본문
해싱은 가변 크기의 입력에서 고정 크기의 출력을 생성하는 프로세스를 나타냅니다. 이것은 해시 함수(해싱 알고리즘으로 구현됨 )로
모든 해시 함수가 암호화를 사용하는 것은 아니지만 소위 암호화 해시 함수는 암호화폐의 핵심입니다. 덕분에 블록체인 및 기타 분산 시스템은 상당한 수준의 데이터 무결성 및 보안을 달성할 수 있습니다.
기존 해시 함수와 암호화 해시 함수는 모두 결정론적입니다. 결정적이라는 것은 입력이 변경되지 않는 한 해싱 알고리즘이 항상 동일한 출력(다이제스트 또는 해시라고도 함)을 생성한다는 것을 의미합니다.
일반적으로 암호화폐의 해싱 알고리즘은 단방향 기능으로 설계되어 많은 컴퓨팅 시간과 리소스 없이는 쉽게 되돌릴 수 없습니다. 즉, 입력에서 출력을 생성하는 것은 상당히 쉽지만 반대 방향으로(출력만으로 입력을 생성하기 위해) 가는 것은 상대적으로 어렵습니다. 일반적으로 말해서 입력을 찾는 것이 어려울수록 해싱 알고리즘이 더 안전한 것으로 간주됩니다.
데이터 무결성(Data Integrity)은 데이터가 정확하고 완전하게 유지되어야 함을 의미합니다. 데이터 무결성은 데이터의 정확성과 일관성을 보장하여, 데이터가 신뢰성 있는 정보로 사용될 수 있도록 합니다. 데이터 무결성을 유지하기 위해서는 데이터의 변경과 저장에 대한 제한이 필요하며, 이를 위해 데이터베이스 관리 시스템(DBMS)에서는 다양한 방법을 제공합니다.
데이터 무결성은 다음과 같은 세 가지 측면으로 분류됩니다.
- 개체 무결성(Entity Integrity) : 각 테이블의 레코드가 유일한 식별자(primary key)를 가져야 함을 보장합니다. 이를 위해 DBMS는 유일한 식별자를 가진 레코드만 삽입하도록 하거나, 기존 레코드의 식별자를 수정하지 못하도록 제한하는 등의 제한을 둘 수 있습니다.
- 참조 무결성(Referential Integrity) : 데이터베이스 내에서 참조되는 두 테이블 간의 일관성을 보장합니다. 예를 들어, 한 테이블에서 다른 테이블의 레코드를 참조할 때, 참조되는 레코드가 삭제되었을 경우 이를 참조하는 레코드도 삭제되어야 합니다.
- 도메인 무결성(Domain Integrity) : 각 필드에서 사용 가능한 데이터 값의 범위나 조건에 대한 제한을 두어 데이터의 일관성을 보장합니다. 예를 들어, 날짜 필드에 잘못된 형식의 데이터가 입력되지 않도록 제한을 둘 수 있습니다.
데이터 무결성은 데이터베이스를 관리하면서 가장 중요한 측면 중 하나입니다. 무결성을 유지하지 않으면 데이터의 정확성과 일관성이 보장되지 않아, 신뢰성 있는 정보로 사용하기 어려워집니다. 따라서 데이터 무결성을 보장하기 위해서는 DBMS의 기능과 함께 데이터의 수정, 삭제 등에 대한 제한을 두어야 합니다.
해시 함수는 어떻게 작동합니까?
서로 다른 해시 함수는 서로 다른 크기의 출력을 생성하지만 각 해싱 알고리즘에 대해 가능한 출력 크기는 항상 일정합니다. 예를 들어 SHA-256 알고리즘은 256비트의 출력만 생성할 수 있는 반면 SHA-1은 항상 160비트 다이제스트를 생성합니다.
설명을 위해 SHA-256 해싱 알고리즘(Bitcoin에서 사용되는 알고리즘)을 통해 "Binance" 및 "binance"라는 단어를 실행해 보겠습니다.
SHA-256
|
|
입력
|
출력(256비트)
|
바이낸스
|
f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191
|
바이낸스
|
59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2
|
약간의 변경(첫 글자의 대소문자)으로 인해 해시 값이 완전히 달라졌습니다. 그러나 우리는 SHA-256을 사용하고 있기 때문에 출력은 입력 크기에 관계없이 항상 256비트(또는 64자)의 고정 크기를 갖습니다. 또한 알고리즘을 통해 두 단어를 몇 번이나 실행하는지는 중요하지 않으며 두 출력은 일정하게 유지됩니다.
반대로 SHA-1 해싱 알고리즘을 통해 동일한 입력을 실행하면 다음과 같은 결과가 나타납니다.
SHA-1
|
|
입력
|
출력(160비트)
|
바이낸스
|
7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1
|
바이낸스
|
e58605c14a76ff98679322cca0eae7b3c4e08936
|
특히 SHA라는 약어는 Secure Hash Algorithms를 나타냅니다. SHA-2 및 SHA-3 그룹과 함께 SHA-0 및 SHA-1 알고리즘을 포함하는 암호화 해시 함수 집합을 나타냅니다. SHA-256은 SHA-512 및 기타 변종과 함께 SHA-2 그룹의 일부입니다. 현재 SHA-2 및 SHA-3 그룹만 안전한 것으로 간주됩니다.
왜 중요한가요?
기존의 해시 함수는 데이터베이스 조회, 대용량 파일 분석 및 데이터 관리를 포함하여 광범위한 사용 사례를 가지고 있습니다. 반면에 암호화 해시 함수는 메시지 인증 및 디지털 지문과 같은 정보 보안 응용 프로그램에서 광범위하게 사용됩니다.
비트코인의 경우 암호화 해시 기능은 마이닝 프로세스 의 필수 부분이며 새로운 주소 및 키 생성에서도 역할을 합니다.
해싱의 진정한 힘은 엄청난 양의 정보를 처리할 때 나타납니다. 예를 들어 해시 함수를 통해 큰 파일이나 데이터 세트를 실행한 다음 출력을 사용하여 데이터의 정확성과 무결성을 빠르게 확인할 수 있습니다. 이는 해시 함수의 결정론적 특성으로 인해 가능합니다. 입력은 항상 단순화되고 압축된 출력(해시)이 됩니다. 이러한 기술을 사용하면 많은 양의 데이터를 저장하고 "기억"할 필요가 없습니다.
해싱은 블록체인 기술의 맥락에서 특히 유용합니다. 비트코인 블록체인에는 해싱과 관련된 여러 작업이 있으며 대부분은 채굴 프로세스 내에서 이루어집니다. 실제로 거의 모든 암호화폐 프로토콜은 해싱에 의존하여 트랜잭션 그룹을 블록으로 연결 및 압축하고 각 블록 사이에 암호화 링크를 생성하여 효과적으로 블록체인을 생성합니다.
마이닝(Mining) 프로세스는 블록체인에서 새로운 블록을 만들기 위해 수행되는 작업을 말합니다. 마이닝은 분산 컴퓨터 네트워크를 통해 수행되며, 블록체인에서 거래 정보를 검증하고, 새로운 블록을 생성하여 블록체인에 추가하는 역할을 수행합니다.
마이닝 프로세스는 다음과 같은 과정으로 이루어집니다.
- 거래 정보 검증 : 새로운 블록을 만들기 위해 마이너는 거래 정보를 검증합니다. 거래 정보가 유효하면 마이너는 이를 블록에 추가합니다.
- 새로운 블록 생성 : 거래 정보가 검증되면 마이너는 블록의 헤더 정보와 거래 정보를 합쳐 새로운 블록을 생성합니다.
- 작업 증명(Proof of Work) : 마이너는 블록의 헤더 정보에 대한 해시 값을 계산합니다. 이때, 블록체인에서는 작업 증명(Proof of Work)이라는 알고리즘을 사용하여, 해시 값을 계산합니다. 작업 증명은 일정한 양의 계산 작업을 요구하므로, 블록의 유효성을 검증하기 위한 작업이라고 할 수 있습니다.
- 새로운 블록 추가 : 마이너는 작업 증명에 성공하면, 새로운 블록을 블록체인에 추가합니다. 이 때, 다른 마이너들도 새로운 블록을 생성할 수 있지만, 가장 먼저 작업 증명을 완료한 마이너가 새로운 블록을 추가할 수 있습니다.
마이닝은 블록체인에서 중요한 역할을 수행합니다. 블록체인에서 거래 정보를 검증하고, 새로운 블록을 생성하여 블록체인에 추가하는 역할을 수행하므로, 블록체인에서의 안전성과 신뢰성을 보장합니다. 따라서, 마이닝은 블록체인에서 가장 중요한 프로세스 중 하나입니다.
암호화 해시 함수
다시, 암호화 기술을 사용하는 해시 함수는 암호화 해시 함수로 정의될 수 있습니다. 일반적으로 암호화 해시 함수를 해독하려면 수많은 무차별 대입 시도가 필요합니다. 사람이 암호화 해시 함수를 "되돌리기" 위해서는 해당 출력이 생성될 때까지 시행착오를 통해 입력이 무엇인지 추측해야 합니다. 그러나 완전히 동일한 출력을 생성하는 다른 입력의 가능성도 있으며, 이 경우 "충돌"이 발생합니다.
기술적으로 암호화 해시 함수는 효과적으로 안전한 것으로 간주되기 위해 세 가지 속성을 따라야 합니다. 충돌 저항, 사전 이미지 저항 및 두 번째 사전 이미지 저항으로 설명할 수 있습니다.
각 속성에 대해 논의하기 전에 논리를 세 개의 짧은 문장으로 요약해 보겠습니다.
- 충돌 저항: 출력과 동일한 해시를 생성하는 두 개의 개별 입력을 찾는 것이 불가능합니다.
- 프리이미지 저항: 해시 함수를 "되돌리기" 불가능(주어진 출력에서 입력 찾기).
- Second-preimage resistance: 지정된 입력과 충돌하는 두 번째 입력을 찾는 것이 불가능합니다.
충돌 저항
언급한 바와 같이 서로 다른 입력이 정확히 동일한 해시를 생성할 때 충돌이 발생합니다. 따라서 해시 함수는 누군가 충돌을 발견하는 순간까지 충돌 방지 기능으로 간주됩니다. 가능한 입력은 무한하고 가능한 출력은 유한하기 때문에 충돌은 항상 모든 해시 함수에 대해 존재합니다.
다시 말해, 해시 함수는 충돌을 찾을 가능성이 너무 낮아 수백만 년의 계산이 필요할 때 충돌 방지 기능을 합니다. 따라서 충돌 없는 해시 함수가 없다는 사실에도 불구하고 일부는 저항력이 있는 것으로 간주될 만큼 강력합니다(예: SHA-256).
다양한 SHA 알고리즘 중에서 SHA-0 및 SHA-1 그룹은 충돌이 발견되었기 때문에 더 이상 안전하지 않습니다. 현재 SHA-2 및 SHA-3 그룹은 충돌에 강한 것으로 간주됩니다.
프리이미지 저항
프리이미지 저항의 속성은 단방향 함수의 개념과 관련이 있습니다. 누군가 특정 출력을 생성한 입력을 찾을 확률이 매우 낮을 때 해시 함수는 사전 이미지 방지로 간주됩니다.
이 속성은 공격자가 주어진 출력을 보고 입력이 무엇인지 추측하려고 하기 때문에 이전 속성과 다릅니다. 반면에 충돌은 누군가가 동일한 출력을 생성하는 두 개의 다른 입력을 찾았지만 어떤 입력이 사용되었는지는 중요하지 않을 때 발생합니다.
사전 이미지 저항의 속성은 정보를 공개할 필요 없이 메시지의 간단한 해시가 진위를 증명할 수 있기 때문에 데이터 보호에 유용합니다. 실제로 많은 서비스 공급자와 웹 애플리케이션은 일반 텍스트의 암호가 아닌 암호에서 생성된 해시를 저장하고 사용합니다.
2차 프리이미지 저항
단순화하기 위해 두 번째 프리이미지 저항이 다른 두 속성 사이의 어딘가에 있다고 말할 수 있습니다. 누군가가 이미 알고 있는 다른 입력과 동일한 출력을 생성하는 특정 입력을 찾을 수 있을 때 두 번째 사전 이미지 공격이 발생합니다.
즉, 두 번째 사전 이미지 공격은 충돌을 찾는 것을 포함하지만 동일한 해시를 생성하는 두 개의 임의 입력을 검색하는 대신 다른 특정 입력에 의해 생성된 동일한 해시를 생성하는 입력을 검색합니다.
따라서 충돌에 저항하는 모든 해시 함수는 항상 충돌을 의미하기 때문에 두 번째 사전 이미지 공격에도 저항합니다. 그러나 단일 출력에서 단일 입력을 찾는 것을 의미하므로 충돌 방지 기능에 대해 여전히 사전 이미지 공격을 수행할 수 있습니다.
채굴
Bitcoin 마이닝 에는 잔고 확인, 트랜잭션 입력 및 출력 연결, 블록 내 트랜잭션 해싱과 같은 해시 기능을 포함하는 많은 단계가 있어 Merkle Tree를 형성합니다.그러나 비트코인 블록체인이 안전한 주된 이유 중 하나는 광부가 결국 다음 블록에 대한 유효한 솔루션을 찾기 위해 수많은 해싱 작업을 수행해야 한다는 사실입니다.
특히 광부는 후보 블록에 대한 해시 값을 생성할 때 여러 가지 다른 입력을 시도해야 합니다. 본질적으로 그들은 특정 수의 0으로 시작하는 출력 해시를 생성하는 경우에만 블록을 검증할 수 있습니다. 0의 수는 채굴 난이도를 결정하는 것이며 네트워크에 할당된 해시 비율에 따라 다릅니다.
이 경우 해시 비율은 비트코인 채굴에 얼마나 많은 컴퓨터 성능이 투자되고 있는지를 나타냅니다. 네트워크의 해시 비율이 증가하면 비트코인 프로토콜은 블록을 채굴하는 데 필요한 평균 시간이 10분에 가깝게 유지되도록 채굴 난이도를 자동으로 조정합니다. 반대로 여러 명의 채굴자가 채굴을 중단하기로 결정하여 해시레이트가 크게 떨어지면 채굴 난이도가 조정되어 채굴이 더 쉬워집니다(평균 블록 시간이 10분이 될 때까지).
채굴자는 유효한 출력으로 생성할 수 있는 여러 해시가 있기 때문에 충돌을 찾을 필요가 없습니다(특정 개수의 0으로 시작). 따라서 특정 블록에 대해 몇 가지 가능한 솔루션이 있으며 채굴자는 채굴 난이도에 따라 결정된 임계값에 따라 그중 하나만 찾으면 됩니다.
비트코인 채굴은 비용 집약적인 작업이기 때문에 채굴자는 상당한 재정적 손실을 초래할 수 있으므로 시스템을 속일 이유가 없습니다. 더 많은 광부가 블록체인에 참여할수록 더 크고 강력해집니다.
Merkle Tree는 데이터의 무결성을 검증하기 위해 사용되는 트리 구조입니다. Merkle Tree는 해시 함수를 이용하여 데이터의 일부분을 묶어 해시 값으로 변환하고, 이를 순서대로 조합하여 전체 데이터의 해시 값을 만들어 냅니다.
Merkle Tree는 다음과 같은 특징을 가집니다.
- 보안성 : Merkle Tree는 단방향 해시 함수를 사용하여 데이터를 변환하므로, 데이터의 무결성을 보장합니다.
- 검증 속도 : Merkle Tree는 루트 노드의 해시 값만 확인하면, 전체 데이터의 무결성을 검증할 수 있으므로 검증 속도가 빠릅니다.
- 효율성 : Merkle Tree는 데이터를 블록 단위로 나누어 해시 함수를 적용하므로, 대용량의 데이터를 효율적으로 처리할 수 있습니다.
Merkle Tree는 블록체인에서 많이 사용되며, 블록체인에서 거래 정보를 저장할 때, 거래 정보를 블록 단위로 나누어 Merkle Tree 구조를 만들어 냅니다. 이때, Merkle Tree의 각 노드는 이전 노드의 해시 값과 함께 자신의 데이터를 해시 함수에 적용하여 해시 값을 만들어 냅니다. 최종적으로 루트 노드의 해시 값만 블록체인에 저장되며, 블록체인의 다른 사용자는 이 루트 노드의 해시 값만 검증하여 전체 데이터의 무결성을 검증할 수 있습니다.
Merkle Tree는 블록체인을 비롯한 다양한 분야에서 사용되며, 데이터의 무결성을 보장하기 위한 효과적인 방법 중 하나입니다.
마무리 생각
특히 방대한 양의 데이터를 처리할 때 해시 함수가 컴퓨터 과학에서 필수적인 도구라는 데는 의심의 여지가 없습니다. 암호화와 결합할 때 해싱 알고리즘은 다양한 방식으로 보안 및 인증을 제공하는 매우 다재다능할 수 있습니다. 이와 같이 암호화 해시 기능은 거의 모든 암호화폐 네트워크에 필수적이므로 해당 속성과 작동 메커니즘을 이해하는 것은 블록체인 기술에 관심이 있는 모든 사람에게 확실히 도움이 됩니다.
'IT' 카테고리의 다른 글
추세선 공부 (0) | 2023.03.27 |
---|---|
선행 및 후행 지표 알아보기 (1) | 2023.03.27 |
P2P 네트워크 알아보기 (0) | 2023.03.26 |
재정적 위험이 무엇인지 공부하기 (0) | 2023.03.25 |
시장심리학이란? (0) | 2023.03.25 |