교육 참고용이며 투자 또는 암호 구현 조언이 아닙니다. 서명의 유효성만으로 프로토콜 안전성, 인가, 가용성 또는 최종성을 입증할 수 없습니다.
직접 답변
Boneh-Lynn-Shacham 서명은 페어링 기반 디지털 서명입니다. 일반적인 방향 중 하나에서 비밀 키 sk 는 공개 키 PK = sk * G1 을 생성하고, 메시지 m 은 H(m) 으로 매핑됩니다. 이 점은 G2 에 속하며, 서명 sig = sk * H(m) 은 e(PK, H(m)) = e(G1, sig) 로 검증됩니다. 정확한 군, 인코딩, hash-to-curve 스위트와 도메인 분리는 암호 스위트의 선택 사항이며 서로 바꿔 쓸 수 있는 표기가 아닙니다.
BLS에는 유효한 서명을 더해 하나의 고정 크기 군 원소로 만들 수 있다는 독특한 운영상 장점이 있습니다. 이는 서명을 압축하지만 서명자 목록을 압축하거나, 정족수를 입증하거나, 인가된 검증자를 식별하거나, 이중 투표를 막거나, 합의를 최종화하지는 않습니다. 그런 속성은 주변 프로토콜에서 나옵니다.
작동 방식
- 프로토콜, 암호 스위트 및 버전을 고정합니다. 곡선, 공개 키 군과 서명 군, 직렬화, hash-to-curve 함수, 도메인 분리 태그 및 메시지 루트 구성을 확인합니다. BLS라는 명칭만 보고 호환성을 추론해서는 안 됩니다.
- 지정된 키 생성 절차로
sk를 생성하고PK를 도출합니다. 정확한KeyValidate및 역직렬화 규칙에 따라 0, 무한원점, 잘못된 형식, 비정규 및 잘못된 부분군 인코딩을 거부합니다. - 정확한 메시지 바이트와 서명 도메인을 구성합니다. 이더리움 합의에서 서명 루트는 SSZ 객체 루트를 작업 유형과 포크 데이터에서 도출된 도메인에 결속합니다. 화면에 표시된 문구가 서명 객체는 아닙니다.
- 선택한 방식으로 서명하고 개별 검증합니다. Basic, message augmentation, proof of possession 변형은 rogue-key 방어 방식이 다르므로 임의로 섞을 수 없습니다.
- 메시지 패턴에 따라 집계 검증기를 선택합니다. 여러 검증된 공개 키가 필요한 소유 증명 가정 아래 동일한 메시지에 서명한 경우에만
FastAggregateVerify를 사용합니다. 방식에서 허용하는 공개 키 및 메시지 목록에는AggregateVerify를 사용합니다. - 위원회 데이터 또는 참가자 비트 목록으로 서명자 집합을 독립적으로 재구성하고, 중복되거나 인가되지 않은 인덱스를 거부하며, 스테이크 또는 임계값 가중치를 적용한 뒤 집계 서명을 검증합니다. 유효한 집계는 제공된 집합을 인증하지만 그 집합이 정책을 충족하는지는 결정하지 않습니다.
- 결과를 포크 선택, 슬래싱 조건, 정족수, 가용성, 시점 및 최종성과 대조합니다. 입력 바이트, 도메인, 서명자 인덱스, 구현 버전 및 테스트 벡터를 보존하고 배포 전에 독립 라이브러리끼리 비교합니다.
계산 예시
- 압축해도 구성원 데이터는 없어지지 않는다. 이더리움 합의는 각 BLS 공개 키를
48 bytes, 각 서명을96 bytes로 인코딩합니다. 동일한 메시지에 대한 서명이512개이면 개별 서명은512 * 96 = 49,152 bytes를 차지합니다. 하나의 집계 서명과512-bit = 64-byte참가자 비트 목록은96 + 64 = 160 bytes이며,49,152 - 160 = 48,992 bytes, 즉99.6744791667%감소입니다. 검증자 공개 키와 위원회 매핑은 여전히 다른 곳에서 이용할 수 있어야 합니다. - 동일 메시지 집계. 등록된 검증자
17,24,91이 모두 동일한 서명 루트R에 서명한다고 가정합니다. 서명은sigAgg = sig17 + sig24 + sig91로 집계됩니다. 검증에는 순서가 지정되고 검증된 공개 키 집합[PK17, PK24, PK91], 동일한R,FastAggregateVerify를 사용합니다. 유효한 결과는 이 방식 아래 해당 키가R에 서명했음을 입증합니다. 키별 가중치와 세 명이 정족수를 구성하는지는 별도 규칙이 결정합니다. - 서로 다른 메시지에는 올바른 API가 필요하다. 공개 키
PK1,PK2,PK3이 서로 다른 메시지m1,m2,m3에 서명합니다. 검증기는 쌍[PK1, m1],[PK2, m2],[PK3, m3]을 보존하고 해당AggregateVerify를 호출해야 합니다. 입력을 하나의 메시지로 바꾸고FastAggregateVerify를 사용하면 다른 주장을 검증하게 됩니다. Basic 방식에서는 메시지들도 서로 달라야 합니다. - 집계는 임계 서명이 아니다.
8명 그룹에서 구성원[1, 2, 4, 6, 8]의 일반 서명을 집계하면 서명 하나와 5명짜리 서명자 목록이 생성됩니다. 하나의 그룹 공개 키로 검증되는5-of-8임계 서명이 되지는 않습니다. 진정한 threshold BLS 설계에는 분산 키 생성 또는 신뢰할 수 있는 딜러 모델, 공유 인덱스 및 보간 규칙이 필요하며 그 신뢰와 실패 가정은 별도로 감사해야 합니다.
위험
- 프로토콜과 다른 곡선, 군 방향 또는 암호 스위트를 사용하는 경우.
- 같은 사람이 읽을 수 있는 메시지를 표시하면서 다른 직렬화 바이트에 서명하는 경우.
- 포크, 작업 또는 애플리케이션 도메인을 생략해 맥락 간 재실행을 허용하는 경우.
- 만료된 Internet-Draft를 변경 불가능한 최종 표준으로 취급하는 경우.
- 형식이 잘못되었거나 비정규이거나 무한원점인 인코딩을 받아들이는 경우.
- 부분군 검사를 건너뛰고 잘못된 곡선 또는 작은 부분군 입력을 허용하는 경우.
- 지정된 스위트와 테스트 벡터 대신 임의의 hash-to-curve 코드를 사용하는 경우.
- 편향되거나, 0이거나, 중복되거나, 유출되거나, 예측 가능하게 도출된 비밀 키를 생성하는 경우.
- 소유 증명과 도메인 가정이 다른 프로토콜에서 하나의 키를 재사용하는 경우.
- 방식에서 요구하는 rogue-key 방어 없이 등록되지 않은 공개 키를 집계하는 경우.
- 서로 다른 메시지나 일치하지 않는 루트에 동일 메시지 고속 검증을 호출하는 경우.
- 공개 키와 메시지의 대응 관계를 순열, 중복 또는 누락하는 경우.
- 위원회 소속과 고유 인덱스를 확인하지 않고 참가자 비트 목록을 신뢰하는 경우.
- 프로토콜이 정의한 스테이크, 가중치 또는 임계값이 아니라 서명 수를 세는 경우.
- 하나의 집계로 어떤 개별 서명이 무효인지 알 수 있다고 가정하는 경우.
- 일반 집계, 다중 서명 및 임계 서명을 혼동하는 경우.
- 서명 유효성을 데이터 가용성, 실행 정확성 또는 최종성의 증명으로 여기는 경우.
- 이중 투표, 슬래싱 대상 메시지, 시간 창 또는 포크 선택 맥락을 무시하는 경우.
- 하나의 라이브러리, CPU 기능 또는 검토되지 않은 일괄 검증 최적화에 의존하는 경우.
- 페어링 비용, 서비스 거부 입력, 부채널, 키 보관, 업그레이드 및 양자 내성 부재를 과소평가하는 경우.
흔한 오해
- 집계 서명은 모든 검증자가 참여했음을 입증한다.
- 소유 증명 규칙 없이 어떤 BLS 공개 키와 서명도 안전하게 결합할 수 있다.
- 고정 크기 집계를 사용하면 서명자 구성원 정보를 전송하거나 재구성할 필요가 없다.
- BLS 집계와 threshold BLS는 같은 구성이다.
- 유효한 BLS 서명이 있으면 서명된 블록, 브리지 메시지 또는 프로토콜이 경제적으로 안전하고 최종화된다.
관련 주제
출처
- BLS 서명 - Internet Research Task Force(확인일: 2026-08-12)
- RFC 9380: 타원 곡선으로 해싱 - RFC Editor(확인일: 2026-08-12)
- Weil 페어링을 이용한 짧은 서명 - Springer(확인일: 2026-08-12)
- 이더리움 지분 증명 합의 명세 - Ethereum Foundation(확인일: 2026-08-12)
- Phase 0 비콘 체인 명세 - Ethereum Foundation(확인일: 2026-08-12)
- 이더리움 주석 명세: BLS 서명 - Ethereum Foundation(확인일: 2026-08-12)
- EIP-2537: BLS12-381 곡선 연산용 프리컴파일 - Ethereum Improvement Proposals(확인일: 2026-08-12)
- 합의 메커니즘 - Ethereum.org(확인일: 2026-08-12)