DOI QR코드

DOI QR Code

On-Line/Off-Line Signature Schemes with Tight Security Reduction to the RSA Problem

RSA 문제와 동등한 안전성을 갖는 온라인/오프라인 서명 기법

  • Received : 2018.01.09
  • Accepted : 2018.03.10
  • Published : 2018.04.30

Abstract

On-line/off-line signature is a technique for performing heavy computations required for signature generation in the off-line stage and completing the final signature by a simple operation in the online stage. This is suitable for application environments that require immediate signing responses to multiple users. In this paper, we propose two new on-line/off-line signature schemes based on RSA problem. The first technique can generate a signature with a fixed base exponentiation when signing online, and the second technique can complete an online signature with a very simple calculation such as a hash operation. The security of both signatures is based on the RSA problem, which is proven to be tightly secure without security loss in the random oracle model.

온라인/오프라인(On-line/off-line) 서명은 오프라인 단계에서 서명생성에 필요한 무거운 연산을 수행하고, 온라인 단계에서 간단한 연산만으로 최종 서명을 완성하는 기법이다. 이는 다수의 사용자에게 즉각적인 서명 응답을 해야 하는 응용환경에 적합하다. 본 논문에서는 RSA 문제에 기반한 새로운 온라인/오프라인 서명기법을 두 가지로 제안한다. 첫 번째 기법은 온라인 서명 시 고정된 밑수에서의 지수승이면 되고, 두 번째 기법은 해쉬연산과 같은 매우 간단한 계산만으로 온라인 서명을 완성할 수 있다. 두 서명의 안전성은 모두 RSA 문제로 환원되는데, 랜덤 오라클 모델에서 안전성 손실 없이 증명이 된다.

Keywords

I. 서론

온라인/오프라인(On-line/off-line) 서명[1]은 서명알고리즘을 이원화하여 오프라인 단계에서 비용이 많이 드는 연산을 사전에 수행하고, 온라인 단계에서는 매우 간단한 연산만으로 해당 메시지에 대한 최종 서명을 생성하는 기법이다. 이 서명기법은 하나의 서버가 대규모 사용자들에게 전자서명을 생성해서 전달해야 하는 응용환경에서 유용하다. 예를 들어, 최근 TLS(Transport Layer Security) v1.3 표준[2]에서는 디피-헬만(Diffie-Hellman) 키 교환을 중심으로 사용자와 서버가 보내는 디피-헬만 값을 서명하여 응답하는 것이 핸드쉐이크(Handshake) 프로토콜1)의 핵심적인 과정이다. TLS v1.2[3]에서도 임시(Ephemeral) 디피-헬만 방식의 경우 디피헬만 값을 서명하는 과정이 여전히 요구된다. 이 경우 서버는 다수의 사용자와 TLS 보안채널을 형성하는 과정에서 온라인상에서 매우 빠른 서명을 생성하는 것이 필요하다. 온라인/오프라인 서명을 사용할 경우, 서버는 여유 있는 시간에 다수의 오프라인 서명(이를 토큰(token)이라 함)을 사전생성해서 저장하고 온라인 서명에서는 사용자가 요청하는 메시지에 대해 저장된 토큰을 활용, 매우 빠른 서명을 생성하는 것이 가능하다.

온라인/오프라인 서명을 설계하는 일반적인 방법은 몇 가지가 제시되었다. 첫 번째 방식은 일회용 서명을 이용하는 방법[1]으로, 사전에 메시지와 무관하게 일회용 공개키와 서명키를 생성한 후 일회용 공개키를 메시지로 취급하고 (본래의) 서명을 생성한다. 이후 메시지가 입력되면 일회용 서명키를 이용하여 서명을 한 후 두 개의 서명을 합해서 하나의 서명으로 출력하는 방식이다. 이 방식은 최종서명에 일회용 공개키 및 두 종류의 서명이 포함되므로 서명길이가 길어지는 단점이 있다. 두 번째 방식은 카멜레온 해쉬함수(Chameleon hash function)[4]를 이용하는 방법[5]으로, 카멜레온 해쉬값을 생성한 후 메시지와 무관하게 그 해쉬값에 (본래의) 서명을 생성한 후 메시지가 입력되면 카멜레온 해쉬함수의 비밀 값(즉, 트랩도어(trapdoor)를 말함)을 이용하여 메시지에 대응하는 해쉬 충돌쌍을 찾고 최종 서명을 완성하는 방식이다. 이 방식은 공개키에 카멜레온 해쉬함수의 공개키까지 포함되므로 전체 공개키가 길어지는 단점이 있으며, 서명에 공개키까지 전송하는 경우 결국 일회용 서명방식과 마찬가지로 전체 서명이 길어지는 단점이 있다.

본 논문에서는 위 설계원리를 따르지 않고 RSA 기반에서 직접 온라인/오프라인 서명이 가능한 두 개의 기법을 제안한다. 현재까지 제안된 RSA 기반 서명기법들, 즉, RSA-FDH[6]와 RSA-PSS[7]은 (위의 비효율적인 변형방법을 따르지 않는 경우) 온라인/오프라인 서명으로 변형하는 것이 쉽지는 않다. 그 이유는 두 개의 서명 모두 메시지가 입력되고 인코딩이 된 후에 서명키로 지수승을 하기 때문이다. 즉, 메시지와 무관하게 사전계산을 하는 것이 현 상태로는 불가능하다. 본 논문에서는 이러한 문제를 극복해서 RSA 기반 서명에서도 온라인/오프라인 서명의 직접적인 설계가 가능하다는 것을 보인다. 온라인 서명에서의 연산량을 설명하면, 첫 번째 기법은 온라인 단계에서 고정된 밑수에서의 지수승만으로 서명생성이 가능하고, 두 번째 기법은 지수승도 필요 없이 단순한 연산만으로 서명생성이 가능하다. (표준 가정이 아닌) 더 강한 Strong RSA 문제에 기반한 기법[8]이 제시되었으나, [8]에서는 서명 생성 시마다 새로운 소수를 생성해야 하는 단점이 있다.

