본 포스팅은 < 원본 : Why Mintlayer adopts BLS signature >의 번역본으로 Mintlayer 민트레이어 프로젝트에 관심이 있는 커뮤니티 투자자분들의 편의를 위해 작성되었습니다.

오타나 번역 관련 문의가 있으시다면 댓글로 부탁드립니다!

 

 

블록체인 기술에서의 디지털 서명

디지털 서명은 데이터가 특정 소스에서 오는지 확인하기 위해 사용되며 일반적으로 퍼블릭 키 암호화를 사용합니다: 프라이빗 키는 데이터 서명을 위해 사용되고 퍼블릭 키는 서명을 확인하는데 사용할 수 있습니다. 프라이빗 키를 안전하게 유지하는 한 아무도 서명을 위조할 수 없으므로 데이터 소스가 신뢰할 수 있다고 볼 수 있습니다. 디지털 서명은 또한 데이터의 무단 변경 그리고 데이터 거부 방지를 위해 사용될 수 있습니다.

비트코인은 타원 곡선 매개변수가 secp256k1인 Elliptical Curve Digital Signature Algorithm 또는 ECDSA라고 불리는 서명 체계를 사용합니다. ECDSA 및 유사 대안인 EdDSA는 블록체인에서 자주 사용되는데, 그 이유는 이들이 지난 수 년간 많은 테스트와 심도있는 암호화분석을 거쳤기에 사용 및 도입이 쉽기 때문입니다. ECDSA는 비-퀀텀 공격에 대해 신뢰할 수 있는 반면, 퀀텀 컴퓨터는 수십년 이상 떨어져 있기 때문에 퀀텀 공격에 대한 불가침성은 우선순위가 아닙니다. ECDSA와 같은 서명 체계는 트랜잭션당 하나의 퍼블릭/프라이빗 키 페어를 사용하며 이는 충분히 효율적이지 않습니다. 

 

민트레이어에서의 서명 집계

블록 크기를 줄이고 트랜잭션의 속도를 높이기 위해 민트레이어는 서명 집계를 활용하기로 결정했으며, 이것은 여러 서명을 하나로 집계할 수 있다는 것을 뜻합니다. 이렇게 함으로 서명만 확인되면 검증 단계가 빨라지고 효율이 올라갑니다. 이것은 또 체인 분석을 더 어렵게 한다는 장점이 있는데, 특히 여러 트랜잭션이 한번에 집계될 때 더욱 그렇습니다. 일괄처리, 코인결합 및 혼합 절차는 보안성을 높이는 동시에 각 지불의 크기를 줄입니다.

 

민트레이어가 BLS를 채택한 이유

서명 집계에는 여러 방법이 있으며, 민트레이어가 분석의 범위를 좁힌 BLS, Schnorr signatures 그리고 bulletproofs의 세 가지가 포함됩니다. 이 중 하나를 고르기 위해 이론적 구조와 실제 사용 사례를 벤치마크로 삼아 몇 차례의 실험을 진행했습니다.

Bulletproofs는 현재 Monero에서 도입한 non-interactive zero knowledge proof의 한 형태입니다. 서명 작성 및 검증이 아니라 bulletproofs는 증명서를 작성한 다음 해당 증명서를 검증해야 합니다. 안타깝게도, 증명서를 작성하는 시간이 오래 걸려 다른 두 기술에 비해 현저하게 느리다는 것을 깨닫고 우리와는 맞지 않다고 판단하게 되었습니다; bulletproofs는 또한 세 계획 중 가장 도입 및 유지하기 어려웠습니다.

Schnorr: 이것은 비트코인 코어 팀이 제안한 서명 집계 방법이며, Taproot의 일부로 도입되었습니다. 결과적으로, Schnorr signatures는 비트코인에 집중한 프로젝트에게는 당연한 결정이었을 것입니다. 그럼에도 불구하고 Schnorr signatures는 서명자 간에 3 라운드에 걸친 상호작용으로 인해 개인 서명인과 집계기 사이에 추가적인 커뮤니케이션 라운드가 필요하다는 점에서 큰 약점을 가지고 있습니다. 이 과정을 2개의 라운드로 줄이기 위한 몇 가지 방법이 제안되었지만, Drijvers et al은 이 문제를 해결하기 위해 현존하는 모든 솔루션이 문제가 있다고 주장했습니다. MuSig2가 이 문제를 추후 해결할 수도 있겠으나, 현재 요구되는 세 번의 라운드는 BLS에 비해 더 많은 시간의 소요를 필요로 하며 지연이 큽니다.

BLS: 서류상으로, 집계된 Schnorr signatures는 집계된 BLS 서명보다 빠르지만, 실제 우리는 BLS의 검증이 훨씬 빠르기 때문에 위의 차이는 무시할 수 있는 수준이라는 것을 알게 되었습니다. 또한 그 어떤 Schnorr 구현보다 더 나은 성능을 제공하는 고도로 최적화된 버전의 BLS 버전이 있습니다. BLS의 확장성과 더불어 집계된 BLS 서명 내에서 m-out-of-n multisig 집계를 통해 트랜잭션을 숨길 수 있는 기능으로 이것은 더욱 매력적인 선택지였습니다.

