DOI QR코드

DOI QR Code

A Post-Quantum Multi-Signature Scheme

양자 컴퓨팅 환경에서 안전한 다중 서명 기법

  • Received : 2021.04.27
  • Accepted : 2021.05.25
  • Published : 2021.06.30

Abstract

Recently, the acceleration of the development of quantum computers has raised the issue of the safety of factorization and discrete logarithm based digital signature schemes used in existing Internet environments. To solve the issue, several digital signature schemes are presented that are safe in post-quantum computing environments, including standardization work by the National Institute of Standards and Technology(NIST). In this paper, we design and present a multi-signature scheme based on the TACHYON announced by Behnia et al. in 2018 CCS conference, and prove the security. Multi-signature schemes are key techniques that can distribute the dependence of cryptocurrency-wallet on private keys in the cryptocurrency field, which has recently received much attention as an digital signature application, and many researchers and developers have recently been interested. The multi-signature scheme presented in this paper enables public key aggregation in a plain public key model, which does not require additional zero-knowledge proof, and can construct an effective scheme with only an aggregated public key.

최근 양자 컴퓨터의 개발이 가속화되면서 기존 인터넷 환경에서 사용되고 있는 인수분해 및 이산대수 기반의 전자서명 기법들의 안전성에 대한 문제가 제기되고 있다. 이에 대응하기 위해 미국 국립표준기술연구원(NIST)의 표준화 작업을 비롯하여 양자 컴퓨팅 환경에서 안전한 여러 가지 전자서명 기법들이 제시되고 있다. 본 논문에서는 2018년 Behnia 등이 CCS 컨퍼런스에서 발표한 TACHYON 전자서명 기법을 이용한 다중 서명 기법을 설계하여 제시하고, 안전성을 증명하고자 한다. 다중 서명 기법은 최근 많은 관심을 받고 있는 암호화폐 분야에서 전자지갑의 개인키 의존도를 분산하여 보다 안전한 전자지갑 시스템을 구성할 수 있는 핵심 기술로, 최근 많은 연구자들과 개발자들이 관심을 갖고 있는 전자서명 응용 분야이다. 본 논문에서 제시하는 다중 서명 기법은 일반 공개키 모델(plain public key model)에서 공개키 결합(public key aggregation)이 가능한 기법으로, 부가적인 영지식 증명(zero-knowledge proof) 기법이 필요하지 않으며, 결합 된 단일 공개키만으로 효율적인 시스템을 구성할 수 있는 기법이다.

Keywords

I. 서론

현재 인터넷 환경에서 사용되는 공개키 암호, 전자서명, 키 교환 등의 공개키 시스템은 인수분해 및
이산대수의 어려움에 기반하는 기법들을 사용한다. 1994년 Shor는 이러한 인수분해 문제나 이산대수 문제를 양자 컴퓨팅 환경에서 효율적으로 해결할 수 있는 알고리즘을 제안하였다[11]. 최근 양자 컴퓨터의 개발 가속화 및 실현 가능성이 높아짐에 따라 양자 컴퓨팅 환경에서 안전한 공개키 시스템 개발의 필요성이 대두되고 있으며, 미국 국립표준기술연구원(NIST)의 표준화 작업을 비롯한 노력이 계속되고 있다.

전자서명 기법은 사용자 및 메시지 인증 기능을 제공할 수 있는 암호학적 기법으로, 전자상거래 등
인터넷 환경에서 신뢰가 필요한 작업에 필수적인 기술이다. 전자서명 기법은 최근 가장 큰 이슈 중 하나인 블록체인을 활용한 암호화폐 기술에서도 전자지갑의 형태로 이용되고 있어 암호화폐 기술 관련 연구자 및 개발자들의 많은 관심을 받고 있다. 전자서명 기법은 공개키/개인키로 구성되어 개인키를 이용하여 서명을 하고 공개키로 검증하는 단순한 형태의 기술이며, 다중 서명 기법은 전자서명에서 확장된 기술로써 다수의 사용자가 자신의 공개키/개인키 쌍을 생성한 후 하나의 메시지에 대한 서명을 생성하는 것이다.

다중 서명 기법은 암호화폐의 전자지갑에 응용될 수 있으므로 최근 많은 관심을 받고 있다[1,4]. 기존의 전자서명으로 전자지갑을 구현할 경우 단일 개인키의 분실 및 노출은 전자지갑에 저장된 모든 가치의 분실을 초래할 수 있으므로 문제가 될 수 있다. 하나의 개인키로 서명하는 서명 기법과 달리 다수의 사용자의 개인키를 사용한 다중 서명 기법을 응용하여 사용자, 이상 거래탐지 서버, 디지털 금고 등 단일 주체가 아닌 다중 노드의 서명 생성으로 거래하는 시스템을 구축하여 일정 수 이상의 개인키를 필요로함으로서 하나의 개인키에 전자지갑의 모든 가치가 의존되는 문제를 해결할 수 있다.

다중 서명에는 일반 공개키 모델(plain public key model)과 공개키 결합(public key aggregation)이라는 특성이 있다[8]. 공개키 결합이라는 특성은 다수의 공개키가 하나의 공개키로 결합할 수 있고, 여러 명의 개인키 소유자가 합의하여 서명한 다중 서명 검증 시 결합된 공개키 하나만으로 서명 검증이 가능한 특성을 의미한다. 일반 공개키 모델은 악의적인 공개키를 생성한 공격자로부터 시스템을 안전하게 하기 위해 공개키에 대응하는 개인키의 영지식 증명(zero-knowledge proof)을 부가적으로 수행하지 않아도 안전한 모델을 의미한다. 최근 연구에서는 일반 공개키 모델에서 공개키 결합이 가능한 Schnorr 기반의 다중 서명 기법[4]이 제시되었다. 본 논문에서는 공개키 모델에서 공개키 결합이 결합이 가능하면서 양자 컴퓨팅 환경에서도 안전한TACHYON[12] 기반의 다중 서명 기법을 제시한다. 추가적으로 최근 연구[6]에서 제시된 TACHYON 서명에 대한 다중 사용자 공격방법의 대안책인 솔트를 사용하는 기법을 본 논문에서도 적용하여 같은 공격 방법에 안전할 수 있도록 한다.


II. 배경지식

이번 장에서는 공개키 서명에 대한 일반적인 기법과 본 논문에서 제안하는 다중 서명 기법의 기본 설계 토대가 되는 TACHYON 서명 기법과 해당 서명 기법이 기반하는 문제인 일반화된 콤팩트 냅색
(generalized compact knapsack)문제를 설명한다.