온라인/오프라인 서명방법으로 제안된 두 개의 서명기법 모두 RSA 문제에 효율적인 환원관계(Reduction)로 증명됨을 보인다. 즉 증명과정에서 안전성 손실(Security loss)없이 RSA 문제의 어려움에 거의 동등하게 환원됨을 보일 수 있다. 이러한 증명효율성은 실제 기법설계를 위한 변수 설정에 영향을 미치는데, 보안상수(Security parameter)가 추구하는 안전성 레벨보다 (안전성 손실을 고려해서) 더 높게 설정되어야 한다. 자연스럽게 안전성 손실이 적도록 증명된 기법이 더 바람직하다. 기존 기법에서는 RSA-FDH의 경우 공격자의 해쉬 질의 수만큼 안전성 손실이 발생함에 비해, RSA-PSS의 경우 RSA 문제에 효율적으로 환원되는 것이 증명되었다. 본 논문에서 제시하는 증명방법은 RSA 문제에 효율적으로 환원하려는 기타의 기법들에도 도움이 될 것이다.

II. 배경지식

2.1 전자서명 정의

전자서명은 세 개의 알고리즘 (KeyGen, Sign, Vrfy)로 구성된다.

• 키생성(KeyGen)(k): 보안상수 k을 입력받고 서명검증용 공개키(PK)와 서명생성용 개인키(SK)를 출력한다.

• 서명(Sign)(SK, m): 서명키 SK와 메시지 m을 입력받고 서명 결과인 σ를 출력한다.

• 검증(Vrfy)(PK, m, σ): 검증키 PK와 메시지 m, 그리고 서명 σ을 입력받고 비트 b를 리턴(return)한다. 만약 b = 1이면 서명은 유효(valid)하고, b = 0이면 서명은 무효(invalid)라는 의미이다.

정확성(correctness). KeyGen(k)로 생성된 (PK, SK)에서, 모든 메시지 m에 대해 올바르게 생성된 서명 SignSK(m)은 항상 검증 알고리즘에 의해서 Vrfy(PK, m, SignSK(m)) = 1이다.

2.2 전자서명 안전성 정의

전자서명 위조(forgery)란 서명자의 공개키(PK)에 대해서 이전에 서명자에 의해 생성된 적 없는 메시지 m에 대한 유효한 서명을 만드는 것이다. 여기서 전자서명이 위조 공격에 안전하다는 것은, 임의의 공격자가 그가 선택한 메시지들에 대해서 서명결과를 (서명 오라클을 통해) 얻었더라고 새로운 메시지에 대한 서명을 위조할 수 없어야 함을 의미한다. 이를 선택 메시지 공격[9]에 대한 안전성으로 정의한다. 다음의 공격실험 Expuf(A)로 정의된다.

Ⅱ=(KeyGen, Sign, Vrfy)를 서명이라 하자. 공격자 A, 보안상수 k에 대해 다음 실험을 수행한다.

1. KeyGen(k)으로 (PK, SK)를 얻는다.

2. 공격자 A는 PK를 받고 오라클 SignSK()에 질의한다. 그리고 A는 (m*, σ*)를 리턴한다.

3. Q를 이전에 A가 오라클에게 질의한 메시지집합이라고 하자. 만약 (1) Vrfy(m*, σ*) = 1이고 m*∉ Q일 때에만 A는 ‘위조를 성공했다‘라 하고 이 경우 실험의 결과로 1을 리턴한다.

공격자 A가 위의 실험에서 위조에 성공할 확률을 다음과 같이 정의한다.

Advuf(A) = Pr[Expuf(A) = 1]

정의 1. 만약 모든 공격자가 최대 tA시간 동안 최대 qs개의 질의를 할 때 서명 Ⅱ를 최대 εA확률로 깨지 못한다면 서명 Ⅱ는 선택 메시지 공격에 대해서 ( tA, εA, qs) 안전하다.

2.3 RSA 가정

보안상수 k을 입력받아 (N, e, d)를 출력하는 다항식 시간 알고리즘 GenRSA가 있다고 하자. 이 때 N은 두 개의 (거의 동일한 비트 사이즈를 갖는) 강한 소수(strong prime)들의 곱이라 한다. 즉, N = pq일 때, 서로 다른 소수 p1 , q1에 대해서 p = 2p1 + 1, q = 2q1 + 1이다. 그리고 e와 d값은 gcd(e, Φ(N)) = 1, ed = 1(modΦ(N))이 성립한다. 소인수분해가 알려지지 않은 N, 그리고 e를 알고 있을 때 xe = y (modN)를 만족하는 y1/e(modN)을 계산하는 것이 RSA 문제이다. 보다 정확하게 RSA문제[6][7]는 다음과 같은 실험으로 정의된다.

알고리즘 B에 대해서 다음의 실험을 수행한다.

1. GenRSA을 수행해 (N, e, d)를 얻는다.

2. 변수 y∈ZN*를 랜덤하게 선택한다.

3. B는 (N, e, y)를 받고 x∈ZN*를 리턴한다.

4. xe = y(modN)일 때 실험결과로 1을 내고 아니면 0을 리턴한다.

알고리즘 B가 RSA 문제를 푸는 확률을 다음과 같이 정의한다.

AdvRSA(B) = Pr[B(N, e, y) = y1/e]

정의 2. RSA 문제가 (tB, εB)-안전하다는 것은 다음과 같이 정의된다: 만약 모든 (확률론적) 다항식 시간 알고리즘 B가 최대 tB시간 동안 RSA 문제를 푼다면, AdvRSA(B) < εB라 한다.

III. On-line/off-line RSA 서명 기법 1

3.1 서명 기법 설계

약간 수정된 GenRSA 알고리즘을 먼저 기술한다. 보안상수 입력 k에 대해서 (N, e, d, g )를 생성한다. 여기서 N은 강한 소수(strong prime) p, q의 곱이다. 즉, 서로 다른 소수 p1 , q1에 대해서 p = 2p1 + 1, q = 2q1 + 1 이다. 그리고 e는 ℓ + 1비트보다 큰 어떤 소수이다. 즉, e > 2 ℓ + 1이다. (여기서 ℓ의 크기는 안전성 증명에 의해 결정된다.) 특이한 점은 위수가 p1q1인 생성원 g를 추가적으로 선택한다. g는 \(Z_{N}^{*}\)의 부분군을 구성하는 생성원이고, \(Z_{N}^{*}\)에서 이차잉여(Quadratic Residue) 그룹 QRN의 생성원이다.

전자서명 알고리즘 Π = (Gen, Sign,Vrfy) 는 다음과 같이 정의된다.

