Pairing-based Cryptography와 BLS signature의 이해 — Part 1

Kyoungil Bae
AtomrigsLab
Published in
20 min readAug 29, 2020

--

글을 시작하며

암호학은 블록체인으로 인해 가장 크게 발전하는 분야입니다. 튜링상에 빛나는 암호학 대가들과 중견 암호학자들의 상당수가 블록체인 프로젝트에 참여하고 있습니다. 또한 그동안 학계 밖에서는 크게 주목받지 못했거나 폭넓게 실용화되지 못했던 암호 이론들도 블록체인에서 꽃을 피우는 경우가 꽤 있습니다.

이 글의 주제인 Pairing-based Cryptography(이하 PBC) 역시 블록체인 속에서 재조명되고 있는 분야이며 그 어플리케이션으로는 BLS signature, zk-SNARK 등이 있습니다.

또 다른 주제인 BLS signature는 Ethereum 2.0에서 공식 전자서명 알고리즘으로 지정되었고 많은 블록체인 개발자들이 현재 열심히 공부하고 있는 기술입니다. Bitcoin이나 Ethereum 1.0이 사용하고 있는 전자서명 알고리즘인 ECDSA에 비해 BLS signature의 경우에는 수 체계와 알고리즘을 이해하기 위해서 상당한 공부가 필요하기 때문입니다.

이 문서는 PBC와 BLS signature를 학문적으로 기술하고 있지는 않습니다. 다만 개발자들이 그 원리를 잘 이해하고 실수 없이 코딩할 수 있도록 하고, 나아가 핵심 개념을 잘 이해해서 더 높은 수준의 리서치가 가능하도록 도움을 주기 위해 작성되었습니다.

전체 문서는 세 개의 Part로 구성되어 있습니다. Part 1에서는 PBC와 BLS signature를 이해하기 위해 꼭 필요한 수학적 개념과 타원곡선 암호학의 기초에 대해 설명합니다. 다소 지루하게 느껴지거나 정보의 나열로 느껴질 수 있겠으나 전체 문서의 이해를 위해 꼭 필요한 개념들입니다. 또한 Part 1만 이해해도 현 블록체인들이 주로 사용하는 ECDSA에 대한 이론적 이해가 가능할 것입니다.

Part 2는 PBC에서 사용하는 커브의 구성과 pairing 함수에 대해 설명합니다. 여기에는 상당히 어려운 수학적 테크닉이 필요하지만 가능한 한 이러한 수학적 개념들을 동원하지 않고 각각이 가지는 암호학적/기술적 의미에 대해 쉽게 기술하려고 노력하였습니다.

Part 3은 PBC의 가장 중요한 어플리케이션인 BLS signature에 대해 설명합니다. 최근 rogue attack을 방지하고 대량의 서명 검증을 빠른 시간에 처리하기 위해 개선되고 있는데 이에 대해서도 설명할 예정입니다. 더불어 zk-SNARK에서 PBC의 역할에 대해서도 간략하게 소개할 것입니다.

이 문서를 읽고 더 깊이 공부하기를 원하는 분들을 위해 문서 중간중간에 참고 링크를 남기겠습니다. 문서를 간결하게 작성하기 위해 이후부터는 평어체로 작성하였으니 양해 부탁드립니다.

Part 1. Preliminaries

PBC를 이해하는 데에 꼭 필요한 수학적 개념들

암호학 공부를 시작하면 먼저 봉착하는 어려움이 수학이다. 그것도 고등학교때 배우지 않았던 field, group 등의 내용을 알아야 하고, 이에 대한 기반 지식이 없으면 암호학 문서 한 장을 읽기 힘들다. 또한 암호학에서 쓰는 수학은 금융공학이나 인공지능에서 쓰는 수학과도 다르다. 예를 들면 이들 분야에서는 과거 데이터를 이용한 시뮬레이션을 통해서 미래의 현상을 추정하거나 근사값을 찾아가는 해석학적 사고가 필요하다면, 암호학에서는 bit 단위로 정확하게 일치하는 데이터를 다루게 되고 주로 대수학적 사고가 필요하다.