2.1 공개키 서명

공개키 서명은 세 개의 알고리즘으로 구성되며, 각 알고리즘은 다음과 같이 정의한다.

\(\operatorname{Key} \operatorname{Gen}\left(1^{\lambda}\right)\) : 입력값으로 \(1^{\lambda}\)를 받아 개인키인 sk와 공개키인 pk를 출력한다.

•Sign(M,sk,pk) : 입력값으로 메시지 M, 개인키 sk와 공개키 pk를 받아 알고리즘을 실행하여 서
명인 \(\sigma\)를 출력한다.

\(\operatorname{Verify}(M, \sigma, p k)\) : 입력값으로 메시지 M, 서명 \(\sigma\), 공개키 pk를 받아 알고리즘을 실행하여 서명
이 정당한 경우 1을, 그렇지 않은 경우 0을 출력한다.

공개키 서명은 모든 키 쌍과 모든 메시지에 대해서 다음 수식이 성립할 때 정확성(correctness)을
갖는다고 정의한다.


\(\operatorname{Verify}(M, \operatorname{Sign}(M, s k, p k), p k) \rightarrow 1\)

2.2 Generalized Compact Knapsack

모든 링 R과 부분 집합 S ⊂ R 그리고 정수 μ ≥ 1에 대해 GCK 함수는 다음과 같이 정의된다[2].

\(G C K_{A}(x)=\sum_{i=1}^{n} x_{i} \cdot a_{i}\)

이때 xi, ai는 각각 \(x \in S^{\mu}\)\(A \in R^{\mu}\) 벡터의 i번째 링의 원소이다.

정리 2.1. 위에서 정의한 GCK 함수는 사이클릭 래티스(cyclic lattice) 문제의 어려움에 기반하여 일방향성(one-wayness)을 만족한다[2].


2.3 TACHYON 서명

TACHYON 서명[12]은 공개키 서명으로 세 개의 알고리즘 TS.KeyGen, TS.Sign, TS.verify으로
구성되며, 각 알고리즘은 다음과 같이 정의한다. 알고리즘에서 쓰이는 \(\text { Sample }(\gamma)\)은 각각 범위 \([-\gamma, \gamma]\)에서 균등하게 뽑은 개체들로 이루어진 링 벡터 \(r \in R^{\mu}\)을 생성하는 함수이고, \(\text { PRF }\)는 의사난수함수로서 (0,1)로 이루어진 링 벡터 \(r \in R^{\mu}\)를 생성한다. \(\xi\)\(\rho\)는 각각 GCK 함수의 일방향성의 안전성에 관련된 파라미터이며, H1과 H2는 각각 랜덤 오라클 모델에서의 해시함수로 정의한다.

\(\text { TS. Key } \operatorname{Gen}\left(1^{\lambda}\right)\): PRF의 키 \(z \in\{0,1\}^{\lambda}\)를 선택하고, 상수 \(l\)개의 링 벡터 \(x_{i} \in R^{\mu}\)\(\operatorname{PRF}(z, i)\)함수를 이용하여 생성한다. (즉,PRF(z, i)→xi,i=1,...,l) l개의 링 벡터 xi를 각각 입력으로 다음과 같이 링 \(y_{i}=G C K_{A}\left(x_{i}\right)\)를 계산하고 개인키 sk=z 와 공개키 \(p k=\left(l, k, y=\left(y_{1, \ldots,} y_{l}\right), H_{1}, H_{2}\right)\)를 출력한다.

\(\text { TS.Sign }(M, s k, p k)\): 작은 계수 값을 갖는 링 벡터를 추출하는 알고리즘을 통해 링 벡터
\(\text { Sample }(\xi-1) \rightarrow r=\left(r_{1}, \ldots, r_{\mu}\right) \in R^{\mu}\)을 생성한다. r을 이용하여 다음과 같이 \(G C K_{A}(r) \rightarrow v \in R\)를 계산하고, 해시함수 H1을 통해 \(H_{1}(v) \rightarrow h\)를 계산한다. 다음으로 메시지 M과 h를 해시함수 H2의 입력 값으로 넣어 k개의 인덱스 셋 〈\(i d x_{1}\|\cdots\| i d x_{k}\)〉를 출력한다. (즉, \(H_{2}(M \| h) \rightarrow\left\langle i d x_{1}\|\cdots\| i d x_{k}\right\rangle\))상수 k개의 인덱스가 주어지면 개인키 z를 이용하여 \(\operatorname{PRF}\left(z, i d x_{j}\right) \rightarrow x_{i d x_{j}}\)값을 계산한 뒤 \(s=\left(\sum_{j=1}^{k} x_{i d x_{j}}\right)+r \in R\)를 계산한다. 마지막으로 상숫
값 p에 대해 \(\|s\|_{\infty}<(\xi-\rho)\)를 만족하는지 확인하고 서명 값 \(\sigma=(s, h)\)를 출력한다. 만약 \(\|s\|_{\infty} \geq(\xi-\rho)\)라면 링 벡터 r을 뽑는 과정부터 다시 시작한다.

\(\text { TS. Verify }(M, \sigma, p k)\): 주어진 서명 값 \(\sigma=(s, h)\)와 공개키 \(p k=\left(l, k, y=\left(y_{1, \ldots}, y_{l}\right), H_{1}, H_{2}\right)\)를 이용하여 메시지 M에 대한 서명 검증을 다음과 같이 수행한다. 먼저 \(\|s\|_{\infty}<(\xi-\rho)\)를 만족하는지 확인하고 아니라면 0을 출력한다. 그 다음으로 해시함수 값 \(H_{2}(M \| h) \rightarrow\left\langle i d x_{1}\|\cdots\| i d x_{k}\right\rangle\)를 계산하고 해당 인덱스 셋을 이용하여 \(v^{\prime}=G C K_{A}(s)-\sum_{j=1}^{k} y_{i d x_{j}}\) 값을 계산하고 \(H_{1}\left(v^{\prime}\right)=h\)를 성립하는지 확인한다. 성립하는 경우 서명이 검증됐음을 의미하는 1을 출력하고, 그렇지 않은 경우 0을 출력한다.

정리 2.2. TACHYON 서명은 GCK 함수의 일방향성에 기반하여 랜덤 오라클 모델에서 선택 메시지
공격에 대한 위조 불가능성(EUF-CMA)을 만족한다[12].

III. 다중 서명 기법

3.1 다중 서명의 정의

