암호학적 해시함수 발표 자료

아곤
4 min readJan 17, 2018

--

링크: http://slides.com/dongsunlim/deck-2#/

가. 비트코인의 보안체계:

모든 프로그램은 여러 구성체계로 이루어져 있음. 마치 사람에게는 팔 다리 머리 그리고 오장육부가 있고 사람의 머리에는 머리카락, 뇌가 있으며 뇌 속에는 시냅스들이 가닥을 이루고 있는 것과 같은 이치임. 필자는 비개발자로 컴퓨터 공학을 전공하지 않았지만 비트코인이라는 거대한 시스템을 이해하기 위해서는 각각의 구성요소들을 세부적으로 이해하는 것이 필요하다고 생각해서 이 강의를 만들게 되었음. 앞으로 비트코인의 체계구성 요소에 대한 이론적 강의를 만들고 개념을 적용한 소스코드를 이용해서 실제로 비트코인과 블락체인 체계를 구현하는 것이 이 강의의 목표임

나. 비트코인의 보안체계 구성:

비트코인의 보안체계는 세 가지 구성요소를 가지고 있음
1. 암호학적 해시함수

2. 공개 키 암호화 방식

3. 작업증명

이 모든 개념은 문명이 시작한 이래로 계속 연구해왔지만 1970년대 이후에 급격하게 체계가 재정립된 암호학이라는 학문을 기반으로 하고 있음

다. 암호학이란?

A(Alice)가 B(Bob)에게 M이라는 메시지를 전하는 상황을 가정함. 이 때 이 메세지를 듣거나 가로채서 소통을 방해하려는 E(Eve)가 있을 수 있음. 암호학의 요지는 이 상황에서 어떻게 메세지를 안전하게 전달할 수 있는지를 다루는 학문임. 이번 강의에서는 메세지(M)자체의 보안을 강화하는 해시함수에 대한 내용을 다룰 것임

  1. 해시함수?
  2. 임의의 길이의 데이터를 고정된 길이의 해시값으로 변환하는 함수
  3. 결정적- 특정한 데이터에 해시함수를 적용하면 언제나 같은 해시 값이 도출됨(랜덤x)
    계산 용이- 일정한 수준 이상의 컴퓨터로 계산이 가능해야 함
  4. 자료저장의 효율성- 데이터의 크기가 얼마인지와는 상관 없이 해시값이 일정함. 예를 들어 100MB의 영상 자료도 32바이트의 해시 값으로 저장할 수 있음
    자료 검색의 용이성- 모든 자료 중에서 하나의 자료를 검색하는 대신 해시 값으로 바로 자료를 찾을 수 있음

라. 암호학적 해시 함수의 특성:

해시함수의 값을 통해 원래 데이터를 유추할 수 없어야 함

  1. 일방통행: 한번 x를 h(x)로 변환하면 다시 h(x)로부터 x를 도출할 수 없음
  2. 높은 충돌 저항: 서로 다른 x와 y 값에 대해 h(x) = h(y)를 찾을 확률이 무시 가능함
  3. 숨김: 두 데이터가 조금만 달라도 완전히 다른 해시 값을 가짐

마. 해시함수의 구성:
MD-5, SHA-1, SHA-2(SHA256포함)은 Merkle-Damgard Construction을 사용함

  1. 시작벡터(initialization vector): 함수 구성 시작을 위한 최초의 고정된 길이값(256bit)
    패딩(padding)- 데이터를 단위블록(sha 256의 경우 512)의 배수로 만들기 위한 값을 체움
  2. 압축(Compression)- 시작벡터와 패딩된 블록을 압축하여 시작벡터와 같은 값의 데이터(256bit)를 생성함
  3. 반복: 모든 블록이 소진될 때까지 다음 블록과 압축으로 생성된 블록을 다시 압축함

바. 암호학적 해시 함수의 보안성:
공격벡터(attack vector): 암호학의 보안성을 깨기 위한 접근 방법

  1. 역산가능성: 해시의 길이에 따라 역산을 위한 계산이 기하급수적으로 늘어남
    (예) SHA-256 = 265bit(32byte), 2²⁵⁶의 계산이 필요함)
  2. 충돌 가능성: 무한한 양의 데이터를 유한한 길이의 해시함수로 변환하기 때문에 충돌은 있을 수 밖에 없음
    (비둘기집 문제)
  3. 충돌 가능성 계산: 생일파티 문제
    (사람이 23명이 모이면 서로 생일이 겹치는 사람이 한 쌍이라도 있을 확률은 50%임)
  4. 해시함수의 보안성이 깨진 예: MD-5/SHA-1

사. 비트코인에서의 해시함수 사용:
해시함수는 비트코인 모든 데이터를 저장, 전송하여 체인을 형성하는데 사용 되는 기본 단위임

  1. 거래 ID(txid): 모든 거래 데이터는 고유의 해시 값을 가지며 이후 거래의 잔고(인풋)을 확인할 때 이전 거래의 해시를 통해 금액을 확인할 수 있음(거래 강의 참조)
  2. 블락헤더 해시(Block header hash): 블락체인 저장 단위인 모든 블락은 이전 블락헤드의 해시 값을 블락해드에 포함함 (블락들이 체인을 형성될 수 있는 이유임) 블락헤드 해드는 이전블락 해시, 버젼, 비트, 논스, 메르켈루트로 구성됨 (철완이의 블락해드 파이썬 코딩 참조)

해시체인의 불가변성: 해시함수의 특성에 블락 데이터를 약간이라도 바꾸면 완전히 완전히 다른 블락헤더 해시가 생성됨. 각 블락헤드는 이전 블락헤드 해시값을 포함하므로 데이터가 바뀐 블락 이후의 모든 블락의 해시 값이 달라짐

  1. 머클 루트: 블락에 포함된 모든 거래의 데이터를 담은 하나의 해시 값 (Sidenote: 머클트리 참조)
  2. 공개 키, 비공개 키, 디지털 서명 (Public Key, Private Key, DSA): 비트코인 지갑 주소는 공개키와 비공개키의 해시 값으로 구성되어 있음. 그리고 거래를 하기 위한 디지털 서명은 개인의 비공개키에 디지털 서명을 추가하는 방식임(비공개키 암호학 강의 참조)
  3. 작업 증명(Proof of Work): 채굴자가 블락 생성을 위해 블락헤더 해시를 연산하는 방법 (원하는 값이 나올 때까지 블락해시를 구함)

--

--