향후 민트레이어가 Schnorr signatures에 대한 지원을 추가할 것으로 보이긴 하지만, 현재는 BLS의 확장성과 유연성 그리고 훨씬 축약된 서명 집계의 크기로 인해 BLS를 선택하는 것은 꽤나 쉬운 결정이었습니다.

 

 

위의 두 그래프는 모두 Logos Network 분석에서 가져온 벤치마크입니다.

공개적으로 사용 가능한 도입에 대한 자체 테스트를 통해 Schnorr가 단순 BLS를 능가한다는 것을 알 수 있지만, 최적화된 버전에는 근접할 수 없다는 것 또 한 볼 수 있습니다. BLS 도입에 대한 비교 포인트를 제공하기 위해 Ed25519 벤치마크가 포함되어 있습니다. 최적화된 도입을 제외한 이러한 벤치마크는 향후 민트레이어 노드에 최대한 가깝게 일치시키기 위해 Substrate 환경에서 수행되었습니다. 최적화된 BLS 도입 성능을 고려해 우리는 BLS를 직접 구현하기로 했으며 프로젝트를 진행하면서 성능을 향상시키기 위해 BLS를 천천히 최적화하는 것을 목표로 하고 있습니다. Bulletproofs와 ECDSA의 수치는 이 차트의 규모에서 벗어납니다.

 

BLS 기술 소개

Boneh-Lynn-Shacham 또는 BLS는 서명 집계를 위한 네이티브 서포트를 지원하는 암호화 디지털 서명 체계입니다. BLS의 작동 방식이 어떻게 되나요? BLS 서명은 타원 곡선 상의 그룹 요소의 검증 및 서명을 위한 이중 페어링 시스템을 기반으로 합니다. BLS는 갭 Diffie-Hellman그룹 내에서 다루기 어려운 Diffie-Hellman 문제에 의존합니다. 이 문제는 g, ga, gb가 주어졌을 때 gab를 찾는 것이 쉬운지 묻습니다. 정의된 이중 페어를 가진 결정적 diffie-hellman 문제는 우리가 주어진 ga, gb, gc와 c=ab를 통해 gc가 G의 임의 요소로부터 다른지에 대해 알아낼 수 있기 때문에 쉽다고 볼 수 있습니다. 이것은 곧  e(ga, gb) = e(g,g)ab = e(g,g)c = e(g,gc) 입니다. 암호화 세계에서 페어가 무엇인지 모르는 분들을 위해 저는 제가 직접 설명하는 것보다 위키피디아의 정의를 사용하겠습니다.

G1, G2를 소수위수 q에 대한 두개의 추가적인 순환군이라고 치고 GT를 또 q가 곱셈으로 작성된 또 다른 순환 그룹이라고 가정하겠습니다. 페어링은 맵 e : G1 x G2 GT 로, 다음을 만족합니다:

이선형성: ∀a,b ∈ Fq*, ∀P ∈ G1, Q∈ G2 : e(aP, bQ) = e(P,Q)ab

비 퇴화성: e ≠ 1

계산가능성: e를 계산할 수 있는 효율적인 알고리즘이 존재합니다

이것이 서명을 확인하는데 어떻게 도움을 줄까요?

앞서 언급한 것처럼 임의의 오라클의 존재와 갭 그룹에 대한 어려움이 있다고 가정할 때, 메시지의 서명, 메시지 m (m ∈ {0,1}*)은 서명 σ = H(m)x에 대입되고 x는 프라이빗 키로 (x ∈ ℤp)이며 퍼블릭 키는 gx입니다. 서명은 (g, h = gx, H(m), σ)로 재배열될 수 있습니다.

위에 정의된 e로, 서명 확인 단계는 정의된 g, gx에 의해 e(H(m),gx) = e(H(m)x, g)가 됩니다.

이 정의를 집계된 서명들을 포함하는 것으로 확장시키기 위해 우리는 우선 BLS에서 서명이 어떻게 집계되는지를 알아봐야 합니다. BLS에서 집계된 서명은 단순히 서명들을 모두 더한 것입니다.

σtotal = σ1 + σ2 + .... + σn

e(G, σtotal) = e(gx1, H(m1)) * e(gx2, H(m2)) * .... * e(gxn,H(mn))

BLS에 대한 자세한 사항은 Boneh etal의 RFC를 참고하거나, 이 간단한 파이썬 구현을 찾아보면 됩니다.

 

* 해당 포스팅은 투자 관련 정보 공유의 목적으로 포스팅된 글이며 투자 권유가 아닙니다. 그러므로 개인 투자의 책임은 모두 본인에게 있으니 참고하셔서 투자하시기 바랍니다.

 

잘못된 정보 혹은 재미있게 보셨다면 댓글 부탁드립니다.

보다 빠른 정보는 텔레그램 채널과 채팅방, 카카오톡 채팅방을 통해 받아보세요 :)

텔레그램 공지방 : https://t.me/minted_labs

텔레그램 채팅방 : https://t.me/minted_chat

카카오톡 오픈 채팅방 : http://open.kakao.com/o/gDtWugpb (입장코드 : 0311)

Mintlayer 한국 텔레그램 공지방 : https://t.me/Mintlayerkorea

Mintlayer 한국 텔레그램 채팅방 : https://t.me/Mintlayerkor

+ Recent posts