다중 서명 기법은 MS.Setup, MS.KeyGen, MS.Sign, MS.AggKey, MS.Verify의 다섯 개 알고리즘으로 구성되며, 각 알고리즘은 다음과 같이 정의한다.

\(\operatorname{MS.Setup}\left(1^{\lambda}\right)\): 시큐리티 파라미터인 \(1^{\lambda}\)를 입력값으로 받아 시스템 파라미터인 pp를 출력한다.

\(\text { MS.Key } \operatorname{Gen}(p p)\): 시스템 파라미터인 pp를 입력값으로 받아 개인키인 sk와 공개키인 pk를 출력한다.

\(\text { MS.Sign }(M, s k, p k l, p p)\): 공개키 리스트 pkl에 있는 속한 사용자들 간의 다중 서명을 생성하는 프로토콜로 각각의 사용자들은 자신의 비밀키 sk를 이용하여 다중 서명인 \(\sigma\)를 생성한다.

\(\text { MS. } A g g \operatorname{Ke} y(p k l)\): 공개키 리스트 pkl를 입력으로 받아 리스트에 속한 공개키들을 결합한 공개키 apk를 생성하는 알고리즘이다.

\(\text { MS. Verify }(M, \sigma, a p k, p p)\): 메시지 M, 서명 \(\sigma\), 결합된 공개키 apk를 입력으로 서명 검증을 수행하는 알고리즘으로 검증이 되면 1을, 아니면 0을 출력한다.

다중 서명은 모든 키 쌍과 모든 메시지에 대해서 다음 수식이 성립할 때 정확성(correctness)을 갖는다고 정의한다.

\(\text { MS. Verify }(M, M S . \operatorname{Sign}(M, s k, p k l), \text { MS. } \operatorname{AggKey}(p k l)) \rightarrow 1\)

정의 3.1. 선택 메시지 공격에 대한 존재적 위조 불가능성은 다음의 도전자 C와 다항 시간 공격자 A사이의 행동으로 정의할 수 있다.

•Setup: C는 \(\text { MS.Setup }\left(1^{\lambda}\right)\)알고리즘을 통해 시스템 파라미터 pp를 출력하고, \(\text { MS.Key } \operatorname{Gen}(p p)\)를 통해 도전 키 쌍인 \(\left(s k^{*}, p k^{*}\right)\)를 출력하여 A에게 \(\left(p p, p k^{*}\right)\)를 전달한다.

\(\text { Signature Query }\): A는 \(p k^{*}\)를 포함한 공개키 집합인 \(p k l=p k_{i=1}^{n}, p k^{*} \in p k l\)에 대해 어떤 메시지에 대한 서명도 요청할 수 있다. 요청을 받은 C는 \(\operatorname{MS.Sign}(M, s k, p k l, p p)\)를 통해 다중 서명인 \(\sigma\)를 A에게 전달한다.

•Challenge: A는 공개키 집합인 \(p k l^{*}\)에 대한 메시지 \(M^{*}\)의 서명인 \(\sigma^{*}\)를 출력한다. 이에 대해 다
음 세 조건을 만족한 경우 1을 출력한다.

1) \(M S . \operatorname{Verify}\left(M^{*}, \sigma^{*}, M S \cdot A g g \operatorname{Key}\left(p k l^{*}\right), p p\right)=1\)

2) \(M^{*}\)\(\text { Signature Query }\)에서 요청되지 않은 메시지이다.

3) \(p k^{*} \in p k l\)

공격자 A의 공격 이점은 다음과 같이 정의한다.


\(A d v_{A}^{M S}(\lambda)=\operatorname{Pr}[C=1]\)

위의 공격 이점이 무시해도 될 정도로 작다면, 다중서명은 선택 메시지 공격에 대해 존재적 위조가 어렵다고 할 수 있다.


3.2 TACHYON 기반 다중 서명 기법[12]

이번 절에서는 TACHYON 기반의 다중 서명 기법을 구성하는 다섯 개의 알고리즘을 아래와 같이 설
명한다. TACHYON 기법에서 사용된 해시함수 H1, H2 이외에도 추가적인 랜덤오라클 모델에서의 Hc, Ha 해시함수를 이용한다. Hc는 GCK 함수의 출력값을 입력으로 받아 \(\{0,1\}^{\lambda}\)에 속하는 커밋먼트를 출력하는 해시함수고, Ha는 공개키 목록과 특정 공개키를 입력으로 받아 상수 l크기의 랜덤한 순열(permutation) \(\pi\)을 출력하는 해시함수다.

\(\text { TM.Setup }\left(1^{\lambda}\right)\) : \(1^{\lambda}\)를 입력값으로 받아 시스템 파라미터인 \(p p=\left(l, k, H_{1}, H_{2}, H_{c}, H_{a}\right)\)를 출력한다.

\(\text { TM.Key Gen }(p p)\): \(z \in(0,1)^{\lambda}\)를 랜덤으로 선택한 후 \(i=1 \ldots l\)에 대해 \(\operatorname{PRF}(z, i)=x_{i} \in R^{\mu}\)를 출력한다. 다음으로 \(y_{i}=G C K_{A}\left(x_{i}\right)\)를 계산하여 개인키 sk=z와 공개키 \(p k=\left(y=\left\langle y_{1}, \ldots, y_{l}\right\rangle\right)\)를 출력한다. 

\(T M \cdot A g g K e y(p k l)\) : \(p k_{i}=\left(y_{i}=\left(y_{i, 1}, \ldots, y_{i, l}\right)\right)\)에 대한 공개키 리스트를 \(p k l=\left\{p k_{1}, \ldots, p k_{n}\right\}\)로 설정하고, \(i=1, \ldots, n\)에 대해 Ha를 통해 랜덤 순열인 \(\pi_{j} \leftarrow H_{a}\left(p k l \| p k_{j}\right)\)를 계산하고, \(i d x=1, \ldots, l\)에 대해 \(a y_{i d x}=\sum_{j=1}^{n} y_{j, \pi_{j}(i d x)}\)와 같이 각각의 공개키 벡터의 값을 순열화하여 더해준다. 이 후 결합된 공개키인 \(a p k=\left(a y=\left(a y_{1}, \ldots, a y_{l}\right)\right)\)를 출력한다.

