• ECDSA : 암호화 서명 알고리즘.
  • Bitcoin 암호화
    • 익명성

      • 신원을 드러내지 않고(Address이용) 거래가 가능하다.
    • 부인방지

      • 본인만이 보유한 개인키로 서명하기 때문에, 부인방지의 기능을 한다.
        • 공인인증서를 사용하는 이유. 공인증서를 이용해 사용자가 책임.
    • 위변조 방지
      - Hash Alogrithm과 PKI를 이용하여 거래 위변조를 방지한다.

      ECDSA : 익명성, 부인방지
      위변조 방지 : Hash

  • ECC
    • ECC(Elliptic Curve Cryptography)는 공개키 암호기술 구현 방식 중 하나.
    • RSA에 비해 더 작은 데이터로 RSA와 비슷한 보안성능을 제공한다.
    • 실제 디지털 서명 방식으로 구현된 알골지므을 ECDSA라고 부른다.
    • Bitcoin에서는 secp256k1 이라는 타원곡선을 이용한다.
      • y2=x3+7y^2 = x^3 + 7
    • 이를 유한한 공간에서 표현하기 위해서 mod p를 통해 갈루아 필드상에서 표시한다.
      • y2mod(p)=(x3+ax+b)mod(p)y^2mod(p) = (x^3 +ax +b) mod (p)
  • PKI
    • ECC에서 곡선 위의 점 P1, P2를 선택하면 우리는 이를 직선으로 연결하면 P3를 찾을 수 있다.
    • dㅣ 수식을 Doubling 이라고 칭한다.
    • Private Key 는 P 보다 작은 소수(d)이다.
    • Public Key는 Q = d x G이다.
    • Q=(G + G + … + G)로 표현한다.
    • 이전강의의 이산대수의 개념으로 . d와 G를 알면 Q를 구하기 쉽지만, Q와 G를 구하면 d를 알 수는 없다.
  • Bitcoin Private Key 생성
  • Bitcoin Address 생성
    • pivate Key : 0000000000…1 Key Conversion → 두가지 Public key
      • compressed Public key
      • uncompressed Public key
    • → Sha256 → RIPEMD-160
      • 해시값.
    • → Base58Encode (개발시 base68을 많이 사용하지만. 헷갈릴수 있는 l, L, O, 0 등을 제거)
      • Address
  • Bitcoin 거래 서명
    • Transaction → (sha256 두번) → Hash Result → (개인키로 서명) → 서명 데이터 → (공개키로 복호화) 비교 ←Hash Result ← (sha256 두번) ← Transaction
  • 서명방식
    • 개인키 d, Random 수 : r, 공개키 Q(dG), 전송 거래 데이터 = m
    • 개인키로 서명하는 법
      • S = hash(m,rG)dG + rG = hash(m, rG)d + r
        • 해싱,개인키로 서명
      • R = rG
        • 공개된 좌표. 더블링한 것. 서명 검증 시 사용.
    • 서명 검증 하는 법
      • 수신 메시지 : m’
      • hash(m’, R)Q + R = SG가 일치하면 서명 검증 성공
        • 공개키로 서명
  • Hash Algorithm
    • Hash Algorithm과 가장 유사한 수학적인 공식은 mod 함수이다.
      • y=x(mod(n))y = x (mod(n))
      • 이산대수 문제와 동일
      • n=7일때,
        1 = 1(mod7)
        3 = 10 (mod7)
        6 = 20 (mod 7)
        2 = 30 (mod 7)
        5 = 40 (mod 7)
  • Hash Alogorithm 이란?
    • String Data, File Data, Image Data → Hash function → 일정한 길이의 결과값 Ex 256bit.
      • 비밀번호 암호화시, 많이 사용. 조금만 달라져도 완전히 다른 Hash 값이 나와. 추론이 불가능함.
    • 단방향(One-Way) 알고리즘
      • 복호화가 불가능.
    • Collision이 거의 발생하지 않음
  • Merkle Tree
    • 하나의 블록에 거래들을 쌓아서 넣음.
    • 트랜잭션들이 모였을 때, Merkle Root만 봐도 바뀐내용을 알수 있음.
    • 트리 구조로 해싱해서 최종 한개의 해시값을 구함. 이것이 Merkle Root. 트랜잭션이 홀수개 일때, 마지막 트랜잭션을 복사.
profile
"프로그래밍은 저의 상상을 실현 시킬 수 있는 유일한 도구입니다."

0개의 댓글