우리가 보게 될 실용화된 PBC는 타원곡선 암호학(Elliptic Curve Cryptography, 이하 ECC)을 기반으로 하기 때문에 PBC를 이해하기 위해서는 ECC의 이론적 지식은 물론 ECC의 기반이 되는 수학적 지식이 꼭 필요하다. 물론 PBC를 암호학자 수준으로 이해하려면 상당 수준의 수학적 기본기가 필요하다. 그러나 서두에서 말한 바와 같이 이 글에서는 최대한 개발자의 머리를 괴롭히지 않는 선에서 쉽게 설명할 예정이다.

ECC를 이해하기 위해 꼭 이해해야 하는 수학적 개념은 field와 group이다. 이 중에서도 사실 ECC에서는 group이 중요하다.

주) 한글로 field는 ‘체’, group은 ‘군’이라 한다. 그러나, 영어 문서를 많이 봐야하는 개발자들에게 혼란을 주지 않기 위해서 이 문서에서는 영어 단어 그대로 쓰기로 한다.

Group과 field는 아래 그림의 조건들(axioms)을 만족하는 집합을 의미한다.

Group의 대표적인 예는 정수이다. 또한 field의 예는 유리수(두개의 정수 a, b에 의해 a/b로 표현될 수 있는 수의 집합)이다. Field의 조건을 만족하면 group의 조건도 만족하기 때문에 모든 field는 group이기도 하다. 따라서 유리수는 group이기도 한다. 반대로 group인 정수는 field가 될 수 없는데 예를 들면 3의 역수(inverse), 즉 곱해서 곱의 항등원(identity) 1을 만드는 수가 정수에는 없기 때문이다.

위에서 언급한 group과 field는 무한한 개수를 가지는 집합이나, 암호학에서는 유한(finite)한 개수를 가지는 finite field와 finite group을 다룬다. 무한한 수를 대상으로 암호 체계를 구성하면 더 안전하리라 생각할 수도 있다. 그런데 아무리 안전해도 만약 현대의 컴퓨터로 서명하거나 암호화하는 데에 너무 긴 시간이 걸린다면 그 활용 범위가 너무 제한적이다.

따라서 수용 가능한 수준의 안전성을 담보하면서도 효율적으로 서명, 암호화, 키 합의 등이 가능한 수준의 수체계와 연산 방식이 필요하다. 이를 위해서 암호학에서는 finite group, finite field와 이의 기초 연산(더하기, 곱하기)으로 modular 연산을 주로 이용한다. 수학자들이 농담처럼 하는 말이 ‘수학이 이렇게 어려운 이유는 Gauss가 너무 오래 살아서 그렇다’라는 말이 있는데, modular 연산도 Gauss가 1801년에 발표한 개념이다.

주) 잘 느낌이 오지는 않지만 modular 연산을 한글로 ‘합동연산’이라 부른다.

쉽게 이해하자면 어떤 2 이상의 자연수 N에 대해 N보다 작은 ‘두 수의 더하기 혹은 곱하기’는 산술적인 합 혹은 곱을 N으로 나눈 나머지로 정의하는 개념이다. 이때의 N을 modulus라고 한다. 우리 생활속에서 보면 20시에서 10시간이 지나면 6시가 되는데, 이 경우 20시+10시를 하루의 단위인 24시로 나눈 나머지인 6시로 계산하는 modular 24 연산을 적용한 것이다.

예를 들면 N을 5라고 할 때 3+4는 7을 5로 나눈 나머지 2가 된다. 2*3은 6을 5로 나눈 나머지 1이 된다. 참고로 말하자면 수학자들이 말하는 더하기와 곱하기를 순진하게 정수의 산술적 더하기와 곱하기로 바로 생각하면 안된다. 이들이 말하는 더하기와 곱하기의 정의가 무엇인지 잘 봐야 한다. 뒤에서 보게 될 타원곡선 그룹 원소 간의 더하기 연산을 보면 이해가 갈 것이다.

이 modular 연산을 이용하면 유한한 개수를 가진 finite group과 finite field를 어렵지 않게 만들 수 있다.

예를 들면 Z5 = {0, 1, 2, 3, 4}는 modulus 5를 적용한 더하기/곱하기 연산에 대해 finite group이자, finite field이다. 위의 group axiom과 field axiom을 체크해 보기 바란다.

주) 위와 같이 N보다 작고 0 이상의 정수 집합을 ZN이라 표기한다.

이때 finite group 혹은 finite field의 원소 개수를 order(차수)라고 하고 |ZN| 으로 표기한다.