\(\text { TM.Sign }(M, s k, p k l, p p)\) : \(s k=s k_{i^{*}}=z_{i^{*}}\)으로 가정하고 \(p k_{i^{*}}\)\(s k_{i} \cdot\)와 대응되는 공개키라고 가정한다. 공개키 리스트 \(p k l=\left\{p k_{1}, \ldots, p k_{n}\right\}\)에 대해 \(i^{*} \in[1, n]\)이다. 알고리즘은 아래의 과정에 의해 서명 \(\sigma\)를 생성하게 된다.
(1) \(r_{i} \leftarrow \text { Sample }(\xi-1)\)을 다음과 같이 생성하고 \(v_{i} \leftarrow G C K_{A}\left(r_{i}\right)\)를 계산한다. 계산한 \(v_{i}\)를 해시함수의 입력값으로 하여 \(t_{i^{*}}=H_{c}\left(v_{i^{*}}\right)\)값을 계산하고 \(t_{i}\)를 모든 서명자들에게 전송하여 \(j \neq i^{*}\)인 모든 서명자로부터 ti를 받는다.
(2) 모든 참여 서명자들로부터 tj값을 전송받았음을 확인한 후 모든 서명자에게 \(v_{i^{*}}\)값을 전송하고 \(j \neq i^{*}\)인 모든 서명자로부터 vj를 받는다. 이 후 \(j \neq i^{*}\)인 모든 vj값에 대해 \(t_{i}=H_{c}\left(v_{i}\right)\)가 성립하는지 확인하고, 아니라면 프로토콜을 중단한다.
(3) \(\text { TM.AggKey }\) 알고리즘을 사용하여 결합된 공개키인 \(\text { apk } \leftarrow \text { TM. } A g g K e y(p k l)\)를 생성하고, (2)에서 전달받은 값으로 \(a v=\sum_{j=1}^{n} v_{j}\)를 계산하고, 이를 해시 함수의 입력 값으로 하여 \(h=H_{1}(a v)\)를 계산한다. 이후 H2를 이용하여 \(\left\langle i d x_{1}\|\cdots\| i d x_{k}\right\rangle \leftarrow H_{2}(a p k\|h\| M)\)를 계산하고, 해시함수인 Ha를 이용하여 순열 \(\pi_{i} \longleftarrow H_{a}\left(p k l \| p k_{i^{*}}\right)\)를 생성한다. \(\left(i d x_{j}, j=1, \ldots, k\right)\)에 대해 \(x_{i^{*}, \pi_{i}\left(i d x_{j}\right)}=\operatorname{PRF}\left(z_{i}, \pi_{i^{*}}\left(i d x_{j}\right)\right)\)를 계산하고, 마지막으로 \(s_{i^{*}}=\left(\sum_{j=1}^{k} x_{i^{*}, \pi_{i^{*}}\left(i d x_{j}\right)}\right)+r_{i^{*}}\) 를 계산하여 모든 서명자들에게 전송하고 \(j \neq i^{*}\)인 모든 서명자로부터 sj를 받는다. 모든 서명자가 전송한 sj값으로 \(s=\sum_{j=1}^{n} s_{j}\)을 계산한다. 이때 \(\|s\|_{\infty}인지 확인하고, \(\|s\|_{\infty} \geq n(\xi-\rho)\)이라면 과정(1)부터 재시작하고 아니라면 결합 서명인 \(\sigma=(s, h)\)를 최종 서명 값으로 결정한다.

\(\text { TM. Verify }(M, \sigma, a p k, p p)\): 먼저 주어진 서명값 s에 대해 \(\|s\|_{\infty}이 성립하는지 확인하고 아닌 경우 서명이 정당하지 않다는 뜻의 0을 출력한다. 이후 \(\left(i d x_{1}\|\ldots\| i d x_{k}\right) \leftarrow H_{2}(a p k\|h\| M)\) 를 계산한 후 해당 인덱스 셋을 이용하여 검증에 필요한\(a v^{\prime}=G C K_{A}(s)-\sum_{j=1}^{k} a y_{i d x_{j}}\)값을 계산하고 이를 해시함수의 입력값으로 하여 \(H_{1}\left(a v^{\prime}\right)=h\)이 성립하는지 확인한다. 성립한다면 서명이 검증됐음을 의미하는 1을 출력하고, 그렇지 않은 경우 0을 출력한다.
해당 기법의 정확성은 다음의 수식으로 확인할 수 있다.

\(\begin{aligned} &G C K_{A}(s)-\sum_{j=1}^{k} a y_{i d x_{j}}=G C K_{A}\left(\sum_{i=1}^{n} s_{i}\right)-\sum_{j=1}^{k} a y_{i d x_{j}} \\ &=\sum_{i=1}^{n} G C K_{A}\left(\sum_{j=1}^{k} x_{i, \pi_{i}\left(i d x_{j}\right)}+r_{i}\right)-\sum_{j=1}^{k} \sum_{i=1}^{n} y_{i, \pi_{i}\left(i d x_{j}\right)} \\ &=\sum_{i=1}^{n} \sum_{j=1}^{k} G C K_{A}\left(x_{i, \pi_{i}\left(i d x_{j}\right)}\right)+\sum_{i=1}^{n} G C K_{A}\left(r_{i}\right)-\sum_{j=1}^{k} \sum_{i=1}^{n} y_{i, \pi_{i}\left(i d x_{j}\right)} \\ &=\sum_{i=1}^{n} \sum_{j=1}^{k}\left(G C K_{A}\left(x_{i, \pi_{i}\left(i d x_{j}\right)}\right)-y_{i, \pi_{i}\left(i d x_{j}\right)}\right)+\sum_{i=1}^{n} G C K_{A}\left(r_{i}\right) \\ &=\sum_{i=1}^{n} v_{i}=a v \end{aligned}\)

위 과정을 통해, 서명 생성 과정에서 생성한 h=H1(av)값과 서명 검증 시 생성한 \(h^{\prime}=H_{1}\left(a v^{\prime}\right)\) 값이 같다는 것을 알 수 있다.


IV. 안전성 증명

이번 장에서는 forking lemma[3]를 응용한 multiple forking lemma를 적용하여 앞서 설계한 TACHYON 기반 다중 서명 기법의 안전성을 GCK 함수의 일방향성에 기반하여 증명하고자 한다.

정리 4.1. 3.2절에서 제시된 TACHYON 기반 다중 서명 기법은 GCK 함수의 일방향성에 기반하여
랜덤 오라클 모델에서 선택 메시지 공격에 대한 위조 불가능성(EUF-CMA)을 만족한다.

증명. 3.2절에서 제시된 다중 서명 기법의 선택 메시지 공격에 대한 위조가 가능한 공격자 F가 있다고 가정한다면, GCK 함수의 일방향성에 반하는 알고리즘 B가 존재한다는 것을 보여 정리 4.1을 증명하고자 한다. 이를 위해 먼저 위조 공격자 F의 도전자 역할을 수행하는 래핑 알고리즘 A를 설계한다. A는 EUF-CMA 게임에서 도전자 역할을 수행하여 위조 서명을 출력하는 알고리즘이다. 이 증명에서는 multiple forking lemma를 적용하여 알고리즘 A를 같은 랜덤 테이프에 대해 하나의 분기점 이후에 각각 하나의 분기점을 잡아 총 네 번 실행하여 네 개의 위조 서명을 얻는다. 이 후 네 개의 위조 서명을 이용하여 GCK 함수의 일방향성을 부정할 수 있는 B를 설계한다.

알고리즘 A는 \(p k^{*}=\left(y_{1}, y_{2}, \ldots, y_{n}\right)\) ,\(\pi_{1}, \ldots, \pi_{q}\)\(I_{1}, \ldots, I_{q}\)와 랜덤 코인 \(\rho_{F}\)을 입력값으로 받아 출력값으로 \(\left(i_{0}, i_{1}, p k l, a v, s, \pi, I_{i_{1}}\right)\)을 출력한다. 이 출력값에서 \(i_{0}, i_{1} \in 1, \ldots, q\)이고, \(p k l=\left\{p k_{1}, \ldots, p k_{n}\right\} \quad\left(p k^{*} \in p k l\right)\)이다. 또한 \(p k_{i}=p k^{*}\)인 i에 대해 \(\pi_{i}=\pi_{i_{0}}\)인 순열 \(\pi=\left(\pi_{1}, \ldots, \pi_{n}\right)\)를 가진다. 각각 \(H_{1}, H_{2}, H_{c} H_{a}\)의 값을 저장하는 테이블인 \(T_{1}, T_{2}, T_{c}, T_{a}\)를 가지며 알고리즘 시작 시에 빈 테이블로 초기화한다. 또한 두 카운터인 \(\text { ctr }_{0}:=0\)\(c t r_{1}:=0\)를 포함한다. 이 후 F에게 \(p k^{*}\)를 입력값으로 주어 실행하며, 각 \(\text { query }\)에 대한 응답은 다음과 같이 진행된다.

\(H_{1}(a v) \text { query }\): \(T_{1}(a v)\)를 출력하며, \(T_{1}(a v)\)가 정의되어 있지 않다면 \(T_{1}(a v) \stackrel{\$}{\longleftarrow}(0,1)^{\lambda}\)값을 저장 후 출력한다.

\(H_{2}(a y\|h\| M) \text { query }\): \(T_{2}(a y\|h\| M)\)를 출력하며, \(T_{2}(a y\|h\| M)\)가 정의되어 있지 않다면 카운터 값을 \(c t r_{0}:=c t r_{0}+1_{i}\)로 변경하고 \(T_{2}(a y\|h\| M):=I_{c t r_{1}}\)값을 저장 후 출력한다.

\(H_{c}(v) \text { query }\): \(T_{c}(v)\)를 출력하며, \(T_{c}(v)\)가 정의되어 있지 않다면 \(T_{c}(v) \stackrel{\$}{\longleftarrow}(0,1)^{\lambda}\)값을 저장 후 출력한다.

\(H_{a}(p k l \| p k) \text { query }\): \(T_{a}(p k l \| p k)\)를 출력하며,\(T_{a}(p k l \| p k)\)가 정의되어 있지 않다면 카운터값
\(c t r_{0}:=c t r_{0}+1\)로 변경 후 \(p k^{*}\)에 대해서는 \(T_{a}\left(p k l \| p k^{*}\right):=\pi_{d t r_{0}}\)값을 저장하고, \(p k^{\prime} \in p k l / p k^{*}\)인 모든 \(p k^{\prime}\)에 대해서는 \(T_{a}\left(p k l \| p k^{\prime}\right):=\pi \stackrel{\$}{\longleftarrow} \Pi\)를 저장한 후 \(T_{a}(p k l \| p k)\)를 출력한다.

\(\text { Signature query }(p k l, M)\):

1) \(p k^{*} \notin p k l\)인 경우, ⊥를 출력한다. 그렇지 않은 경우 \(p k_{i}=\left(y_{i}=\left(y_{i, 1}, \ldots, y_{i, l}\right)\right)\)에 대해 공개키 리스트를 \(p k l=\left(p k_{1}=p k^{*}, p k_{2}, \ldots, p k_{n}\right)\)로 정의한다.


2) \(T_{a}\left(p k l \| p k^{*}\right)\)가 정의되어 있지 않으면, 내부 \(H_{a}\left(p k l \| p k^{*}\right) \text { query }\)를 통해 정의한다. 이 내부
\(\text { query }\)는 각각의 \(i \in(1, \ldots, n)\)에 대해 \(T_{a}\left(p k l \| p k_{i}\right)\)가 정의되며, \(\pi_{i}=T_{a}\left(p k l \| p k_{i}\right)\)값을 설정하고 \(a y_{j}=\sum_{i=1}^{n} y_{i, \pi_{i}(j)}\)식을 통해 \(a y=\left(a y_{1}, \ldots, a y_{l}\right)\)값을 계산한다.


