@hk316_tostit
로그인
@hk316_tostit
로그인
[Part1-CH1] ECDSA와 Hash Algorithm
Back end Chain
·
2022년 10월 26일
팔로우
0
Bitcoin
CH1. Blockchain 1.0 - Bitcoin
Part1. 블록체인의 모든 것
블록체인
패스트캠퍼스
한 번에 끝내는 블록체인 개발 A to Z
0
패스트캠퍼스, 한 번에 끝내는 블록체인 개발 A to Z
목록 보기
4/17
ECDSA : 암호화 서명 알고리즘.
Bitcoin 암호화
익명성
신원을 드러내지 않고(Address이용) 거래가 가능하다.
부인방지
본인만이 보유한 개인키로 서명하기 때문에, 부인방지의 기능을 한다.
공인인증서를 사용하는 이유. 공인증서를 이용해 사용자가 책임.
위변조 방지
- Hash Alogrithm과 PKI를 이용하여 거래 위변조를 방지한다.
ECDSA : 익명성, 부인방지
위변조 방지 : Hash
ECC
ECC(Elliptic Curve Cryptography)는 공개키 암호기술 구현 방식 중 하나.
RSA에 비해 더 작은 데이터로 RSA와 비슷한 보안성능을 제공한다.
실제 디지털 서명 방식으로 구현된 알골지므을 ECDSA라고 부른다.
Bitcoin에서는 secp256k1 이라는 타원곡선을 이용한다.
y
2
=
x
3
+
7
y^2 = x^3 + 7
y
2
=
x
3
+
7
이를 유한한 공간에서 표현하기 위해서 mod p를 통해 갈루아 필드상에서 표시한다.
y
2
m
o
d
(
p
)
=
(
x
3
+
a
x
+
b
)
m
o
d
(
p
)
y^2mod(p) = (x^3 +ax +b) mod (p)
y
2
m
o
d
(
p
)
=
(
x
3
+
a
x
+
b
)
m
o
d
(
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 생성
256bit 길이의 랜덤 숫자 생성하여 이를 Private Key로 이용.
http://privatekeys.pw
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
(
m
o
d
(
n
)
)
y = x (mod(n))
y
=
x
(
m
o
d
(
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. 트랜잭션이 홀수개 일때, 마지막 트랜잭션을 복사.
Back end Chain
"프로그래밍은 저의 상상을 실현 시킬 수 있는 유일한 도구입니다."
팔로우
이전 포스트
[Part1-CH1] 암호화 기술
다음 포스트
[Part1-CH1] Network 기본
0개의 댓글
댓글 작성