Gen(k): 보안상수 k을 받아서 GenRSA을 실행해 (N, e, d, g )를 얻는다. 또한 해쉬 함수 H, h를 각각 다음과 같이 정의한다.

\(H:\{0,1\}^{*} \rightarrow Z_{N}^{*}, h:\{0,1\}^{*} \rightarrow\{0,1\}^{\ell}\)

PK=(N, e, g, H, h) 와 SK=(d)이다.

Sign(m, d):

① R ∈ {0,1}1을 랜덤하게 선택한다.

② H(R) d (modN) 을 계산한다.

③ g h (R||m )d (modN) 을 계산한다.

④ σ1 = (H(R)g h (R||m ) ) d (modN)를 계산한다.

⑤ σ = (σ1, R)∈Z N × {0,1} l1를 출력한다.

Vrfy(PK, m, σ) : 여기서 σ = [σ1, R]이다.

\(\sigma_{1}^{e}=H(R) \times g^{h(R \| m)}(\bmod N)\)이 성립하는지 확인한다. 만약 같다면 1을, 아니면 0을 출력한다.

3.2 온라인/오프라인 서명생성 과정

서명생성 알고리즘은 온라인/오프라인 과정에서 다음과 같은 계산으로 분리될 수 있다.

오프라인 계산과정: 메시지 m이 입력되기 전에 아래의 계산을 수행한다.

① R ∈ {0,1}1을 랜덤하게 선택한다.

② H(R) d (modN) 을 계산한다.

③ token=(R, H(R) d )값을 안전하게 저장한다.

온라인 서명생성 과정: 메시지 m이 입력되면, 서명키 SK와 저장된 token을 이용하여 아래의 계산을 수행한다.

① g h (R||m )d (modN) 을 계산한다.

② σ1 = H(R) d × gh (R||m )d (modN) 을 구한다.

③ σ = [σ1, R]∈Z N × {0,1} l1를 출력한다.

공개키는 기존 RSA-FDH나 RSA-PSS에서 (N, e )임에 비해 제안기법에서는 원소 g∈Z N가 추가된다. 그러나 작은 사이즈의 원소 g를 (혹은 필요하면 제곱을 해서) 선택해도 위수가 p1q1이 되는 경우가 대부분이므로, 실제로는 작은 사이즈의 g값을 기존 공개키 (N, e )에 추가하면 된다. 따라서 제안기법에서 공개키가 크게 증가하는 문제는 완화된다.

오프라인에서는 지수승 한번이 필요하나. 실제 온라인 서명생성 과정에서는 주된 계산이 고정된 밑수 g에서의 지수승, 즉, g h (R||m )d (modN) , 이 필요하게 된다. 여기서 g의 위수 p1q1을 비밀키의 일부로 저장하게 되면, 지수값 h(R||m)d 을 모듈러스 p1q1으로 줄여서 계산하는 것이 가능하다. 일반적으로 고정 밑수 지수승이 일반 지수승보다 약 4배에서 5배정도 빠르다는 것이 알려져 있으므로[10] 제안된 기법의 서명 속도는 온라인 서명생성과정에서 RSA-PSS 또는 RSA-FDH보다 약 4배 빠르게 된다. 또한 서명키에 p, q를 포함하고, CRT를 이용하여 지수승을 하는 것도 가능하다. 이 경우에도 고정된 밑수 g를 기준으로 mod p와 mod q에서 지수승 연산이 가능하므로, 일반적인 RSA 서명을 CRT로 이용하는 것보다 더 빠른 지수승 연산이 가능하다.

3.3 안전성 증명

정리 1. 만일 RSA 문제가 (tB, εB)-안전하고, 해 쉬함수 H, h가 랜덤 오라클로 동작한다면, 위에서 서술된 서명은 선택 메시지 공격에서 (tA, εA, qS) -안전하다. 여기서

\(\begin{aligned} &t_{B} \geq t_{A}+O\left(\left(q_{H}+q_{S}\right) t_{e}\right) \\ &\epsilon_{A} \leq \epsilon_{B}+\frac{\left(q_{H}+q_{h}+q_{S}\right) q_{S}}{2^{\ell_{1}}}+\frac{1}{2^{\ell}} \end{aligned}\)

해쉬 함수 H, h에게 질의하는 수를 각각 qH, qh라 하고 서명 오라클에게 질의하는 수를 qS 라고 하자. 또한 te는 지수 승 계산 비용이다.

증명. Π = (Gen,Sign,Vrfy)를 위에서 기술된 서명 알고리즘이라 하고, A는 서명 알고리즘을 공격하는 다항식 시간 공격자라 하자. A를 이용하여 RSA 문제를 푸는 알고리즘 B를 구성한다. B는 RSA 문제의 입력값으로 (N, e, y)를 받는다. 여기서 B의 목적은 xe = y (modN) 를 만족하는 y1/e (modN) 을 계산하는 것이다. 여기서 N은 알려지지 않은 두 강한 소수 p, q에 대해서, N = pq이다. 또한 서로 다른 소수 p1, q1에 대해서 p = 2p1 + 1, q = 2q1 + 1 이다.

먼저 B는 ZN에서 임의의 원소 g1을 선택한 후, \(g_{2}=y g_{1}^{e}(\bmod N)\)을 구한다. 만일 g2\(Z_{N}^{*}\)에 속하지 않는다면, 즉 g2이 N을 구성하는 소수의 배수라면, B는 N을 소인수 분해할 수 있으므로 주어진 문제를 쉽게 해결할 수 있다. 일반성을 잃지 않고, g2\(g=g_{2}^{2}=y^{2} g_{1}^{2 e}(\bmod N)\)에 속한다고 하자. 다음으로 B는 N을 계산하여 QRN 에 속하는 원소 g를 구한다. 만일 g의 위수가 p1q1이 아니라면, B는 N을 쉽게 소인수 분해할 수 있으므로 주어진 RSA 문제를 해결할 수 있다. 그 이유는 다음과 같다: 강한 소수들의 곱인 N에 대하여 \(Z_{N}^{*}\)에 속한 각 원소들의 위수는 1, 2, p1 , q1 , 2p1 , 2q1 , p1q1 , 2p1q1이 가능하다. 여기서 g는 QRN 에 속하므로 2p1q1은 위수가 될 수 없다. 만일 g의 위수가 p1이라면, CRT를 이용하여 g p1 = 1 (modp) ∧ g1 = 1 (modq) 임을 알 수 있다. 이 경우 q | g - 1이므로, gcd (g - 1, N)을 구하면 소인수 q를 쉽게 구할 수 있다. 반대로 위수가 q1이라면 gcd(g - 1, N) = p 를 계산할 수 있다. 비슷하게 g의 위수가 2p1 , 2q1 , 2의 경우도 B의 소인수분해를 가능하게 한다. 따라서 일반성을 잃지 않고, B가 계산한 g의 위수가 (실제 기법과 동일하게) p1q1이라고 하자.

