상세 컨텐츠

본문 제목

Digital Signatures

정보보호이론

by 후추리 2025. 6. 13. 21:04

본문

1. Digital Signatures

- 메세지 인증과 무결성(Integrity)를 보장

- 암호화가 목적은 아님

- Bob이 자신의 비밀키로 서명한 메세지를 Alice한테 보내면

- Alice는 Bob의 공개키로 서명을 검증

- Bob의 비밀 키를 모른다면 누구도 서명할 수 없어야 함

 

- KeyGen(λ) → (pk, sk) : 입력은 보안 수준 λ, 출력은 pk와 sk

- Sign(sk, M) → σ : 입력은 sk와 메세지 M, 출력은 서명 σ. 즉 이 서명은 비밀키 소유자만 만들 수 있음

- Verify(pk, M, σ) → 1 or 0 : 1이면 서명이 유효, 0이면 서명이 틀리거나 위조됨

- Correctness : Verify(pk,M,Sign(sk,M)) = 1

 

 

2. Security Model for Digital Signatures

- 디지털 서명이 실제로 공격자에게 얼마나 안전한지 평가하기 위해 사용하는 가상의 게임 시나리오

  1) Setup 단계: Challenger C가 키 생성 실행. KeyGen(λ) → (pk,sk)

      공개키 pk를 공격자 A에게 제공

  2) Signing Queries: 공격자 A는 원하는만큼 메세지 를 지정해 서명 요청

      C는 해당 메시지에 대한 서명 σi = Sign(sk,Mi)를 만들어 반환

  3) Output: 공격자는 자신이 만든 위조 서명 (M,σ)를 제출함

 

- 공격 성공 조건 : Verify(pk,M,σ) = 1이면서 M은 이전에 받은 메세지이면 안됨

- 공격자의 성공 확률이 보안 파라미터 λ에 대해 무시할 만큼 작아야 안전

- 즉, 어떤 공격자 A도 성공 확률이 거의 0에 수렴하면 adaptive chosen message attack에 안전

 

 

3. RSA Signatures

- 원래 암호화 알고리즘이지만 디지털 서명으로도 사용 가능

 

- Key Generation : 

  1) 큰 소수 p, q 선택 → N=pq

  2) 계산

  3) 공개 지수   선택

  4) 계산: de ≡ 1 mod φ(N)

  5) 결과: 공개키 pk = (N,e), 비밀키 sk = d

 

- 서명(Sign)과 검증(Verify) :

  1) 메세지 M에 대해 s = M^d (modN), 결과: σ = (M,s)

  2) 받은 서명 (M,s)에 대해 s^e = M modN 이 성립하는지 확인

  3) 성립하면 유효한 서명(1), 아니면 거부(0)

 

- Existential Forgery Attack : 공격자가 비밀키 없이도 유효한 서명을 만들어낼 수 있음

  1) 공격자가 임의의 값 sZN 를 선택

  2) 계산

  3) 서명 σ = (M,s) 출력

  4) 검증해보면 se = M (modN) 검증 통과!

 

 

4. PSS 패딩

- RSA의 Existential Forgery 공격을 막기 위한 강력한 서명 포맷

- 서명 메세지에 salt값을 넣어 임의의 s에 대응되는 메세지를 찾기 불가능하게 만듬

  1) 랜덤 salt값 생성 -> 확률적 요소

  2) 정해진 padding에 Hash(M)과 salt를 뒤에 붙여 새로운 메세지 M' 생성

  3) H = Hash(M) 계산

  4) PS(0으로 채워짐)와 0x01, salt를 붙여 DB를 만듬

  5) MGF(H) 계산

  6) MGF(H) ⊕ DB를 계산해 maskedDB를 얻음

  7) EM = maskedDB || H || TF(고정값)이 실제로 RSA로 서명할 대상 데이터

  8) s = (EM)^d mod N

 

- Verify :

  1) s^e = EM modN 계산

  2) EM을 maskedDB, H, TF로 나눈 후 TF가 올바른지 확인

  3) DB = MGF(H) ⊕ masedDB를 계산

  4) DB에서 PS, 0x01, salt를 구한 후, PS와 0x01이 올바른지 확인

  5) mHash = Hash(M)을 계산하고, M' = 80x00 || mHash || salt로 세팅

  6) H = Hash(M')인지 확인한다. 성립하면 1, 아니면 0 출력

 

 

5. ElGamal Signatures

- Key Generation :

  1) 큰 소수 p 선택

  2) 의 생성자 g 선택

  3) 비밀키 x∈{2,…,p−2} 선택

  4) 공개키 X= g^x (mod p)

  5) 공개키: (p,g,X), 비밀키 x

 

- Sign(주어진 메세지 M에 대해) :

  1)  랜덤 선택

  2) r = g^k mod p

  3) s = (M rx)k^1 mod(p1)

  4) 서명 결과: σ = (M, r, s)

 

- Verify(받은 서명과 공개키로) :

  1) t = X^rr^s mod p

  2) t = g^M mod p가 맞는지 확인

 

- Existential Forgery Attack : 공격자가 비밀키 없이도 유효한 서명을 만들어낼 수 있음

  1) 임의의 정수 i,j 선택 (단, gcd⁡(j, p−1) = 1)

  2) r = g^i⋅X^j  mod p

  3) s = rj^1 mod(p1)

  4) M = si mod(p1)

  5) 서명 결과: σ = (M,r,s)

 

- 보안 강화 방법 : 원본 메시지 M 대신 H(M)에 서명

 

 

6. DSA Signatures

- Parameter Generation : 

  1) Select a 2λ-bit prime

 

 

 

 

'정보보호이론' 카테고리의 다른 글

RSA Encryption  (0) 2025.06.15
Elliptic Curve Cryptography  (0) 2025.06.14
Diffie-Hellman Key Exchange  (0) 2025.06.11
Discrete Logarithm Problem  (0) 2025.06.11
Symmetric Encryption(2)  (0) 2025.04.21

관련글 더보기