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

  1. 해시함수?
  2. 임의의 길이의 데이터를 고정된 길이의 해시값으로 변환하는 함수
  3. 결정적- 특정한 데이터에 해시함수를 적용하면 언제나 같은 해시 값이 도출됨(랜덤x)
    계산 용이- 일정한 수준 이상의 컴퓨터로 계산이 가능해야 함
  4. 자료저장의 효율성- 데이터의 크기가 얼마인지와는 상관 없이 해시값이 일정함. 예를 들어 100MB의 영상 자료도 32바이트의 해시 값으로 저장할 수 있음
    자료 검색의 용이성- 모든 자료 중에서 하나의 자료를 검색하는 대신 해시 값으로 바로 자료를 찾을 수 있음
  1. 일방통행: 한번 x를 h(x)로 변환하면 다시 h(x)로부터 x를 도출할 수 없음
  2. 높은 충돌 저항: 서로 다른 x와 y 값에 대해 h(x) = h(y)를 찾을 확률이 무시 가능함
  3. 숨김: 두 데이터가 조금만 달라도 완전히 다른 해시 값을 가짐
  1. 시작벡터(initialization vector): 함수 구성 시작을 위한 최초의 고정된 길이값(256bit)
    패딩(padding)- 데이터를 단위블록(sha 256의 경우 512)의 배수로 만들기 위한 값을 체움
  2. 압축(Compression)- 시작벡터와 패딩된 블록을 압축하여 시작벡터와 같은 값의 데이터(256bit)를 생성함
  3. 반복: 모든 블록이 소진될 때까지 다음 블록과 압축으로 생성된 블록을 다시 압축함
  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): 채굴자가 블락 생성을 위해 블락헤더 해시를 연산하는 방법 (원하는 값이 나올 때까지 블락해시를 구함)

--

--

커뮤니티를 만들고 운영합니다

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store