N, e, d로 하는 RSA 복호화
구성 요소 N, e, d로 RSA 개인키를 만들고 그 키로 RSA-OAEP 암호문을 복호화한다. 폐기용 시험 키를 쓴다.

개요 및 암호학적 배경
RSA 키는 몇 개의 큰 정수에 지나지 않습니다. 모듈러스 N = p × q와 공개 지수 e가 공개키를 이루고, e · d ≡ 1 (mod λ(N))을 만족하는 개인 지수 d가 개인키를 완성합니다. 교재, 표준, 시험 벡터는 대개 이 세 숫자만 싣지만 암호 라이브러리는 PKCS#8 같은 표준 컨테이너에 담긴 키를 요구합니다.
이 워크플로우는 그 틈을 메웁니다. RSA Key Encoder가 N, e, d에서 두 소인수를 복원하고(NIST SP 800-56B Rev. 2 부록 C), 곱이 N이며 d가 e의 역수가 맞는지 검사한 뒤 PKCS#8 개인키를 만듭니다. 이어서 RSA Decrypt가 RSA-OAEP 패딩(RFC 8017, SHA-256, 빈 레이블)을 벗겨 메시지를 돌려줍니다.
키는 이 예제를 위해 생성했고 다른 곳에 쓰지 않는 폐기용 1024비트 시험 키입니다. 암호문은 NodeCrypto와 독립된 구현인 Node crypto(OpenSSL)로 만들었으므로 결과가 일치하면 전체 연쇄가 맞다는 뜻입니다. 1024비트는 실제 용도로는 너무 작으며, 숫자를 읽을 만한 길이로 유지하려는 것뿐입니다.
파이프라인 배선 구조와 단계별 흐름
- 구성 요소와 암호문 입력(
Workflow Input):N,e,d와Ciphertext를 big-endian 순서의 앞쪽 0 바이트 없는 바이트로 공급합니다. - 키 조립(
RSA Key Encoder):keyType = "Private"이면d입력이 나타납니다. 노드가 p와 q를 계산하고 CRT 값을 구해 PKCS#8 개인키를 출력합니다. - OAEP 복호화(
RSA Decrypt): 그 키와hash = "SHA-256"으로 원래 메시지를 복원합니다. - 결과(
Workflow Output): 복원한 메시지를Plaintext포트로 내보냅니다."RSA from N, e and d"의 ASCII 19바이트입니다.
노드 구성 및 설정
| 노드 | 역할과 주요 매개변수 | 개수 |
|---|---|---|
| Workflow Input | N, e, d, Ciphertext를 공급 | 1 |
| RSA Key Encoder | keyType = "Private"으로 설정 | 1 |
| RSA Decrypt | hash = "SHA-256"으로 설정 | 1 |
| Workflow Output | Plaintext 출력을 수집 | 1 |
입출력 명세 및 시험 벡터 검증
검증 출처: Independent implementation check, Node crypto (OpenSSL RSA-OAEP, SHA-256) on a freshly generated 1024-bit test key (e = 65537) used for nothing else; no published vector
입력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
N | bytes (128 B, 모듈러스) | ea3a35a2d7b5467e45de0eecd49862cf702dfd6bd59ec103d43543f52b78e92af38951f499bff434a3bd7b50b0a58422fc19ae93d39de392c2b8e21bf4684686d3caaed79121917697335afdd7282928b78e75f36cc5d1dcf16126b1e10d8956d51f270739e3670304961a55757edf4b01e5073df545abaf5dab0acee3046c1f |
e | bytes (3 B, 65537) | 010001 |
d | bytes (128 B, 개인 지수) | dae08e629fe47bfd5fd8c465b7bcb70955b10452128b899ec45d0a263efb7c1870ffef9ffd550d256ba59368b1c9da12bf365897377721c4714647b50bcdada862f6114300104514fe1cb76c514615082218f68c9726a929547f37fc40fa630032c5eb2c6e95b49ddb98ffdb794b3ba8981654314aee0bf7ee79bb3bc71b4a71 |
Ciphertext | bytes (128 B, SHA-256 RSA-OAEP) | 358db60d0905e619e75119df0bd4603287a65543cb40535d2d44605e2466b36dafd2a5927c72f6dafc1fdcb9f60115340c64b788a5f8203ecb080957bf420b4b40c4e5de4861809cb42b05a1091ea711a650d4239f2faf0684cbeb8c80c9a395f87cc80334310e438e1c465cae5a5fbdc451a20ee68a322e49796198f0088577 |
기대 출력
| 이름 | 타입 | 값 (Hex) |
|---|---|---|
Plaintext | bytes (19 B, ASCII "RSA from N, e and d") | 5253412066726f6d204e2c206520616e642064 |