3) \(c t r_{1}:=c t r_{1}+1\)로 카운터 값을 변경하고, \(h \stackrel{\$}{\longleftarrow}(0,1)^{l}\)\(s_{1} \stackrel{\$}{\leftarrow} \text { sample }(\xi-\rho-1)\)값을 랜덤으로 선택한다. 이후 \(I_{d r_{1}}=\left(i d x_{1}\|\cdots\| i d x_{k}\right)\)에 대해 \(I:=I_{c t r_{1}}\)를 설정하고, \(v_{1}:=G C K_{A}\left(s_{1}\right)-\sum_{j=1}^{k} y_{1, \pi_{1}\left(i d x_{j}\right)}\) 값을 계산한다.

4) \(T_{c}\left(v_{1}\right)\)가 이미 정의된 경우, ⊥를 출력한다. 그렇지 않은 경우 내부 \(H_{c}\left(v_{1}\right) \text { query }\)를 통해 값을 정하고 \(t_{1}:=T_{c}\left(v_{1}\right)\)을 위조 공격자에게 보낸다.

5) 위조 공격자로부터 커밋먼트 \(t_{2}, \ldots, t_{n}\)를 받은 다음 각 \(i \in 2, \ldots, n\)에 대해 \(t_{i}=T_{c}\left(v_{i}\right)\)를 만족하는 \(v_{i}\)를 찾고 각각 하나의 값을 갖는지 확인한다.

