Asymmetric Padding
RSA OAEP(인코딩/디코딩) 및 RSA PSS(인코딩) 패딩 방식 (PKCS#1 v2.2 / RFC 8017)
개요
PKCS#1 v2.2(RFC 8017) 표준에 따른 비대칭키 RSA 패딩 변환인 EME-OAEP 인코딩/디코딩과 EMSA-PSS 인코딩을 모듈러 거듭제곱($m^e \bmod n$)과 분리하여 단독으로 수행한다.
내부 마스크 생성 함수(MGF1)와 DB 마스킹 결과를 바이트 단위로 직접 검사하거나 결정론적 Seed/Salt를 주입해 NIST/RFC 테스트 벡터를 검증할 때 사용한다. 자세한 알고리즘 구조는 패딩 스킴 — RSA 비대칭키 패딩을 참고한다.
사용 시점
- RSA-OAEP의
maskedSeed와maskedDB구조($0x00 \parallel \text{maskedSeed} \parallel \text{maskedDB}$)를 생성·역변환하며 학습하거나 테스트 벡터를 검증할 때 사용한다. - RSA-PSS 서명용 인코딩 블록($\text{maskedDB} \parallel H \parallel 0xbc$)을 명시적 솔트(Salt)와 함께 생성할 때 사용한다.
파라미터 설정
| 파라미터 (ID) | 타입 및 기본값 | 노출 조건 | 설명 및 옵션 |
|---|---|---|---|
방식scheme |
select기본값: OAEP-Encode |
항상 노출 | 이 노드의 방식 설정을 지정한다.
|
모듈러스 / 목표 길이 (바이트)targetLength |
select기본값: 256 |
항상 노출 | 이 노드의 모듈러스 / 목표 길이 (바이트) 설정을 지정한다.
|
PSS 솔트 길이 (바이트)saltLength |
number기본값: 32 |
scheme가 PSS-Encode 일 때 |
PSS_ENCODE에서 Salt (PSS) 포트가 연결되지 않았을 때 무작위로 생성할 솔트 바이트 길이(기본 32바이트)이다. |
오류 단일화errorUnify |
boolean기본값: false |
항상 노출 | 활성화하면 내장 오류를 지정한 단일 오류 코드·메시지로 대체한다. |
단일화 오류 코드errorUnifyCode |
text기본값: "" (비움) |
errorUnify가 true 일 때 |
오류 통합 활성화 시 사용할 오류 코드이다. |
단일화 오류 메시지errorUnifyMessage |
text기본값: "" (비움) |
errorUnify가 true 일 때 |
오류 통합 활성화 시 사용할 오류 메시지이다. |
포트 입출력 명세
포트 연결 규칙, 데이터 타입별 색상, 가변 포트 생성 방식은 포트 및 연결 문서를 참고한다.
입력 포트
포트 성격: 고정 입력 포트 (총 5개; 조건부 노출 포트는 아래 표와 같이 파라미터 설정에 따라 전환됨).
| 포트 이름 | 포트 ID | 데이터 타입 | 필수 여부 | 노출 조건 | 설명 |
|---|---|---|---|---|---|
Message |
message |
Bytes |
필수 | scheme가 OAEP-Encode 일 때 |
RSA-OAEP로 인코딩할 메시지. |
Encoded Message |
em |
Bytes |
필수 | scheme가 OAEP-Decode 일 때 |
RSA-OAEP로 패딩을 제거할 인코딩된 메시지(EM). |
Message Hash |
mHash |
Bytes |
필수 | scheme가 PSS-Encode 일 때 |
RSA-PSS로 인코딩할 메시지의 SHA-256 해시. |
OAEP Label |
label |
Bytes |
선택 | scheme가 OAEP-Encode 또는 OAEP-Decode 일 때 |
OAEP_ENCODE 및 OAEP_DECODE에서 사용하는 선택적 OAEP 레이블 $L$(연결하지 않으면 빈 바이트열)이다. |
PSS Salt |
salt |
Bytes |
선택 | scheme가 PSS-Encode 일 때 |
PSS_ENCODE 전용 선택적 결정론적 솔트(saltLength바이트). 연결하지 않으면 무작위 솔트를 생성한다. |
출력 포트
포트 성격: 고정 출력 포트 (총 1개).
| 포트 이름 | 포트 ID | 데이터 타입 | 노출 조건 | 설명 |
|---|---|---|---|---|
Result |
result |
Bytes |
항상 노출 |
오류 케이스
실행 중 아래 조건이 발생하면 이 노드는 ERROR 상태가 되며, 출력 포트에 연결된 하위 노드는 실행되지 않는다. 오류 통합(errorUnify)을 활성화하면 아래의 모든 오류 코드가 사용자가 지정한 단일 오류 코드와 메시지로 대체된다.
| 오류 코드 | 기본 엔진 메시지 | 발생 조건 |
|---|---|---|
OAEP_MESSAGE_TOO_LONG |
OAEP로 인코딩하기에 메시지가 너무 길다 | OAEP_ENCODE에서 입력 메시지 길이가 최대 허용 크기($k - 2 \times hLen - 2$바이트)를 초과하거나, 연결된 Seed 길이가 $hLen$과 다를 때 발생한다. |
INVALID_OAEP_PADDING |
OAEP 패딩이 올바르지 않는다 | OAEP_DECODE에서 입력 블록 길이가 $k$바이트가 아니거나 선두 0x00 바이트, lHash', 또는 0x01 구분자 검증에 실패했을 때 발생한다. |
INVALID_PSS_PARAMS |
PSS 파라미터가 올바르지 않는다(메시지 해시 32바이트, 솔트는 Salt Length와 같은 길이, 대상 길이는 해시·솔트보다 길어야 함) | PSS_ENCODE에서 입력 메시지 해시가 32바이트가 아니거나, 연결된 Salt 길이가 saltLength와 다르거나, 모듈러스 크기가 해시+솔트보다 작을 때 발생한다. |
활용 예시
2048비트 RSA-OAEP 인코딩 후 다시 디코딩하기
평문을 256바이트 OAEP 블록으로 만든 뒤 역변환하여 원본이 나오는 것을 확인한다.
- 첫 번째 Asymmetric Padding을
OAEP_ENCODE(2048비트,SHA-256)로 설정하고 평문을 연결해 256바이트 블록을 얻는다. - 두 번째 Asymmetric Padding을
OAEP_DECODE(2048비트,SHA-256)로 설정하고 첫 노드의 출력을 연결하면 원본 평문이 복원된다.