Setup 단계:

B는 A에게 PK = (N, e, g )를 준다. 여기서 \(g=y^{2} g_{1}^{2 e}(\bmod N)\)이다.

Query 단계:

A는 해쉬 오라클 H와 h, 서명 오라클 Sign에 각각 질의 할 수 있다.

- 해쉬 오라클 H

① H-테이블을 (Ri, wi, ri, H(Ri))의 빈 테이블로 초기화한다.

② A가 H에게 질의의 입력으로 Ri를 준다.

③ B는 wi ∈ {0,1} , \(r_{i} \in Z_{N}^{*}\)를 랜덤하게 뽑아 \(H\left(R_{i}\right)=y^{-2 w_{i}} r_{i}^{e}(\bmod N)\)를 계산해 A에게 준다.

④ H-테이블 (Ri, wi, ri, H(Ri))에 질의에 이용된 변수들을 저장한다.

- 해쉬 오라클 h

① h-테이블을 (Rj||mj , h(Rj||mj ))의 빈 테이블로 초기화한다.

② A가 h에게 질의의 입력으로 Rj||mj를 준다.

③ B는 wj ∈ {0,1}를 랜덤하게 생성해서 h(Rj||mj ) = wj로 정의하고 A에게 준다.

④ h-테이블 (Rj||mj , wj)에 질의에 이용된 변수들을 저장한다.

- 서명 오라클 Sign

① A가 Sign에게 질의의 입력으로 m을 준다.

② B는 R ∈ {0,1}1을 랜덤하게 선택한다.

만약 R이 H-테이블에 존재하면, B는 시뮬레이션을 정지한다. (이 사건을 abt1이라 하자.) 그 이유는 동일한 R에 대해서 항상 H-테이블에서 같은 w를 참조하도록 B가 동작하므로, 서로 다른 메시지 m1 , m2에 대해 h 해쉬값이 h(R||m1 ) = w = h(R||m2 )로 같게 된다. 이는 실제 공격 환경과 시뮬레이션을 구분하는 경우이므로, B는 정상적인 수행을 할 수 없다. 이 사건 abt1이 일어날 확률 Pr[abt1 ]은 전체 {0,1}1중에 같은 R을 뽑을 확률이므로 최대 (qH + qS)qS / 21이다. 이는 총 H-테이블 상의 R값이 H질의와 Sign질의만큼 선택이 되고, 매 서명마다 R값을 선택할 때 발생할 수 있는 충돌가능성의 확률이다.

③ 그렇지 않다면, R이 H-테이블에 존재하지 않으면, 다음 단계를 진행한다. B는 w ∈ {0,1} , \(r \in Z_{N}^{*}\)를 뽑아 H(R) = y- 2w r e (modN) 을 계산한다.

만약 R||m이 h-테이블에 존재하면, B는 정지한다. (이 사건을 abt2이라 하자.) 그 이유는 B가 h(R||m) = w으로 지정하려고 하나, 이미 입력값 R||m이 다른 값으로 지정된 경우이므로 B가 시뮬레이션을 진행할 수 없기 때문이다. 이 사건이 일어날 확률 P[abt2 ]은 최대 (qh + qS)qS / 21이다.이 값도 위에서와 비슷하게 총 h-테이블 상의 R값이 h질의와 Sign질의만큼 선택이 되고, 매 서명마다 R값을 선택할 때 발생할 수 있는 R값의 충돌가능성의 확률이다.

④ 그렇지 않다면, h(R||m) = w로 정의하고, B 는 \(\sigma_{1}=r g_{1}^{2 w}\)을 계산한다. 여기서

\(\begin{aligned} r g_{1}^{2 w} &=\left(y^{-2 w} r^{e} \times\left(y^{2} g_{1}^{2 e}\right)^{w}\right)^{d} \\ &=\left(H(R) g^{w}\right)^{d}(\bmod N) \end{aligned}\)

A에게 m에 대한 서명으로 [σ1 , R]을 준다.

Output 단계:

충분히 질의를 진행한 후 A는 위조 서명으로 메시지 m* 에 대한 서명 \(\sigma^{*}=\left(\sigma_{1}^{*}, R^{*}\right)\)를 B에게 리턴한다. B는 A에게 받은 R*를 이용해 H-테이블을 참조한다. 여기서 R* 에 해당하는 w* , r *를 가져온다. 그리고 h-테이블을 참조하여 h(R*||m* )= w̃인 w̃값을 가져온다. 안전성 모델 정의에 의해 m*는 이전에 서명 질의된 메시지가 아니고, \(H\left(R^{*}\right) g^{h\left(R^{*} \| m^{*}\right)}=\left(\sigma_{1}^{*}\right)^{e}(\bmod N)\)이 성립한다.

- 만약 w*= w̃이면 B는 정지한다. (이 사건을 abt3이라 하자.) 이 경우 gcd(e, 2(w̃- w* ))≠ 1이 되어, B는 정상적인 RSA 문제에 대한 답 yd를계산 할 수 없다. 이 사건이 일어날 확률 Pr[abt3 ] 은 전체 {0,1}중에 하나의 값을 선택한 후 똑같은 값을 고를 확률이므로 최대 Pr[abt3 ] = 1 / 2 이다.

- 그렇지 않고 만약 w* ≠ w̃이라면

\(\begin{aligned} \sigma_{1}^{*} &=\left(H\left(R^{*}\right) g^{\tilde{w}}\right)^{d}(\bmod N) \\ &=\left(y^{-2 w^{*}}\left(r^{*}\right)^{e} \times\left(y^{2} g_{1}^{2 e}\right)^{\tilde{w}}\right)^{d}(\bmod N) \\ &=y^{2 d\left(\tilde{w}-w^{*}\right)} \times r^{*} g_{1}^{2 \tilde{w}}(\bmod N) \end{aligned}\)

