오픈소스 컨트리뷰션 아카데미를 계속해서 진행하고 있다. 조금 늦은 감이 있지만.. 초반에 했었던 학습 중 이더리움에 대한 기본 과제 심화편 공부한 내용을 정리해 보려고 한다.
1. ECDSA가 무엇인지 또 어떻게 동작하는지 간단하게 설명하세요.
타원곡선 디지털서명 알고리즘(ECDSA, Elliptic Curve Digital Signiture Algorithm)은 타원곡선암호를 전자서명에 접목시킨 알고리즘이다. 일반적인 인증 시스템에서 보안 키의 보호가 점점 어려워짐에 따라 보완하기 위해 만들어졌으며 이 방식에서는 발신자에 의한 서명 시 사용되는 개인 키와 수신자가 발신자의 서명을 사용하는 공개키 한 쌍을 갖는다.
블록체인 네트워크에서 트랜잭션을 주고받을 때 수신자가 인증자의 공개 키로 메시지가 진짜인지 검증하기 위해서는 전자서명을 필요로 한다. 이 전자 서명은 개인 키로만 생성 가능하고 수신인이 트랜잭션에 쓰여있는 전자서명이 정말 발신인의 전자서명이 맞는지 확인할 수 있어야 하는데, 이 두 조건을 고루 만족시키는 기술이 타원암호기술이다. 타원곡선 디지털 서명 알고리즘을 통해 암호화폐 거래시 정당한 소유자만이 자금을 쓸 수 있도록 할 수 있으며 대표적으로 비트코인과 이더리움에서 타원곡선 디지털서명 알고리즘을 사용한다.
키 쌍을 생성할 때는 길이가 256비트 이상을 사용하며, 미국국립표준기술원(NIST)에서 개발한 secp256k1 표준에 정의된 타원 곡선을 사용한다.
$$ y^2\,mod\,p\,=\,(x^3\,+\,7)\,mod\,p\,p\,=\,2^{256}\,-\,2^{32}\,-\,2^9\,-2^8\,-\,2^7\,-\,2^6\,-\,2^4\,-\,1 $$
도메인 파라미터는 다음과 같다
- p : modulo prime number
- a, b : 방정식 계수
- G : Base Point / Generator Point
- n : order of point G (G를 n번 더하면 무한원점이 되는 값)
- h : cofactor
- 총 점의 수 N은 Schoof's 알고리즘을 통해 구한다.
- 전체 집합 원소의 수 N에서 부분집합의 수인 n을 결정한다.
- 보조인자(cofactor)인 h = N / n 을 구한다.
- 타원곡선 위 임의의 점 P를 골라서 기준점 G = hP를 구한다.
- G가 0이면 다른 P를 골라서 반복한다.
기본 원리는 다음과 같다.
- 타원곡선에서 임의의 점(Point of Origin)을 선택한다.
- 임의의 숫자(Private Key)를 생성한다.
- 원점과 임의의 숫자를 사용하는 마법의 수학 방정식을 쓰면 타원곡선 위에서 두 번째 점(Public Key)이 된다.
- 파일의 hash와 함께 이 Private Key를 마법의 방정식에 넣으면 서명이 부여된다. 서명은 R과 S 두 부분으로 나뉜다.
- 서명이 올바른지 확인하려면 Public Key, S, R를 또 다른 마법의 방정식에 넣으면 R이 나오는 것을 확인한다.
1. Private Key (d)
RSA와 달리 Private Key를 먼저 정한다. 난수생성기를 사용하여 1, ... , p-1 범위 중 랜덤 integer d를 선택한다.
$$ y^2\,=\,x^3\,-\,2x\,+\,15\,G\,=\,[4,5]\,d_A\,=\,3 $$
2. Public key (Q)
타원곡선의 public key는 generation point의 시작점 G가 private key에 해당하는 숫자, d만큼 타원곡선 상의 덧셈 연산을 실행해 곡선에 안착한 좌표, Q에 해당한다.
$$ Q(x,y)\,=\,d\,\times\,G(x_0,y_0) $$
G는 이미 알려져 있고, Q는 Public Key 생성 후 공개되지만, 이 두 값으로 d를 유추해 내기 굉장히 어렵다.(ECDLP, Elliptic Curve Discrete Logarithm Problem)
3. Sign
파일의 해시(파일 고유 번호)와 함께 개인키를 방정식에 넣으면 서명됨
서명은 각각 20바이트의 r과 s 두 값으로 나뉨 (r,s)
- r
- 먼저 임의의 값인 k(20 bytes)를 생성하고 점의 곱셈을 사용하여 P = k X G 를 계산한다.
- 점 P의 x값이 r을 나타낸다.(20 bytes)
- s
- s를 계산하려면 메시지의 SHA1 해시를 만들어야 한다. 이 값은 매우 큰 정수로 간주되는 20 bytes 값을 제공하며 z라고 한다.
- 다음 등식을 사용하여 s를 계산할 수 있다.
$$ s\,=\,k^{-1}\,(z\,+\,dA\,\times\,r)\,mod\,P $$
4. 검증
public key만 있으면 가능하다. 아래 방정식을 통해 점 P를 계산한다.
$$ P\,=\,s^{-1}\,\times\,z\times\,G\,+\,s^{-1}\,\times\,r\,\times\,Qa $$
2. 이산로그 문제가 무엇인지 그리고 이더리움에서 사용되는 타원곡선 암호학이 왜 안전한지 이산로그 관점에서 설명해주세요.
이산 로그 문제는 이산 대수 문제라고도 하며, 순환군 <g>와 군의 원시근(primitive root) g, 그리고 y ∈ ⟨g⟩가 주어졌을 때, y=g^k 를 만족하는 최소의 자연수 k를 찾는 문제이다. 암호학에서는 큰 소수 p에 대해 p로 나눈 나머지들의 모임인 ℤ∗p 를 사용하는 경우가 많다.
타원곡선 암호(Elliptic Curve Cryptography)는 타원곡선을 기반으로 한 암호방식으로, 대표적인 공개키 방식이다. 타원곡선 군의 연산에서 정의되는 이산대수 문제의 어려움을 기초로 하는 공개키 알고리즘 시스템으로서 RSA/DSA와 같은 공개키 암호보다 짧은 키 길이와 빠른 연산속도를 가지면서 동일한 수준의 보안 강도를 제공한다.
타원곡선 암호는 유한체 상의 타원곡선의 수학적 성질을 이용한 암호기술이다. 공개키 암호화 방식 중 하나인 타원곡선암호는 이러한 유한체 위에서의 타원곡선의 대수적 구조를 기반으로 한 이산로그 문제에 착안해서 만들어졌다. 여기서 유한체란 집합에 속해 있는 원소의 수가 한정되어 있으며, 덧셈과 곱셈 연산에 대해서 닫혀 있는 집합을 말하는데, 닫혀 있다는 말은 곧 연산의 결괏값도 집합에 속해있음을 의미한다. 암호학에서 그래프와 부딪히는 값을 추측하지 못하도록 더 어렵게 하기 위해, 정의역과 치역을 소수 p 체계로 한정한다.
유한체는 컴퓨터 계산에 매우 적합하기 때문에 타원 곡선에 사용되며, 타원곡선암호의 p를 가지고 모듈러 계산을 하는데 이는 유한체이다. 또 타원곡선이 암호학에 적합한 이유는 실수 상에서 연산하든, 유한체 상에서 연산하든 언제나 동일한 수학 법칙이 적용되기 때문이고, 암호 연산은 정수를 기반으로 계산해야 하기 때문이다.
3. 이더리움 확장성을 개선하는 방법인 롤업이 기존의 "플라즈마"와 어떤 면에서 다른 것인지 데이터 가용성(Data Availability) 측면에서 설명해주세요
블록체인의 기본 전제는 '네트워크에 참여하는 모든 노드가 모든 트랜잭션을 독립적으로 처리한다'는 것이다. 그리고 한 번 등록된 데이터는 지울 수 없다. 이러한 특성 때문에 시간이 지날수록 블록체인 저장 용량은 커지게 되고, 이로 인해 트랜잭션의 처리 시간이 느려지는 문제가 발생한다.
확장성 솔루션들은 '모든 노드가 모든 트랜잭션을 처리한다'는 기본 가정에서 벗어나 '각각의 노드가 일부의 트랜잭션을 나눠서 처리'하는 방식으로 트랜잭션을 처리량을 높이려고 하고 있다. 그러나 각각의 블록체인 노드가 모든 데이터를 갖고 있지 않은 샤딩된 블록체인의 경우, 블록체인의 정합성을 깨는 공격들이 가능하게 된다.
롤업(rollup)의 경우 이더리움이 갖는 보안성을 건들지 않으면서도 확장성을 강화할 수 있다는 이유로 주목을 받고 있다. 롤업은 주로 이더리움 체인(Layer 1) 외부에서 트랜잭션 실행을 수행하지만 레이어1에 트랜잭션 데이터를 게시하는 솔루션이다. 롤업의 속성은
- 레이어 1 외부에서 트랜잭션 실행
- 데이터 또는 트랜잭션 증거는 레이어 1에 위치
- 레이어 1의 트랜잭션 데이터를 사용하여 레이어 2에서 올바른 트랜잭션 실행을 시행할 수 있는 레이어 1의 롤업 스마트 계약
롤업은 '관리자'가 롤업 계약에 채권을 스테이킹해야 한다. 이는 운영자가 트랜잭션을 올바르게 확인하고 실행하도록 장려한다.
플라즈마(Plasma)는 이더리움 블록체인 위에 레이어 2 블록을 사이드체인 형태로 배치하는 방식으로 구성된다. 이를 구현하면 이더리움 블록체인에 추가되는 사이드 체인 블록의 단일 해시만으로 수백 개의 사이드 체인 트랜잭션을 오프라인으로 처리할 수 있다.
플라즈마의 경우 유독 데이터 가용성 문제가 부각이 되는데, 그 이유는 확장성을 위해 레이어 2의 모든 블록 데이터를 루트 체인에 기록하지 않고, 머클루트만을 기록하기 때문이다. 블록의 머클 루트 만으로는 실제 블록의 트랜잭션의 내용을 파악할 수 없으므로, 플라즈마 오퍼레이터가 의도적으로 이중 지불이 담긴 블록을 만들어내고 이러한 내용이 담긴 블록의 전파를 하지 않는다면 플라즈마의 자산 안정성(asset security)은 위협받게 된다. 이러한 상황을 막기 위해 각각의 플라즈마 솔루션은 별도의 데이터 가용성 이슈에 대한 대비책을 두고 있다.
참고자료
http://blog.somi.me/math/2019/06/10/understanding-ECC-ECDSA/
https://nyan101.github.io/blog/algorithms-for-discrete-logarithm-problem
https://m.blog.naver.com/mage7th/222456796052
'Dev. Life > 2021 오픈소스 아카데미 - 이더리움' 카테고리의 다른 글
[이더리움] 2주차 과제 기본질문 - Advanced Part 2. (0) | 2021.11.18 |
---|---|
[이더리움] 1주차 과제 기본질문 - Basic (0) | 2021.08.26 |