그리고 만약 N이 prime(소수, 1과 자기 자신 외의 다른 수로는 나눌 수 없는 수)이면 ZN 자체는 언제나 finite field가 된다 (당연히 finite group 도 된다). 다행히 우리가 다룰 모든 ECC (BLS signature 포함)에서 다루는 기초 수 체계는 prime N인 finite field를 다룬다.

이제 ECC를 이해하기 위해 cyclic group(순환군)과 generator(생성원)를 설명해 보자.

Z5에서 5에 대한 modular 더하기 연산으로 2를 하나씩 더해보자.

2 (mod 5) = 2

2+2 (mod 5) = 4

2+2+2 (mod 5) = 1

2+2+2+2 (mod 5) = 3

2+2+2+2+2 (mod 5) = 0

2+2+2+2+2+2 (mod 5) = 2

‘2 → 4 →1 →3 → 0’ 형태로 Z5의 모든 원소를 만들어 내고(generate), 그 후 다시 2로 회귀(cyclic)하고 있다. 이렇게 자신이 속한 group을 modular 더하기 연산으로 만들어 내는(generate) 원소를 generator라고 하고 전체 원소를 만들 수 있는 generator가 존재할 경우 그 group을 cyclic group이라 한다.

위 예에서 만약 N이 prime일 경우 0을 제외한 ZN 내의 모든 수가 generator가 될 수 있다. 시간 되면 1, 3, 4에 대해서도 해보기 바란다. Part 1에서 보게 될 모든 group은 cyclic group이며 모든 원소가 generator가 될 수 있다 (이 때 group order 역시 prime이다).

주) 정확하게 하자면 N보다는 |ZN|, 즉 order가 prime이어야 하는데, 이 예에서는 N = |ZN| 이므로 그냥 넘어가자. 또한 Part 2에서는 order가 prime이 아닌 group을 보게 되는데 이때에는 order가 prime인 subgroup을 사용하게 된다.

또 하나 주목할 점은 ZN의 모든 원소는 자기 자신을 N번 더할 경우 반드시 0이 된다. Modular N을 적용하니 당연해 보이겠지만 타원곡선 등 좀 복잡한 group에서는 매우 중요한 특징이 된다.

우리가 ECC에서 사용하는 group이 바로 cyclic finite group이며 모든 원소가 generator가 될 수 있다. 물론 여기에서 사용하는 더하기 연산은 좀 복잡하다. 말한대로 수학자들이 말하는 ‘더하기’를 순진하게 초등학교에서 배우는 더하기로 생각하지 말기 바란다.

수학은 여기까지 하자. Finite field, modular 연산, cyclic group, generator 만 일단 이해하면 된다.

ECC

대부분의 암호학 표준과 마찬가지로 ECC 역시 1980년대 소개된 이후 거의 20년에 가까운 안전성 검토와 사회적 합의를 거친 후 표준으로 채택되었다. ECC가 가지는 가장 중요한 장점은 더 작은 수 체계로 높은 안전성과 효율성을 보인다는 점이다. 예를 들면 256 bits ECC 개인키가 4096 bits RSA 개인키보다 더 강하다고 한다. 여기에서 강하다는 의미는 공개키에서 개인키를 유추해내기 어렵다는 의미이다. 또한 숫자가 작은 만큼 서명, 암호화, 키합의 등의 기본 연산이 RSA에 비해 빠르다.

우리가 자주 쓰는 타원곡선은 아래와 같은 공식으로 표현된다. 이러한 형태의 식을 Weierstrass equation이라고 한다.

y^2 = x^3 + ax +b

주) 이외에도 Montgomery, Edwards 등 다른 형태도 있다. 다른 형태의 타원 곡선에 대해서는 다른 글에서 다뤄 보도록 하겠다. 예를 들면 현대 암호학에서 빼놓을 수 없는 Ed25519의 경우 Twisted Edwards Curve를 쓴다.

Bitcoin과 Ethereum, 그리고 이들로부터 fork된 다른 블록체인들은 대부분 secp256k1이라는 타원곡선을 쓰고 있다. Secp256k1의 식은 a와 b에 각각 0, 7을 적용한 y^2 = x^3 + 7 이다.

이 그래프를 x-y 평면에 그려보면 다음 그림의 왼쪽과 같다.

그림 오른쪽에서 파이썬에서 secp256k1의 파라미터들을 나열했는데, a와 b에 0과 7이 지정되어 있음을 볼 수 있다. 그런데 굉장히 큰 수인 p, q는 무엇을 의미할까? 사실 p와 q의 의미를 제대로 이해하고 있다면 타원곡선을 잘 이해하고 있으니 다음 섹션으로 넘어가도 좋다.

