비대칭키 · RSA-OAEP PKCS#8 / RFC 8017 OpenSSL로 교차 검증됨

N, e, d로 하는 RSA 복호화

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

앱에서 열기 .ncw 내려받기

N, e, d로 하는 RSA 복호화

개요 및 암호학적 배경

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) ──► RSA Key Encoder (keyType = Private) ──► RSA Decrypt (SHA-256) ──► Workflow Output (Plaintext)
  1. 구성 요소와 암호문 입력(Workflow Input): N, e, d와 Ciphertext를 big-endian 순서의 앞쪽 0 바이트 없는 바이트로 공급합니다.
  2. 키 조립(RSA Key Encoder): keyType = "Private"이면 d 입력이 나타납니다. 노드가 p와 q를 계산하고 CRT 값을 구해 PKCS#8 개인키를 출력합니다.
  3. OAEP 복호화(RSA Decrypt): 그 키와 hash = "SHA-256"으로 원래 메시지를 복원합니다.
  4. 결과(Workflow Output): 복원한 메시지를 Plaintext 포트로 내보냅니다. "RSA from N, e and d"의 ASCII 19바이트입니다.

노드 구성 및 설정

노드역할과 주요 매개변수개수
Workflow InputN, e, d, Ciphertext를 공급1
RSA Key EncoderkeyType = "Private"으로 설정1
RSA Decrypthash = "SHA-256"으로 설정1
Workflow OutputPlaintext 출력을 수집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)
Nbytes (128 B, 모듈러스)ea3a35a2d7b5467e45de0eecd49862cf702dfd6bd59ec103d43543f52b78e92af38951f499bff434a3bd7b50b0a58422fc19ae93d39de392c2b8e21bf4684686d3caaed79121917697335afdd7282928b78e75f36cc5d1dcf16126b1e10d8956d51f270739e3670304961a55757edf4b01e5073df545abaf5dab0acee3046c1f
ebytes (3 B, 65537)010001
dbytes (128 B, 개인 지수)dae08e629fe47bfd5fd8c465b7bcb70955b10452128b899ec45d0a263efb7c1870ffef9ffd550d256ba59368b1c9da12bf365897377721c4714647b50bcdada862f6114300104514fe1cb76c514615082218f68c9726a929547f37fc40fa630032c5eb2c6e95b49ddb98ffdb794b3ba8981654314aee0bf7ee79bb3bc71b4a71
Ciphertextbytes (128 B, SHA-256 RSA-OAEP)358db60d0905e619e75119df0bd4603287a65543cb40535d2d44605e2466b36dafd2a5927c72f6dafc1fdcb9f60115340c64b788a5f8203ecb080957bf420b4b40c4e5de4861809cb42b05a1091ea711a650d4239f2faf0684cbeb8c80c9a395f87cc80334310e438e1c465cae5a5fbdc451a20ee68a322e49796198f0088577

기대 출력

이름타입값 (Hex)
Plaintextbytes (19 B, ASCII "RSA from N, e and d")5253412066726f6d204e2c206520616e642064