6) 위의 조건이 충족되지 않을 경우 실행을 중단한다. 그렇지 않은 경우 위조 공격자에게 v1을 보내고, \(a v:=\sum_{i=1}^{n} v_{i}\)를 계산한다.

7) \(T_{1}(a v)\) 혹은 \(T_{2}(a y\|h\| M)\)가 이미 정의되어 있는 경우 실행을 중단한다, 그렇지 않은 경우 각
값을 \(T_{1}(a v):=h, \quad T_{2}(a y\|h\| M):=I\)으로 정의한 후 위조 공격자에게 v1을 보낸다.

8) 위조 공격자 F로부터 \(v_{2}, \ldots, v_{n}\)를 받은 후 모든 \(i \in(2, \ldots, n)\)에 대해 \(H_{c}\left(v_{i}\right)=t_{i}\)가 성립하는지 확인한다.

9) 성립하지 않는다면 서명 단계를 중단하고, 그렇지 않다면 위조 공격자에게 S1을 보내고 \(p k^{*}\)의 소유자인 정당한 사용자와 같은 서명 단계를 진행한다.

위조 공격자 F가 ⊥를 출력한 경우, A도 ⊥를 출력한다. 그렇지 않은 경우 위조 공격자가 \(p k^{*} \in p k l\), \(\sigma=(s, h)\)인 위조 서명 \((\sigma, M, p k l)\)을 출력한다. 다음으로 A는 \(p k_{i}=\left(y_{i}=\left(y_{i, 1}, \ldots, y_{i, l}\right)\right)\)에 대하여 \(p k l=\left(p k_{1}=p k^{*}, p k_{2}, \ldots, p k_{n}\right)\)로 정의하고 위조 서명
의 유효성을 다음과 같이 확인한다. 먼저 A는 각각의 \(i \in(1, \ldots, n)\)에 대해 \(T_{a}\left(p k l \| p k_{i}\right)\)가 정의된 내부 \(H_{a}\left(p k l \| p k^{*}\right) \text { query }\)를 실행하고, \(\pi_{i}=T_{a}\left(p k l \| p k_{i}\right)\)를 설정한다. 이후 모든 \(j \in(1, \ldots, l)\)에 대해 \(a y_{j}=\sum_{i=1}^{n} y_{i, \pi_{i}(j)}\)식을 통해 \(a y=\left(a y_{1}, \ldots, a y_{l}\right)\)값을 계산한다. 이 후 내부 \(H_{2}(a y\|h\| M) \text { query }\)를 통해 \(I=\left(i d x_{1}\|\ldots\| i d x_{k}\right)\)에 대해 \(I=T_{2}(a y\|h\| M)\)를 설
정하고 \(a v:=G C K_{A}(s)-\sum_{j=1}^{k} a y_{i d x_{j}}\)를 계산한다. \(\hat{h}=H_{1}(a v)\)를 계산한 후 만약 \(h \neq \hat{h}\)라면, A는 ⊥를 출력한다. 그렇지 않은 경우 A는 다음과 같은 추가정보와 함께 위조 서명을 출력한다.

A는 \(T_{a}\left(p k l \| p k_{i}\right)=\pi_{i}\)에 대해 \(i_{0}:=i\)를 정하고, \(I=I_{i}\)에 대해 \(i_{1}:=i\)를 정하여 \(\pi=\left(\pi_{1}, \ldots, \pi_{n}\right)\)에 대해 \(\left(i_{0}, i_{1}, p k l, a y, a v, s, \pi, I\right)\)를 출력한다.

이 다음 과정을 통해 알고리즘 A를 활용하여 알고리즘 B를 설계한다.

1) 알고리즘 B는 y*를 입력값으로 받아 l-1개의 \(x_{i} \stackrel{\$}{\leftarrow} R^{\mu}\)을 랜덤하게 뽑는다. 이후 \(b \in\{1, \ldots, l\}\) 인 b에 대해 \(y^{*}=y_{b}\)포함한 \(p k^{*}=\left(y_{1}, \ldots, y_{l}\right)\)를 설정하고 모든 \(i \in\{1, \ldots, l\} \backslash\{b\}\)에 대해 \(y_{i}=G C K_{A}\left(x_{i}\right)\)를 계산한다.

2-1) 이 후 B는 \(\text { Fork }^{A}\) 를 실행한다. 이는 B가 랜덤 코인인 \(\rho_{A}\)를 고른 후 공개키 \(p k^{*}\)\(\pi_{1}, \ldots, \pi_{q}\) ,\(I_{1}, \ldots, I_{q}\)를 랜덤하게 골라 알고리즘 A를 실행하는 것이다. 만약 A가 ⊥를 출력하면, B도 ⊥를 출력하고, 그렇지 않다면 A는 \(p k l=\left\{p k_{1}, \ldots, p k_{n}\right\}\), \(a y=\left(a y_{1}, \ldots, a y_{l}\right)\), \(\pi=\left(\pi_{1}, \ldots, \pi_{q}\right)\)에 대해 출력값으로 \(\left(i_{0}, i_{1}, p k l, a y, a v, s, \pi, I\right)\)를 출력한다.

2-2) B는 같은 랜덤 코인 PA에 대해 다시 알고리즘 A를 실행한다. 이 때 입력값으로는 공개키 \(p k^{*}\)\(\pi_{1}, \ldots, \pi_{q}, \quad I_{1}, \ldots, I_{i_{1}-1}\)를 그대로 사용하고, \(I_{i_{1}}^{\prime}, \ldots, I_{q}^{\prime}\)는 랜덤하게 고른다. 만약 A가 ⊥를 출력하면, B도 ⊥를 출력하고, 그렇지 않다면 출력값으로 \(\left(i_{0}^{\prime}, i_{1}^{\prime}, p k l^{\prime}, a y^{\prime}, a v^{\prime}, s^{\prime}, \pi^{\prime}, I^{\prime}\right)\)를 출력한다.

2-3) \(i_{0}=i_{0}^{\prime}, i_{1}=i_{1}^{\prime}, I_{i_{1}} \neq I_{i_{1}}^{\prime}\)이 성립하는지 확인 후, 성립하지 않으면 B는 ⊥를 출력한다. 성립
할 경우 B는 같은 랜덤 코인 PA에 대해 다시 알고리즘 A를 실행한다. 이 때 입력 값으로는 공개키 \(p k^{*}\)\(\pi_{1}, \ldots, \pi_{i_{0}-1}, \quad I_{1}, \ldots, I_{q}\)를 그대로 사용하고, \(\pi^{\prime}{ }_{i_{0}}, \ldots, \pi_{q}^{\prime}\)는 랜덤하게 고른다. 만약 A가 ⊥를 출력하면, B도 ⊥를 출력하고, 그렇지 않다면 출력값으로 \(\left(i_{0}^{\prime \prime}, i^{\prime \prime}{ }_{1}, p k l^{\prime \prime}, a y^{\prime \prime}, a v^{\prime \prime}, s^{\prime \prime}, \pi^{\prime \prime}, I^{\prime \prime}\right)\)를 출력한다.