주) q의 경우 다른 라이브러리나 NIST specification에서는 n으로도 표기한다.

결론부터 말하자면 p는 타원곡선 base field의 order, q는 타원곡선 group의 order이다.

위의 타원곡선 일반 공식을 보다 정확히 적자면 아래와 같다.

y^2 = x^3 + ax + b (mod p)

타원곡선 base field는 위 식을 만족시키는 a, b, x, y가 속한 finite field를 의미한다. 앞에서 {0, 1, 2, …, p-1}과 같이 0 이상이고 p보다 작은 정수의 집합을 Zp로 표기하고 p가 prime이면 finite field라고 했다. 지금부터는 field임을 표시하기 위해 Fp로 표기한다.

a와 b의 경우 타원곡선 종류에 따라 지정되어 있다. 위 식을 만족하는 (x, y) 좌표들의 집합이 타원곡선 group이 되며 E(Fp)로 명기한다. 이를 그림으로 표기하자면 다음과 같다.

Modular 연산을 통해서 y^2 = x^3 + ax + b (mod p)을 만족하는 모든 (x, y) 집합과 한 원소(point of infinity)를 타원곡선 그룹이라 한다. 이때 x, y는 Fp에 속하는 원소이기 때문에 Fp는 타원곡선 그룹 E(Fp)의 base field라고 부른다. Point of infinity는 타원곡선 그룹의 더하기 연산의 항등원 역할을 한다.

Part 1에서는 타원곡선 그룹이 prime order인 것으로 가정(즉 q가 prime)하고 설명을 진행하겠다. 우리의 호프 secp256k1의 타원곡선 그룹 order도 prime이며 이게 바로 위 파이썬 코드의 q이다.

이 글의 범위를 넘기 때문에 원리를 자세히 설명하기는 어렵지만 왜 prime order를 쓰는 게 유리한지 간략히 설명해 보겠다. 만약 그룹 order가 prime이 아니라면, 즉 보다 작은 prime divisor(약수)들의 곱으로 order가 구성된다고 해보자. 예를 들면 33은 prime divisor, 3과 11의 곱이다. 이때 ECC 개인키의 안전성(즉 공개키로부터 개인키를 도출하는 난이도)은 order의 크기가 아닌 prime divisor들의 크기, 특히 가장 큰 prime divisor의 크기로 결정된다. 그러므로 가장 바람직한 것은 order 자체가 prime이거나 최소한 가장 큰 prime divisor가 아주 큰 수이어야 한다.

주) 대표적인 타원곡선 그룹이 모두 prime order는 아니다 예를 들면 유명한 EdDSA의 Edwards25519, 곧 보게 될 BLS12–381의 타원곡선 그룹 order는 prime이 아니다. 이때에는 타원곡선 그룹의 subgroup을 쓰게 되는데 이 subgroup의 order가 prime이고 물론 아주 큰 수이다. 타원곡선 그룹의 subgroup에 대해서는 BLS12–381이 등장하는 Part 2에서 설명하겠다.

같은 finite field Fp(p는 prime)를 base field로 쓴다고 해도 타원곡선의 식을 어떻게 설정하느냐에 따라(즉 a, b 값들의 설정) 타원곡선 그룹의 order가 prime이 될 수도 있고 아닐 수도 있다.

예를 들면 F23 = {0, 1, 2, …, 22}을 base field로 할 때 y^2 = x^3 + 20x + 8 (mod 23)의 경우 타원곡선 그룹의 order는 31이고 y^2 = x^3 + 6x + 8 (mod 23)은 26이다. 이 order는 어떻게 계산할까? 23 정도로 작은 숫자의 경우에는 모든 경우(23 X 23 = 529의 경우)를 대입해 보면 되겠지만 위 파이썬 코드에 나온 대로 p가 굉장히 큰 경우에는 Schoof’s algorithm을 적용해서 타원곡선 그룹 order를 도출해 낸다.

아래 그림은 F23을 base field로 할 때 y^2 = x^3 + 20x + 8 (mod 23)를 만족시키는 (x, y) 원소들을 좌표에 표시한 그래프를 보여준다.