여기서 r *와 g1을 알고 있으므로 \(\sigma_{1}^{*} / r^{*} g_{1}^{2 \tilde{w}}=y^{2 d\left(\widetilde{w}-w^{*}\right)}(\bmod N)\)을 계산할 수 있다. 여기서 yd를 구하는 것은 [11]의 아이디어를 이용한다. y = (y d ) e (modN) 이고, 지수값 2(w̃- w* )와 e에 대하여, gcd(e, 2(w̃- w* )) = 1임을 알 수 있다. 서로소인 이유는 - 2l + 1 < 2(w̃- w* ) < 2l + 1이 고, e > 2ℓ + 1가 되도록 소수 e값을 선택했기 때문이다. 서로소이므로 어떤 두 정수 a, b가 존재하여 ea+ b2(w̃- w* ) = 1이다. 따라서 B는 a, b 를 구한 후, 아래의 계산을 통해 yd를 구한다.

\(\begin{aligned} &\left(y^{2 d\left(\widetilde{w}-w^{*}\right)}\right)^{b} \times\left(\left(y^{d}\right)^{e}\right)^{a} \\ &=\left(y^{e a+2 b\left(\widetilde{w}-w^{*}\right)}\right)^{d}=y^{d}(\bmod N) \end{aligned}\)

B는 계산한 결과를 RSA 문제의 답으로 출력한다.

분석: B의 시간 복잡도는 H질의와 서명 질의에 답하는 과정에서 필요한 지수승 연산과 A의 동작시간이다. 따라서 시간복잡도는 쉽게 보일 수 있다.

B가 RSA 문제를 풀 확률은 abt사건 없이 정상적으로 수행된 A가 서명 Π에 공격을 성공할 확률이다. 따라서

\(\begin{aligned} A d v_{\Pi}^{u f}(A)=& \operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1\right] \\ =& \operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge a b t_{1}\right]+\\ & \operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge \overline{a b t_{1}}\right] \end{aligned}\)

여기서 \(\operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge a b t_{1}\right] \leq \operatorname{Pr}\left[a b t_{1}\right]\) 이므로,

\(\begin{aligned} &A d v_{\Pi}^{u f}(A) \leq \operatorname{Pr}\left[a b t_{1}\right]+ \\ &\operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge \overline{a b t_{1}}\right] \end{aligned}\)

가 된다. 비슷한 방법으로 두 사건 abt2와 abt3에 대해서도 전개하면, 아래와 같은 부등식을 얻는다.

\(\begin{aligned} &A d v_{\Pi}^{u f}(A) \\ &\leq \operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right] \\ &\quad+\operatorname{Pr}\left[a b t_{1}\right]+\operatorname{Pr}\left[a b t_{2}\right]+\operatorname{Pr}\left[a b t_{3}\right] \end{aligned}\)       (1)

\(\operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right]\)은 abt 사건들이 발생하지 않았을 경우 공격자 A가 서명위조에 성공할 확률이다. 이 경우 B는 RSA 문제를 풀 수 있으므로

\(\operatorname{Pr}\left[\operatorname{Exp}_{\Pi}^{u f}(A)=1 \wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right]=\epsilon_{B}\)

이다. 또한 \(A d v_{\Pi}^{u f}(A)=\epsilon_{A}^{\circ}\)이고, 위에서 계산했던 abt의 확률들을 위 부등식 (1)에 적용하면 다음과 같다.

\(\epsilon_{A} \leq \epsilon_{B}+\frac{\left(q_{H}+q_{h}+2 q_{S}\right) q_{S}}{2^{l_{1}}}+\frac{1}{2^{l}}\)

IV. On-line/off-line RSA 서명 기법 2

4.1 서명 기법 설계

앞 절의 GenRSA 알고리즘과 동일하게 보안상수 입력 k에 대해서 (N, e, d, g )를 생성한다. 여기서 N은 강한 소수(strong prime) p, q의 곱이고, p = 2p1 + 1, q = 2q1 + 1 이다. 그리고 e는ℓ + 2비트 보다 큰 어떤 소수이다. 즉, e >2ℓ + 2이다. g는 \(Z_{N}^{*}\)의 부분군을 구성하는 위수가 p1q1인 생성원이다.

전자서명 알고리즘 Π = (Gen, Sign,Vrfy) 는 다음과 같이 정의된다.

Gen(k): 보안상수 k을 받아서 GenRSA을 실행해 (N, e, d, g )를 얻는다. 또한 해쉬 함수 H, h를 각각 다음과 같이 정의한다.

\(H:\{0,1\}^{*} \rightarrow Z_{N}^{*}\) , h : {0,1}*→ {0,1}.

PK=(N, e, g, H, h) 와 SK=(d)이다.

Sign(m, d):

① r ∈ {0,1}2을 랜덤하게 선택한다.

② A = ger (modN)을 계산한다.

③ σ1 = H(A)d (modN) 을 계산한다.

④ s = r+ h(σ1||m)d∈{0,1} l2을 계산한다.

⑤ σ = [σ1, s ]∈ZN × {0,1} l2를 출력한다.

Vrfy(PK, m, σ) : 여기서 σ = [σ1, s ]이다.

① A = g es - h (σ1||m ) (modN) 을 계산한다.

② (σ1 ) e = H(A) (modN) 을 확인한다. 만약 같다면 1을, 아니면 0을 출력한다.

정확성: 메시지 m에 대한 서명 σ = [σ1, s ]이 주어지면, ged = g (modN) 사실을 이용하여 다음과 같이 계산된다.

A = ges - h (σ1||m ) = g e (r + h (σ1||m )d) - h (σ1||m ) = ger (modN).

이하의 과정은 쉽게 보일 수 있으므로 생략한다.

4.2 온라인/오프라인 서명생성 과정

서명생성 알고리즘은 온라인/오프라인 과정에서 다음과 같은 계산으로 분리될 수 있다.

오프라인 계산과정: 메시지 m이 입력되기 전에 아래의 계산을 수행한다.

① r ∈ {0,1}2을 랜덤하게 선택한다.

② A = ger (modN)을 계산한다.

③ σ1 = H(A) d (modN) 을 계산한다.