2-4) \(i_{0}=i_{0}^{\prime \prime}, i_{1}=i_{1}^{\prime \prime}\)이 성립하는지 확인 후, 성립하지 않으면 B는 ⊥를 출력한다. 성립할 경우 B
는 같은 랜덤 코인 PA에 대해 다시 알고리즘 A를 실행한다. 이 때 입력값으로는 공개키 \(p k^{*}\)\(\pi_{1}, \ldots, \pi_{i_{0}-1}, \pi_{i_{0}}^{\prime}, \ldots, \pi_{q}^{\prime}, \quad I_{1}, \ldots, I_{i_{1}-1}, \quad I_{i_{1}}^{\prime}, \ldots, I_{q}^{\prime}\)를 사용한다. 만약 A가⊥를 출력하면, B도 ⊥를 출력한다. 그렇지 않은 경우에는 출력값으로 다음과 같이 \(\left(i^{\prime \prime \prime}{ }_{0}, i^{\prime \prime \prime}{ }_{1}, p k l^{\prime \prime \prime}, a y^{\prime \prime \prime}, a v^{\prime \prime \prime}, s^{\prime \prime \prime}, \pi^{\prime \prime \prime}, I^{\prime \prime \prime}\right)\)를 출력한다.

위의 식을 이용해 다음의 식들을 정의할 수 있다.

\(a y_{i}=y_{1, \pi_{1}(i)}+\sum_{j=2}^{n} y_{j, \pi_{j}(i)}\)에 대해 다음식을 만족한다.

\(a y=a y^{\prime}=\left(a y_{1}, \ldots, a y_{l}\right)\)

\(a y_{i}^{\prime \prime}=y_{1, \pi^{\prime \prime}_{1}(i)}+\sum_{j=2}^{n} y_{j, \pi_{j}(i)}\)에 대해 다음식을 만족한다.

\(a y^{\prime \prime}=a y^{\prime \prime \prime}=\left(a y^{\prime \prime}{ }_{1}, \ldots, a y_{l}^{\prime \prime}\right)\)

이후 B는 다음을 만족하는 \(s^{*}:=\tilde{s}-\tilde{s}^{\prime}\)를 계산한다.
\(\begin{aligned} & G C K_{A}\left(s^{*}\right)=G C K_{A}\left(\tilde{s}-\tilde{s}^{\prime}\right) \\ =& \sum_{i=1}^{k}\left(a y_{i d x_{i}}-a y_{i d x_{i}^{\prime}}^{\prime}\right)-\sum_{i=1}^{k}\left(a y_{i d x_{i}}^{\prime \prime}-a y^{\prime \prime \prime}{ }_{i d x_{i}^{\prime}}\right) \\ =& \sum_{i=1}^{k}\left(y_{1, \pi_{1}\left(i d x_{i}\right)}+\sum_{j=2}^{n} y_{j, \pi_{j}\left(i d x_{i}\right)}-\left(y_{1, \pi_{1}\left(i d x^{\prime}\right)}+\sum_{j=2}^{n} y_{j, \pi_{j}\left(i d x^{\prime}\right)}\right)\right) \\ -& \sum_{i=1}^{k}\left(y_{1, \pi_{1}^{\prime \prime}\left(i d x_{i}\right)}+\sum_{j=2}^{n} y_{j, \pi_{j}\left(i d x_{i}\right)}-\left(y_{1, \pi_{1}^{\prime \prime}\left(i d x^{\prime}\right)}+\sum_{j=2}^{n} y_{j, \pi_{j}\left(i d x^{\prime}\right)}\right)\right) \\ =& \sum_{i=1}^{k}\left(y_{1, \pi_{1}\left(i d x_{i}\right)}-y_{1, \pi_{1}\left(i d x^{\prime}\right)}-\left(y_{1, \pi^{\prime \prime},_{1}\left(i d x_{i}\right)}-y_{1, \pi^{\prime \prime},\left(i d x^{\prime}\right)}\right)\right) \end{aligned}\)

다음으로 \(i \in\{1, \ldots, k\}\)에 대해 다음과 같이 정의한다. \(I S_{1}:=\left\{\pi_{1}\left(i d x_{i}\right)\right\}, \quad I S_{2}:=\left\{\pi_{1}\left(i d x_{i}^{\prime}\right)\right\}\), 그리고 \(I S_{3}:=\left\{\pi_{1}^{\prime \prime}\left(i d x_{i}\right)\right\}, \quad I S_{4}:=\left\{\pi_{1}^{\prime \prime}\left(i d x_{i}^{\prime}\right)\right\}\). 이후 공개
\(p k^{*}=p k_{1}=\left(y_{1,1}, \ldots, y_{1, l}\right)\)에 대해 \(y_{1, i}=y^{*}\)이므로 B는 Table 1. Properties of post-quantum multi-signature schemes에 대해 \(y_{1, i}\)의 모든 역함수 값을 알고 있다. 따라서 만약 b에 대해서 \(b \in\left(I S_{1} \cup I S_{4}\right) \backslash\left(I S_{2} \cup I S_{3}\right)\)라고 한다면, B는 GCKA함수의 동형성질(homomorphic property)에 의해 다음식에 의해 \(y_{1, b}=y^{*}\)의 역함수도 알아낼 수 있다.

\(y^{*}=G C K_{A}\left(s^{*}\right)\)

\(\begin{aligned} -& \sum_{i=1}^{k}\left(y_{1, \pi_{1}\left(i d x_{i}\right)}-y_{1, \pi_{1}\left(i d x^{\prime}\right)}-y_{1, \pi_{1}^{\prime \prime}\left(i d x_{i}\right)}+y_{1, \pi^{\prime \prime}{ }_{1}\left(i d x^{\prime}{ }_{i}\right)}\right) \\ & \pi_{1}\left(i d x_{i}\right) \neq b \\ & \pi^{\prime \prime}{ }_{1}\left(i d x_{i}^{\prime}\right) \neq b \\ =& G C K_{A} \end{aligned}\)