오른쪽의 수치는 파이썬으로 이중 한 점 (16, 13)에 자기 자신을 하나씩 더했을 때 31번째에 항등원(point of infinity)이 나오고 전체 타원곡선 그룹을 만들어 내는(generate) 것을 보여주고 있다. 앞에서 말한 cyclic group과 generator의 바로 그 특징이다. 정리하자면 order q가 prime일 경우 타원곡선 그룹은 다음의 성질을 만족하는 cyclic group이 된다.

- 타원곡선 더하기 연산에 대해 group axioms를 만족함 (Point of Infinity가 항등원이며 𝒪로 표기함)

- Prime order q를 가지는 cyclic group

- 타원곡선 group, E(Fp)의 모든 원소는 generator가 될 수 있음

- 모든 generator에 대해 q번 더할 경우 𝒪가 됨

그렇다면 두 포인트를 더한다는 것은 무슨 의미일까? 이를 위해 타원곡선에서는 아래 그림과 같이 속칭 ‘chord and tangent rule’을 적용한다.

주) chord는 직선과 곡선이 만나는 모양을, tangent는 곡선 한 지점의 접선을 의미한다.

이 그림들은 모두 실수 x-y 평면 위에서 타원곡선 그룹 더하기 연산의 기초가 되는 negation, addition, doubling의 기하학적인 의미를 보여주고 있다.

어떤 수의 더하기에 대한 역원(inverse)은 더했을 때 항등원을 만드는 수이다 (group axiom중 invertibility). 기하학적으로 보면 타원곡선 그룹의 항등원 𝒪는 y 축의 무한한 위 혹은 바닥에 있는 평면으로 생각하면 된다. 정확한 수학적 표현은 아니겠지만 이때 타원곡선을 지나는 직선을 그었을 때 만나는 점들의 합이 𝒪이 된다고 생각하면 쉽다. 위 세 그림을 보면 P + (-P) = 𝒪 (직선이 y축에 평행인 수직선), P1 + P2 + P3 = 𝒪 (직선이 타원곡선의 세 점을 지나는 사선), 2P1 + P2 = 𝒪 (직선이 타원곡선의 접선, 즉 두 점을 지나는 사선; 이때 접점을 두 번 더함)으로 생각하면 된다. 따라서 P1 + P2 = -P3 그리고 2P1 = -P2 로 계산된다.

그런데 앞에서 본 것처럼 우리가 다루는 타원곡선 그룹은 이 그림에서의 곡선이 아닌 정수 x, y로 표시되는 포인트의 이산적인(discrete) 집합이다. 이 그림을 우리가 다뤘던 예인 E(F23): y^2 = x^3 + 20x + 8 (mod 23)의 타원곡선 그룹의 방식으로 표시하면 아래 그림들과 같다.

왼쪽의 그림을 보면 (x, y)의 역수는 (x, -y)인데 중간 그림을 보자. modular 연산에서는 -13 = 23–13 = 10 (mod p)이다. 따라서 (16, 13)의 역수(더하기에 대한)는 (16, 10)이다. 기하학적으로도 같은 방식으로 역수를 찾는다. 제일 오른쪽 코드에서 보면 (16, 13) + (16, 10) = 𝒪 가 됨을 알 수 있다.

두 다른 점의 합(addition)의 경우 실수 평면 곡선과 같은 기하학적 구조로 산출할 수 있다. 중간 그림에서도 두 점 (11, 8)과 (16, 13)을 연결한 선과 만나는 점 (20, 17)의 역수인 (20, 6)을 합으로 도출함을 알 수 있다.

한 점의 두 배(doubling)를 생각해보면 실수 평면에서는 이해가 쉽다. 그런데 중간 그림과 같이 이산적인 점의 집합일 경우에는 어떻게 접선을 구할까? 이 때는 아래 수식의 도움을 받는다.

갑자기 미분이 나와서 좀 놀라는 분들도 있겠지만 이렇게 하면 점의 접선 기울기를 구할 수 있다. 중간 그림과 같이 (16, 13)을 지나는 기울기 2의 직선은 (18, 17)을 만나고 이의 역수인 (18, 6)이 바로 2*(16, 13)이 된다.

타원곡선 그룹에서는 그룹 원소들 간의 더하기와 함께 그룹 원소와 숫자(scalar)의 곱을 지원한다.

그런데 사실은 이게 그룹 원소를 숫자만큼 반복적으로 더하는 것이라고 생각하면 된다. 즉 3*(16,13) = (16,13) + (16,13) + (16,13) 이다 (위 세 그림의 오른쪽 숫자들을 보면 이해하기 쉽다).