④ token=(r, σ1 )값을 안전하게 저장한다.

온라인 서명생성 과정: 메시지 m이 입력되면, 서명키 SK와 저장된 token을 이용하여 아래의 계산을 수행한다.

① s = r+ h(σ1||m)d∈{0,1} l2을 계산한다.

② σ = [σ1, s ]를 서명값으로 출력한다.

오프라인에서는 한 번의 고정된 밑수에서의 지수 승과 한 번의 지수승이 필요하지만, 온라인 서명과정에서는 해쉬연산, 곱셈 및 덧셈 연산만 수행하면 된다. 여기서 g의 위수 p1q1을 비밀키의 일부로 저장하게 되면, 지수값 er을 모듈러스 p1q1으로 줄여서 계산하는 것이 가능하다. 또한 앞 절의 기법과 마찬가지로 서명키에 p, q를 포함하고, CRT를 이용하여 지수승을 하는 것도 가능하다.

4.3 안전성 증명

정리 1. 만일 RSA 문제가 (tB, εB)-안전하고, 해쉬함수 H, h가 랜덤 오라클로 동작한다면, 위에서 서술된 서명은 선택 메시지 공격에서 (tA, εA, qS) -안전하다. 여기서

\(\begin{aligned} &t_{B} \geq t_{A}+O\left(\left(q_{H}+q_{S}\right) t_{e}\right) \\ &\epsilon_{A} \leq \epsilon_{B}+\frac{\left(q_{H}+q_{h}+q_{S}\right) q_{S}}{p_{1} q_{1}}+\frac{1}{2^{\ell}} \end{aligned}\)

해쉬 함수 H, h에게 질의하는 수를 각각 qH, qh라 하고 서명 오라클에게 질의하는 수를 qS 라고 하자. 또한 te는 지수 승 계산 비용이다. p1q1은 QRN의 그룹 위수이다.

증명. Π = (Gen,Sign,Vrfy)를 위에서 기술된 서명 알고리즘이라 하고, A는 서명 알고리즘을 공격하는 다항식 시간 공격자라 하자. A를 이용하여 RSA 문제를 푸는 알고리즘 B를 구성한다. B는 RSA 문제의 입력값으로 (N, e, y)를 받는다. 여기서 B의 목적은 xe = y (modN) 를 만족하는 y1/e (modN) 을 계산하는 것이다. 여기서 N은 알려지지 않은 두 강한 소수 p, q에 대해서, N = pq이다. 또한 서로 다른 소수 p1, q1에 대해서 p = 2p1 + 1, q = 2q1 + 1 이다.

정리 1의 증명과 비슷하게 B는 ZN에서 임의의 원소 g1을 선택한 후, \(g=g_{1}^{2}(\bmod N)\)을 계산하여 QRN 에 속하는 원소 g를 구한다. 일반성을 잃지 않고, B가 계산한 g의 위수가 (실제 기법과 동일하게) p1q1이라고 하자.

Setup 단계:

B는 A에게 PK = (N, e, g )를 준다. 여기서 \(g=g_{1}^{2}(\bmod N)\)이다.

Query 단계:

A는 해쉬 오라클 H와 h, 서명 오라클 Sign에 각각 질의할 수 있다.

- 해쉬 오라클 H

① H-테이블을 (Ai, ti, H(Ai))로 초기화한다.

② 공격자 A가 H에게 A i ∈Z N를 준다.

③ B는 \(t_{i} \in Z_{N}^{*}\)를 랜덤하게 뽑아 \(H\left(A_{i}\right)=y t_{i}^{e}(\bmod N)\)를 계산해 A에게 준다.

④ H-테이블 (Ai, ti, H(Ai))에 질의에 이용된 변수들을 저장한다.

- 해쉬 오라클 h

① h-테이블을 (Rj||mj , h(Rj||mj))의 빈 테이블로 초기화한다.

② A가 h에게 질의의 입력으로 Rj||mj를 준다.

③ B는 wj ∈ {0,1}를 랜덤하게 생성해서 h(Rj||mj ) = wj로 정의하고 wj를 A에게 준다.

④ h-테이블 (Rj||mj , wj)에 질의에 이용된 변수 들을 저장한다.

- 서명 오라클 Sign

① A가 Sign에게 질의의 입력으로 m을 준다.

② B는 r ∈ {0,1}2와 w∈{0,1}l 을 랜덤하게 선택한다. 다음 Ã= ger - w (modN)을 계산한다. 이 경우 B가 모르는 d에 대해서 ged = g (modN)이므로, r̃= r- wd이고 Ã= ger̃ 임을 상기하자.

만약 Ã값이 H-테이블 상에 존재하면, B는 시뮬레이션을 정지한다. (이 사건을 abt1이라 하자.) 그 이유는 동일한 Ã에 대해서 항상 H-테이블에서 같은 (y가 포함된) H( Ã)를 참조하도록 B가 동작하므로, 이 경우 B가 서명질의에 답할 수 없기 때문이다. 이 사건 abt1이 일어날 확률 Pr[abt1 ]은 g 의 위수 p1q1중에 같은 위수를 뽑을 확률이므로, 최대 (qH + qS)qS / p1q1이다. 이는 총 H-테이블 상의 Ai값이 H질의와 Sign질의만큼 선택이 되고, 매 서명마다 Ai값을 선택할 때 발생할 수 있는 충돌 가능성의 확률이다.

③ 그렇지 않다면, Ã이 H-테이블에 존재하지 않으면, B는 \(t \in Z_{N}^{*}\)를 랜덤하게 뽑고, H( Ã) = te (mod N)를 계산한다. H-테이블에 ( Ã, t, H( Ã)) 및 관련된 (r, w)를 저장한다.

④ B는 σ1 = t로 설정한다. 이 값이 정상적인 것은 아래 식 σ1 = H(Ã )d = (te)d = t로 확인된다.

⑤ B는 h(σ1||m) = w로 정의한다. 만일 σ1||m 이 h-테이블에 존재하면, B는 정지한다. (이 사건을 abt2이라 하자.) 그 이유는 B가 h(σ1||m) = w으로 지정하려고 하나, 이미 입력값 σ1||m이 다른 값으로 지정된 경우이므로 B가 시뮬레이션을 진행할 수 없기 때문이다. 이 사건이 일어날 확률 Pr[abt2 ]은 최대 (qh + qS)qS / p1q1이다. 이 값도 위에서와 비슷하게 총 h-테이블 상의 σ1값이 h 질의와 Sign질의만큼 선택이 되고, 매 서명마다 σ1값을 선택할 때 발생할 수 있는 σ1값의 충돌가능성의 확률이다.

