RSA Padding: PSS 서명 생성 절차
RSA의 서명에 사용되는 PSS (Probabilistic Signature Scheme) 에 대해 알아보자
이 방식은 단순한 RSA 서명에서 발생할 수 있는 여러 보안 문제(예: 메시지 위조)를 방지하기 위해 도입된 안전한 서명 패딩 방식입니다.
🔐 왜 PSS가 필요한가요?
기존 RSA 서명 방식은 구조가 너무 단순해서 특정 구조를 조작하거나, 서명을 위조할 수 있는 공격에 취약했어요. 이를 방지하기 위해 메시지를 무작위 요소(salt)와 함께 복잡하게 가공하는 방식이 필요했는데, 그것이 바로 PSS입니다.
RSA 서명의 보안
- 소인수분해 문제가 어렵다면, d를 복원하는 것은 매우 어려움.
- 그러나 다음과 같은 존재 위조 공격(existential forgery attack)이 가능함:
- 서명 s ∈ Z_N을 무작위로 선택
- M = s^e mod N 계산
- 서명 쌍 σ = (M, s) 출력
⇒ 검증 결과: s^e = M (mod N) 이므로, 유효한 서명처럼 보임
✅ PSS 서명 생성 절차 상세 설명
💡 전제 조건
- M: 서명할 메시지
- Hash: 해시 함수 (예: SHA-256)
- salt: 임의로 생성된 값 (랜덤 바이트)
- MGF: Mask Generation Function, 일반적으로 MGF1 사용 (주로 Hash 기반)
- EM: 최종 인코딩된 메시지 (EM은 mod N 연산 전 단계에서 사용하는 값)
📜 1단계. salt 생성
- salt는 무작위 바이트 문자열입니다.
- 매번 다른 값을 생성함으로써 동일한 메시지라도 서명이 매번 다르게 나오게 만듭니다.
📜 2단계. M′ 구성
M′ = 0x00 00 00 00 00 00 00 00 ∥ mHash ∥ salt
- 8바이트의 0x00으로 구성된 고정 패딩
- mHash = Hash(M): 메시지를 해시한 값
- salt: 위에서 생성한 랜덤 값
이 M′은 중간 해싱을 위한 구조입니다.
📜 3단계. H 계산
H = Hash(M′)
- 위에서 만든 M′ 전체를 해싱합니다.
- 이것이 나중에 마스크 생성을 위한 기반이 됩니다.
📜 4단계. DB 구성
DB = PS ∥ 0x01 ∥ salt
- PS: 고정된 길이의 0x00으로 구성된 패딩 (길이는 전체 길이에 따라 다름)
- 0x01: 구분자
- salt: 랜덤값 (동일한 salt 사용)
이 DB는 결국 마스킹 대상이 됩니다.
📜 5단계. 마스크 생성
mask = MGF(H, len(DB))
- MGF(H)는 H를 기반으로 DB와 같은 길이의 바이트 스트림을 생성하는 함수입니다.
- 보통 MGF1을 사용하며, 내부적으로는 반복 해시로 생성합니다.
📜 6단계. 마스킹 수행
maskedDB = DB ⊕ mask
- 생성된 마스크를 DB에 XOR 연산해서 maskedDB를 생성합니다.
- 즉, DB 내용이 외부에서 바로 보이지 않게 숨겨줍니다.
📜 7단계. 최종 인코딩 메시지 EM 구성
EM = maskedDB ∥ H ∥ TF
- TF는 트레일링 비트 (예: 0xbc 등 고정값), 전체 길이 조정을 위한 것입니다.
- 이 EM을 RSA의 mod N 연산에 사용하여 최종 서명값을 만듭니다.
🔁 서명 검증 시는 어떻게 하나요?
- 공개키로 서명값을 RSA 복호화합니다. (즉, EM 획득)
- EM을 위 순서의 역순으로 분석합니다:
- maskedDB와 H를 분리
- H로 MGF 실행 → 마스크 생성 → DB 복원
- salt 추출 → 다시 M′ 구성 → H′ = Hash(M′)와 H 비교
→ 같으면 서명 유효, 다르면 위조
📌 PSS의 장점
특징 설명
무작위성 도입 | 동일한 메시지라도 서명이 매번 달라짐 |
구조적 안전성 | 단순 구조 서명의 공격(예: 포장 공격) 방지 |
암호학적으로 증명된 안전성 | 보안 증명이 존재하는 padding 방식 |
출처
https://de.wikipedia.org/wiki/Probabilistic_Signature_Scheme#
Probabilistic Signature Scheme – Wikipedia
aus Wikipedia, der freien Enzyklopädie Probabilistic Signature Scheme (PSS) oder probabilistisches Signaturverfahren ist ein von Mihir Bellare und Phillip Rogaway entwickeltes kryptographisches Paddingverfahren.[1] Im Zufallsorakelmodell kann mit dem PSS
de.wikipedia.org