실제 secp256k1이나 NIST에서 표준으로 제정한 타원곡선들은 안정성이 충분히 검토된 커브들이니 보안강도(개인키의 bit 수)에 맞는 타원곡선을 골라서 쓰면 된다.

주) NIST에서 표준으로 제정한 타원곡선에 의혹이 있다고 주장하는 학자들도 있다. 그래서 Bitcoin이 NIST 표준이 아닌 secp256k1을 선택했다는 설도 있다. 사토시만 답을 알고 있겠지만.

위 그림은 앞에서 언급한 secp256k1의 속성을 조금 더 보여주고 있는데 추가된 정보는 base point (generator)인 G = (gx, gy)이다. 앞에서 말한 바와 같이 prime order를 가진 cyclic group인 타원곡선 그룹에서는 모든 원소가 generator가 될 수 있다. 그런데 secp256k1에서는(모든 표준 타원곡선도 마찬가지로) 유독 한 포인트를 base point인 generator로 지정하고 있다.

대부분의 타원곡선 기반 전자서명 알고리즘에서는 랜덤하게 개인키(scalar)를 선택한 후 여기에 generator를 곱해서 포인트 형태의 공개키를 추출한다. 따라서 많은 사람이 공유하고 사용해야 하는 타원곡선 표준에서는 모두가 동일하게 사용할 기준점(base point)인 generator를 표준화해야 한다.

또한 base point를 설정하기에 따라 보안성과 효율성에 차이가 있다고 한다 (이에 대한 자세한 내용은 https://ijarcce.com/wp-content/uploads/2012/03/IJARCCE7J-a-moumita-Point-Generation-And-Base.pdf 를 참고하자).

주) Part 2에서 설명하겠지만 Prime order가 아닌 타원곡선 그룹에서는 base point를 지정하는 것이 subgroup을 지정하는 또 다른 매우 중요한 역할을 한다.

이제 중요한 수학적 개념과 타원곡선 암호학의 이론적 기반에 대한 핵심적인 설명이 끝났다.

지금까지 설명한 내용만으로 구성된 전자서명 알고리즘이 바로 ECDSA이다. Bitcoin, Ethereum 등의 블록체인 그리고 공인인증서 등에서 가장 널리 쓰이는 타원곡선 기반 디지털서명 알고리즘이다. 아래 그림은 ECDSA의 세 가지 알고리즘을 보이고 있다.

개인키(sk)는 {1, …, q-1} 사이에서 랜덤하게 선택되고, 개인키에 타원곡선의 generator인 G를 곱하면 공개키가 된다. 예를 들면 secp256k1에서 개인키로부터 공개키를 추출하기 위해서는 아래 방식의 연산을 해야 한다.

개인키(sk)와 함께 전자서명 r과 s, 메시지 해시 등은 모두 scalar 값이며 이 값들은 타원곡선 그룹에 속하는 포인트 인 G (generator) 혹은 공개키(pk)와 다수의 곱하기 연산을 하게 된다.

이 연산 과정에서 위에서 설명한 타원곡선 그룹의 negation, addition, doubling 연산 등이 기초 원리로 적용된다. 다만 이렇게 큰 수들을 다루기 위해서는 빠른 연산 알고리즘이 필요하며 주요 알고리즘에 대해서는 아래 링크를 참고하기 바란다.

링크: https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication

위 그림에서 공개키로부터 개인키를 역으로 추출할 수 있을까? 예를 들면 pk = sk*G에서 sk = pk / G 를 역산할 수 있을까? 이 문제가 ECDSA을 포함해서 현대 공개키 기반 암호학에서 가장 중요한 가정을 이루는 DLP (Discrete Logarithm Problem)이다. Part 2는 바로 이 DLP 부터 이야기를 시작할 것이다.

Part 1은 여기서 마치기로 하자. 여러분들은 이제 PBC와 BLS signature를 이해하기 위한 기초 지식을 대부분 알았다고 할 수 있다.

Part 2에서는 PBC가 무엇인지에 대해 쉽게 설명해 보려고 노력해보겠다. 최선을 다해서.

Part 3에서는 PBC의 대표적인 어플리케이션인 BLS signature를 중점적으로 설명하고 영지식증명에서 쓰는 사례도 간략하게 소개할 예정이다.

--

--