⑥ 그렇지 않다면, h(σ1||m) = w로 정의하고, h -테이블에 (σ1||m, w)를 저장한다. 다음 B는 s = r로 설정한다. 여기서 r̃= r- wd로 설정되었으므로, s = r̃+ h(σ1||m)d = r- wd+ wd = r이 되므로 정당성을 확인할 수 있다. 최종적으로 A에게 m에 대한 서명으로 [σ1, s ]을 준다.

Output 단계:

충분히 질의를 진행한 후 A는 위조 서명으로 메시지 m* 에 대한 서명 \(\sigma^{*}=\left(\sigma_{1}^{*}, t^{*}\right)\)를 B에게 리턴 한다. B는 A* = g e s * - h (σ1*||m* ) (modN)를 계산한다. B는 H-테이블을 참조하여 (A* , t * , H(A* ))을 구한다.

① 만일 A*값이 공격자에 의해 질의된 입력값이면, H(A* ) = yte 이 되고, 정상적인 검증을 통과하므로 \(\sigma^{*}=\left(\sigma_{1}^{*}, t^{*}\right)\)이다. 따라서 \(\sigma_{1}^{*}=y^{d} t\)이므로 B는 \(\sigma_{1}^{*} / t\)로 yd를 구할 수 있다.

② 만일 A*값이 B에 의해 (서명응답 도중에) 생성된 입력값이면, H(A* ) = te이 된다. 이 경우 A*값을 구성하는 지수값을 B는 (간접적으로) 알고 있으므로, 이 지수값을 er̃= e (r * - w* d)라 하고, (r* , w* )을 안다고 하자. 정상적인 서명 검증식에 의해 \(A^{*}=g^{e s^{*}-h\left(\sigma_{1}^{*} \| m^{*}\right)}(\bmod N)\) 이므로 아래의 식이 성립한다.

\(e\left(r^{*}-w^{*} d\right)=e s^{*}-h\left(\sigma_{1}^{*} \| m^{*}\right)\left(\bmod p_{1} q_{1}\right)\)       (2)

여기서 Φ(N) = 4p1q1이므로 ed = 1 (modΦ(N))식을 만족하는 e의 역원 d는 ed = 1 (mod p1q1 )에서도 역원이다. 따라서 위 식 (2)에 d를 곱해주면

\(\begin{aligned} &r^{*}-w^{*} d=s^{*}-h\left(\sigma_{1}^{*} \| m^{*}\right) d\left(\bmod p_{1} q_{1}\right), \\ &\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) d=s^{*}-r^{*}\left(\bmod p_{1} q_{1}\right), \\ &s^{*}-r^{*}=\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) d+k p_{1} q_{1} \end{aligned}\)       (3)

이 된다. 여기서 k는 임의의 정수이다. 위 식(3)의 양변에 4를 곱해서 y의 지수로 올리면 \(y^{4\left(s^{*}-r^{*}\right)}=y^{4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) d} y^{k 4 p_{1} q_{1}}(\bmod N)\)이고, 4p1q1 = Φ(N)이므로 y 4p1q1k = 1 (modN) 이 되어 \(y^{4\left(s^{*}-r^{*}\right)}=y^{4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) d}(\bmod N)\)의 값을 구할 수 있다.

③ 만일 \(h\left(\sigma_{1}^{*} \| m^{*}\right)=w^{*}\)이면 B는 정지한다. (이 사건을 abt3이라 하자.) 이 경우 B는 정상적인 RSA 문제에 대한 답 yd를 계산할 수 없다. 이 사건이 일어날 확률 Pr[abt3 ]은 전체 {0,1}중에 하나의 값을 선택한 후 똑같은 값을 고를 확률이므로 최대 Pr[abt3 ] = 1 / 2 이다.

④ 그렇지 않고 만약 \(h\left(\sigma_{1}^{*} \| m^{*}\right) \neq w^{*}\)라면, 정리 1처럼, B는 \(\operatorname{gcd}\left(e, 4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right)\right)=1\)이므로 \(e a+b 4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right)=1\)를 만족하는 두 정수 a, b를 구하고, a, b를 이용하여 아래의 계산으로 yd를 구한다.

\(\begin{aligned} &\left(\left(y^{d}\right)^{e}\right)^{a}\left(y^{4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) d}\right)^{b} \\ &=\left(y^{d}\right)^{e a+4\left(h\left(\sigma_{1}^{*} \| m^{*}\right)-w^{*}\right) b}=y^{d}(\bmod N) \end{aligned}\)

B는 계산한 결과를 RSA 문제의 답으로 출력한다.

분석: B의 시간 복잡도는 H질의와 서명 질의에 답하는 과정에서 필요한 지수승 연산과 A의 동작시간이다. 따라서 시간복잡도는 쉽게 보일 수 있다.

B가 RSA 문제를 풀 확률은 abt사건 없이 정상적으로 수행된 A가 서명 Π에 공격을 성공할 확률이다. 따라서 정리 1에서와 같이

\(\begin{aligned} &\begin{aligned} A d v_{\Pi}^{u f}(A) & \\ \leq \operatorname{Pr}\left[\operatorname{Exp}_{\Pi I}^{u f}(A)=1\right.&\left.\wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right] \\ +& \operatorname{Pr}\left[a b t_{1}\right]+\operatorname{Pr}\left[a b t_{2}\right]+\operatorname{Pr}\left[a b t_{3}\right] . \end{aligned} \end{aligned}\)       (4)

\(\operatorname{Pr}\left[\operatorname{Exp}_{\Pi I}^{u f}(A)=1 \wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right]\)은 abt 사건들이 발생하지 않았을 경우 공격자 A가 서명위조에 성공할 확률이다. 이 경우 B는 RSA 문제를 풀 수 있으므로

\(\operatorname{Pr}\left[\operatorname{Exp}_{I I}^{u f}(A)=1 \wedge \overline{a b t_{1}} \wedge \overline{a b t_{2}} \wedge \overline{a b t_{3}}\right]=\epsilon_{B}\)