\(\begin{aligned} \left(s^{*}-\right.& \sum_{i=1}^{k}\left(x_{1, \pi_{1}\left(i d x_{i}\right)}-x_{1, \pi_{1}\left(i d x_{i}^{\prime}\right)}-x_{1, \pi^{\prime \prime}_{1}\left(i d x_{i}\right)}+x_{1, \pi^{\prime \prime}_{1}\left(i d x^{\prime}\right)}\right) \\ & \pi_{1}\left(i d x_{i}\right) \neq b \\ & \pi_{1}^{\prime \prime}\left(i d x_{i}^{\prime}\right) \neq b \end{aligned}\)

V. 결론

본 논문에서는 양자 컴퓨팅 환경에서 안전한 서명 기법인 TACHYON 기법을 이용하여 다중 서명 기
법을 설계하고 TACHYON 기법에서 안전성 증명에쓰인 문제와 같은 문제인 GCK 함수의 일방향성에 근거하여 안전성을 증명하였다. 따라서 논문에서 제시한 TACHYON 기반의 다중 서명 기법 역시 TACHYON과 같이 양자 컴퓨팅 환경에서 안전한 기법으로, 최근 연구[4]에서 제시된 일반 공개키 모
델에서 공개키 결합이 가능한 Schnorr 기반 기법의 설계 원리를 참고하여 설계한 일반 공개키 모델에서 공개키 결합이 가능한 기법이다. 최근 연구된 양자컴퓨팅 환경에서 안전한 다중 서명 기법은 다음 표와 같이 정리할 수 있다.
표에서 볼 수 있듯이 최근 연구된 양자컴퓨팅 환경에서 안전한 다중서명 기법들[13, 9, 14, 5] 중 일반 공개키 모델과 키 결합 특성을 동시에 만족하는 기법으로, 검증 시 결합된 공개키 하나만으로 서명 검증이 가능할 뿐 아니라 공개키에 대응하는 개인키의 영지식 증명을 부가적으로 수행하지 않아도 안전한 장점을 모두 갖고 있다. 또한 최근 연구된 다른 기법들은 격자기반 난제의 어려움에 기반하고 있는데, TACHYON 논문[12]의 분석에 따르면 GCK 함수 기반의 TACHYON 서명이 격자기반 난제에 기반한 서명인 Dilithium, qTESLA[7,10] 등에 비해 서명 생성 및 검증 시간이 짧고 개인키의 크기가 작다는 장점이 있다는 것을 알 수 있다. 따라서 논문에서 제시한 기법 또한 같은 문제인 GCK 함수의 일방향성에 기반한 다중서명으로, 특정 환경에서 최근 연구된 양자컴퓨팅 환경에서 안전한 다중 서명 기법에 비해 효율적으로 사용될 수 있다. 향후 연구로는 현재 다른 기법에 비해 크기가 큰 공개키 및 서명의 크기를 줄인 GCK 함수 기반의 다중 서명에 대한 연구가 진행될 수 있을 것이다.

Table 1. Properties of post-quantum multi-signature schemes

JBBHCB_2021_v31n3_517_t0001.png 이미지

References

  1. D. Boneh, M. Drijvers, and G. Neven, "Compact multi-signatures for smaller blockchains," International Conference on the Theory and Application of Cryptology and Information Security, pp. 435-464, Springer, Cham, Dec. 2018.
  2. D. Micciancio, "Generalized compact knapsacks, cyclic lattices, and efficient one-way functions," computational complexity, vol. 16, no. 4, pp. 365-411, Dec. 2007. https://doi.org/10.1007/s00037-007-0234-9
  3. D. Pointcheval and J. Stern, "Security arguments for digital signatures and blind signatures," Journal of Cryptology, vol. 13, no. 3, pp. 361-396, Dec. 2000 https://doi.org/10.1007/s001450010003
  4. G. Maxwell, A. Poelstra, Y. Seurin, and P. Wuille., "Simple schnorr multi-signatures with applications to bitcoin," Designs, Codes and Cryptography, vol. 87, no. 4, pp. 2139-2164, Feb. 2019. https://doi.org/10.1007/s10623-019-00608-x
  5. I. Damgard, C. Orlandi, A. Takahashi and M. Tibouchi. "Two-round n-out-of-n and multi-signatures and trapdoor commitment from lattices," Cryptology ePrint Archive, Report 2020/1110, Sep. 2020.
  6. I. Dinur and N. Nadler, "Multi-Target Attacks on the Picnic Signature Scheme and Related Protocols," Annual International Conference on the Theory and Applications of Cryptographic Techniques, pp. 699-727, Springer, Cham, May. 2019.
  7. L. Ducas, E. Kiltz, T. Lepoint, V. Lyubashevsky, P. Schwabe, G. Seiler, and D. Stehle, "CRYSTALS - Dilithium: A Lattice-Based Digital Signatures Scheme," IACR Transactions on Cryptographic Hardware and Embedded Systems, vol. 2018, no. 1, pp. 238-268, Feb. 2018.
  8. M. Bellare and G. Neven., "Multi-signatures in the plain public-key model and a general forking lemma," A Proceedings of the 13th ACM conference on Computer and communications security, pp. 390-399, Oct. 2006.
  9. M. Fukumitsu and S. Hasegawa. "A tightly-secure lattice-based multisignature," Proceedings of the 6th on ASIA Public-Key Cryptography Workshop, pp. 3-11, Jul. 2019.
  10. N. Bindel, S. Akleylek, E. Alkim, P. S. L. M. Barreto, J. Buchmann, E. Eaton, G. Gutoski, J. Kramer, P. Longa, H. Polat, J. E. Ricardini, and G. Zanon, "Submission to NIST's post-quantum project: Lattice-based digital signature scheme qTESLA," 2018.
  11. P.W. Shor, "Algorithms for quantum computation: Discrete logarithms and factoring," Proceedings 35th annual symposium on foundations of computer science, pp. 124-134, Ieee, Nov. 1994.
  12. R. Behnia, M.O. Ozmen, A.A. Yavuz, and M. Rosulek, "TACHYON: fast signatures from compact knapsack," Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security, pp. 1855-1867, Oct. 2018.
  13. R. E. Bansarkhani and J. Sturm. "An efficient lattice-based multisignature scheme with applications to bitcoins." International Conference on Cryptology and Network Security, pp. 140-155, Springer, Cham, Nov. 2016.
  14. Z.Y. Liu, Y.F. Tseng, and R. Tso. "Cryptanalysis of a round optimal lattice-based multisignature scheme." Cryptology ePrint Archive, Report 2020/1172, Sep. 2020.