Blind Signature는 요청자가 서명자에게 메시지를 감추고, 감춘 형태의 서명을 받은 뒤 가림을 제거하는 암호학적 절차입니다. 원래 메시지에 사용할 수 있는 서명이 남습니다. David Chaum은 이를 전자 현금에 적용했습니다. 올바른 프로토콜에서는 서명자가 서명 과정의 통신과 나중의 토큰을 보고 어느 발행 건인지 연결할 수 없습니다. 다만 시간, 금액, 네트워크 주소 같은 단서까지 자동으로 없어지지는 않습니다.
일반적인 승인에서는 발행자가 교환권 번호와 수령인을 함께 기록할 수 있습니다. 가게가 교환권을 돌려주면 둘을 연결할 수 있죠. Chaum은 먹지가 들어 있는 봉투로 설명했습니다. 겉에 찍은 도장이 안쪽 종이에 옮겨지지만 발행자는 종이의 번호를 볼 수 없습니다. 꺼낸 종이에는 유효한 승인이 남습니다. 이해를 돕는 비유이지 종이와 도장으로 보안을 구현하는 방법은 아닙니다. 실제 프로토콜은 숫자와 수학으로 컴퓨터 사이에서 이러한 분리를 만듭니다. [7] [1]
안나가 100 sats짜리 디지털 교환권을 원한다고 합시다. Sats는 Bitcoin의 작은 단위입니다. 지갑은 이런 교환권을 보관하고 결제에 사용하는 앱입니다. 교환권을 구분할 예측 불가능한 비밀값을 만들고, 다른 무작위 값으로 수학적으로 가립니다. 이를 블라인딩이라고 합니다. 발행자는 원래 비밀이 아니라 가려진 메시지를 받습니다. 지갑은 나중에 가림을 없애는 데 필요한 정보를 보관합니다. 파일 이름을 바꾸거나 이름을 지우는 것만으로는 부족합니다. 블라인딩은 명확한 암호학적 성질을 충족해야 합니다. 설명을 쉽게 하려고 교환권 하나로 예를 들지만, 실제 지갑은 액면이 다른 여러 교환권을 합쳐 필요한 금액을 만들 수 있습니다. [8] [2]
블라인드 서명이 누구에게나 무엇이든 무료로 서명한다는 뜻은 아닙니다. 발행자는 먼저 안나의 입금을 확인하거나 해당 잔액을 차감할 수 있습니다. 요청 금액이 100 sats라는 것은 알지만 비밀 번호는 몰라도 됩니다. 서명 키는 발행자의 프로그램이 서명을 만드는 데 쓰는 비밀 숫자 값입니다. 액면마다 별도의 서명 키를 사용해 가치를 묶을 수 있으므로 파일 속 숫자를 고친다고 더 비싼 교환권이 생기지는 않습니다. 발행자는 가려진 입력에 서명해 결과를 돌려줍니다. 안나가 교환권을 받을 자격과 나중에 개별 교환권을 식별하는 정보가 분리됩니다. [7] [8]
이제 안나가 원래 비밀을 공개할 필요는 없습니다. 지갑이 반환된 결과에서 무작위 가림을 직접 제거합니다. 이 단계가 unblinding, 즉 언블라인딩입니다. 잘 설계된 절차라면 처음 준비한 메시지의 유효한 인증이 남고, 발행자의 비밀 서명 키를 얻는 일은 없습니다. 사용자는 잔액 증가를 보고, 수학적인 포장과 해제는 뒤에서 이루어집니다. 결과로 얻는 디지털 증표를 보통 토큰이라고 합니다. 블록체인은 비트코인 거래를 함께 기록하는 장부입니다. 이 토큰은 그 장부에 있는 별도의 비트코인이 아니라 발행자에 대한 청구권입니다. [2] [8]
검증은 인증이 메시지와 올바른 발행자 키에 대응하는지 확인합니다. RSA 암호 체계 기반 블라인드 서명은 공개키로 검증할 수 있지만, 다른 구성에는 추가 증명이나 발행자의 참여가 필요할 수 있습니다. 이것만으로 미사용 상태, 복사본의 부재, 충분한 상환 준비금을 증명하지는 못합니다. 세 가지는 별개의 질문입니다. 진짜여도 이미 사용한 입장권으로 다시 들어갈 수 없듯, 암호학적으로 유효한 증표도 다음 결제에 쓸 수 없을 수 있습니다. [2] [10]
안나가 피터에게 교환권을 보내도 데이터인 만큼 같은 복사본을 보관할 수 있습니다. 블라인드 서명은 기기의 파일을 지우지 않습니다. 그래서 일반적인 온라인 시스템에서 수령인의 지갑은 발행자에게 토큰을 제출합니다. 발행자는 유효성과 그 비밀값이 이미 사용되었는지 확인합니다. 받아들이면 옛 토큰을 사용 처리하고 피터에게 같은 블라인드 서명 절차로 새 토큰을 발급할 수 있습니다. 안나는 피터의 새 비밀을 모릅니다. 옛 복사본을 다시 쓰려는 시도는 기록에 따라 거절됩니다. 같은 돈을 반복해서 쓰는 double spend, 이중 지불을 막는 것은 결제 시스템의 또 다른 부분입니다. [9] [8]
반대 방향의 보호도 필요합니다. 클라이언트가 허용된 서명 절차에서 다른 비밀을 가진 유효한 증표를 추가로 만들어서는 안 됩니다. 이것이 위조 불가능성입니다. 블라인드 서명에서는 특히 one-more unforgeability를 살핍니다. 일정 횟수의 서명 상호작용 후 공격자가 새롭고 유효한 메시지·서명 쌍을 하나 더 제시할 수 있는가 하는 문제입니다. 같은 쌍을 복사하는 것은 앞에서 본 다른 문제입니다. 올바른 암호 기술도 서버의 자격, 금액, 허용된 토큰 구조 검사를 대신하지 않습니다. 이 검사들이 함께 무단 발행을 막습니다. [2] [3]
발행자는 안나가 언제 얼마의 토큰을 받았는지 알 수 있습니다. 상환 시에는 시간, 금액 또는 수령인의 네트워크 주소를 알 수도 있습니다. 결제 증표에 딸린 이런 정보를 메타데이터라고 합니다. 사용자 수가 적으면 특이한 금액이나 바로 이어진 결제로 관련성을 추정하기 쉬워집니다. 공동으로 사용하는 검증된 키도 중요합니다. 한 사람에게만 준 키는 그 사람의 표식이 될 수 있습니다. 프로토콜의 블라인드 성질은 서명과 발행의 특정 연결을 보호할 뿐 모든 주변 정보를 감추지는 않습니다. 해킹된 지갑을 복구하거나 발행자의 의무 이행을 강제하지도 않습니다. [7] [2]
Chaum의 아이디어는 역사적으로 DigiCash와 연결된 전자 현금의 기반입니다. 지금은 Cashu와 Fedimint가 Bitcoin 생태계에서 활용하며 Lightning Network (비트코인으로 빠르게 결제할 수 있는 네트워크) 연결로 입출금을 돕습니다. 다만 그 구성은 RSA가 아닙니다. 기본 Cashu는 발행자인 민트의 비밀키로 토큰을 검증합니다. NUT-12는 공개 정보로 서명을 확인하는 증명을 추가하지만 토큰이 아직 미사용이라는 증명은 아닙니다. Fedimint는 여러 운영자에게 관리를 나눕니다. 두 경우 모두 사용자는 발행자에 대한 청구권을 가지며 자금 보관과 가용성에 의존합니다. GNU Taler처럼 구매자 사생활과 판매자 수입의 추적 가능성을 함께 추구할 수도 있습니다. [5] [6] [10] [4]
간략한 구조는 몇 개의 식으로 설명할 수 있습니다. 메시지를 안전하게 숫자 m으로 인코딩하고 공개키를 n과 e, 비밀 부분을 d로 둡니다. 요청자는 n을 법으로 하는 곱셈 역원 r⁻¹이 존재하는 무작위 r을 골라 m′ = m·r^e mod n을 보냅니다. Mod n은 n으로 나눈 나머지로 계산한다는 뜻입니다. 서명자는 s′ = (m′)^d mod n을 반환하고 요청자는 s = s′·r⁻¹ mod n을 얻습니다. 검증하면 s^e mod n = m입니다. r⁻¹이 가림을 제거합니다. 이는 원리 설명이지 완성된 안전한 프로그램이 아닙니다. RFC 9474는 메시지 준비, 안전한 인코딩을 포함한 RSA-PSS 서명 방식, 입력 검사, 서명 키 분리도 규정합니다. 무작위성과 올바른 프로토콜 변형 선택이 중요합니다. [2] [3]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 David Chaum, Chaumian eCash, DigiCash, Cashu, Fedimint, Bitcoin 프라이버시. 다음 항목에서도 이 글을 참조합니다 DigiCash, Chaumian eCash, Reusable Proofs of Work, Fedimint.