이다. 또한 \(A d v_{\Pi}^{u f}(A)=\epsilon_{A}\)이고, 위에서 계산했던 abt의 확률들을 위 부등식 (4)에 적용하면 다음과 같다.

\(\epsilon_{A} \leq \epsilon_{B}+\frac{\left(q_{H}+q_{h}+2 q_{S}\right) q_{S}}{p_{1} q_{1}}+\frac{1}{2^{l}}\)

V. RSA 서명 기법들과의 비교

Table 1에서는 기존 RSA 기반 서명 기법들, RSA-FDH[6], RSA-PSS[7]과 본 논문에서 제안된 기법들 사이의 안전성 및 효율성 비교를 한다.

Table 1. Comparison between previous RSA-based signatures and our proposed ones

E: general exponentiation; Ee : exponentiation with RSA exponent e ; qh : the number of hash queries; Ef: fixed-base exponentiation; l1 : bit size of randomness in our 1st construction; l2 (≈ logN + lh ): bit size of randomness in our 2nd construction for hash output size lh .

먼저 안전성 측면에서 RSA-FDH는 증명과정에서 RSA 문제에 효율적으로 환원관계가 성립하지 않고, O(qh )정도의 안전성 손실(Security loss)이 발생한다. 여기서 qh는 공격자가 해쉬함수에 질의하는 오라클의 개수이다. 이에 비해 RSA-PSS 및 제안기법 1과 2는 모두 RSA 문제와 동등한 환원관계로 증명이 된다. 따라서 대략 qh = 240라 하고 서명 기법이 128비트의 안전성을 추구한다면, RSA-FDH는 나머지 기법들에 비해 약 40비트의 보안상수가 증가된, 즉, 168(=128+40)비트 보안상수에서 GenRSA 알고리즘을 동작시켜야 한다.

효율성 측면에서 제안기법 1과 2는 RSA-FDH와 RSA-PSS에 비해 서명길이와 검증비용 측면에서 다소 비효율적이다. 그러나 RSA-FDH와 RSA-PSS는 온라인/오프라인 서명 구조를 지원하지 않아서, 매 서명시마다 온라인 서명만 할 수 있다. 이에 비해 제안기법 1은 오프라인에서 지수승한 번을 수행하고, 온라인에서는 고정된 밑수에서의지수승 한번만으로 서명이 가능하다. 일반적으로 고정된 밑수에서의 지수승은 일반적인 지수승보다 약 4배 빠르므로 제안기법 1은 온라인/오프라인 서명을 하는 경우 기존 RSA-FDH나 RSA-PSS에 비해약 4배 빠른 온라인 서명이 가능하다. 제안기법 2는 아예 온라인 서명생성에 필요한 연산을 거의 모두 오프라인으로 사전에 수행하는 것이 가능하다. 이 경우 한 번의 지수승과 고정된 밑수 지수승을 한 번씩 오프라인에서 사전 계산해 놓으면, 온라인상의 특정 메시지에 대한 서명은 거의 공짜로 할 수 있다.

VI. 결론

본 논문에서 제안하는 기법들은 다음의 두 가지 측면에서 의미를 가진다. 첫째, 안전성 증명 측면에서 RSA 문제에 안전성 손실 없이 환원됨을 보인 것이다. 이론적인 관점에서는 기존의 RSA-FDH 또는 RSA-PSS 기법이 아닌 새로운 접근방법으로 해결했다는 것이 의미가 있고, 실용적인 측면에서는 서명 기법 구현 시 보안상수를 더 크게 하여 안전성 손실을 보정할 필요가 없다는 것이다. 즉, 서명기법이 128비트의 안전성을 추구한다면 128비트 정도로 RSA 문제가 안전한 키를 설정하게 된다. 둘째, 안전성 손실 없이도 온라인/오프라인 서명이 가능하다는 것이다. 이는 오프라인 단계에서 부담되는 연산을 미리 수행하고 다수의 서명응답 요청이 많아질 수 있는 온라인 서버 환경에 적합하다.

* 본 연구는 2017년도 상명대학교 교내연구비를 지원받아 수행하였음.

References

  1. S. Even, O. Goldreich, and S. Micali, "On-line/off-line digital signatures," CRYPTO'89, LNCS vol. 435, pp. 263-275, Aug. 1989
  2. H. Krawczyk and H. Wee, "The OPTLS Protocol and TLS 1.3," IEEE EuroS&P'16, pp. 81-96, Mar. 2016
  3. H. Krawczyk, K. G. Paterson, and H. Wee, "On the security of the TLS Protocol: a systematic analysis," CRYPTO'13, LNCS vol. 8042, pp. 429-448, Aug. 2013
  4. M. Bellare and T. Ristov, "A characterization of chameleon hash functions and new, efficient designs," Journal of Cryptology, vol. 27, pp. 799-823, Oct. 2014 https://doi.org/10.1007/s00145-013-9155-8
  5. A. Shamir and Y. Tauman, "Improved on-line/off-line signature schemes," CRYPTO'01, LNCS vol. 2139, pp. 355-367. Aug. 2001
  6. M. Bellare and P. Rogaway, "Random oracles are practical: a paradigm for designing efficient protocols," ACM-CCS'93, pp. 62-73. Nov. 1993
  7. M. Bellare and P. Rogaway, "The exact security of digital signature-how to sign with RSA and Rabin," Eurocrypt'96, LNCS vol. 1070, pp. 399-416. May. 1996
  8. M. Joye, "An efficient on-line/off-line signature scheme without random oracles," CANS'08, LNCS vol. 5339, pp. 98-107. Dec. 2008
  9. S. Goldwasser, S. Micali, and R. Rivest, "A digital signature scheme secure against adaptive chosen message attacks," SIAM Journal of Computing, vol. 17(2), pp. 281-308, Apr. 1988 https://doi.org/10.1137/0217017
  10. X. Boyen, "A tapestry of identity based encryption: practical frameworks compared", International Journal of Applied Cryptography, vol. 1(1), pp. 3-21, Feb. 2008 https://doi.org/10.1504/IJACT.2008.017047
  11. M. Bellare, C. Namprempre, and G. Neven, "Security proofs for identity-based identification and signature schemes," Journal of Cryptology, vol. 22(1), pp. 1-61, Jan. 2009 https://doi.org/10.1007/s00145-008-9028-8