RSA Key Encoder
N, e, d 구성 요소로 RSA SPKI 공개키 또는 PKCS#8 개인키(DER)를 만든다
개요
RSA 키를 정의하는 정수로부터 쓸 수 있는 키를 만든다. 공개키는 모듈러스 N과 공개 지수 e가 필요하고, 개인키는 N, e, 개인 지수 d로 정해진다. 숫자가 키 파일이 아닌 곳에서 올 때 쓰는 노드이다. 교재 연습문제, 공개된 시험 벡터, 직접 계산한 값이 그런 경우이다.
결과는 DER 바이트인 Key 출력 하나이다. 공개키는 SubjectPublicKeyInfo(SPKI), 개인키는 PKCS#8이다. RSA Encrypt, RSA Decrypt, RSA Sign, RSA Verify가 기대하는 형식과 같으므로 출력을 바로 연결한다. PEM 출력은 없다. 다른 도구에서 PEM이 필요하면 NodeCrypto 밖에서 DER의 Base64를 BEGIN/END 줄로 감싼다.
표준 개인키는 N, e, d보다 많은 값을 담는다. 소인수 p, q와 CRT 값 셋도 들어간다. 이 값들은 입력하지 않는다. 노드가 N, e, d에서 p와 q를 계산한다. d로부터 소인수를 복원하는 표준 방법(NIST SP 800-56B 부록 C)을 쓰고, p × q = N이며 d가 e의 역수가 맞는지 검사한 뒤 dP, dQ, qInv를 구한다. 결과는 우연에 좌우되지 않는다. 같은 입력은 항상 같은 키를 만들며 p가 더 큰 소인수이다. RSA Key Generator가 만든 키를 RSA Key Decoder와 이 노드에 차례로 통과시키면 원래 바이트와 똑같이 돌아온다.
사용 시점
- 공개된 N, e, d 값(교재 연습문제, 표준 시험 벡터)을 RSA 노드에서 쓸 때 사용한다.
- N과 e만으로 공개키를 만들 때 사용한다. 두 숫자만 아는 서명자의 서명을 검증하는 경우가 그렇다.
- RSA Key Decoder로 꺼낸 구성 요소 하나를 고친 뒤 다시 조립해 무엇이 깨지는지 볼 때 사용한다.
파라미터 설정
| 파라미터 (ID) | 타입 및 기본값 | 노출 조건 | 설명 및 옵션 |
|---|---|---|---|
Key TypekeyType |
select기본값: Public |
항상 노출 | 만들 키의 종류이다. 출력 형식과 d 입력의 존재 여부를 함께 정한다.
|
포트 입출력 명세
연결 규칙, 데이터 타입 색상, 동적 포트 생성은 포트와 연결을 참고한다.
입력 포트
포트 성격: 조건부 입력 포트(항상 2개, 개인키일 때만 1개 추가).
모든 숫자는 big-endian 순서의 Bytes이며 부호 없는 정수로 읽는다. 앞쪽 0 바이트는 무시하므로 00이 붙은 값도 쓸 수 있다. 0이거나 빈 값은 거부한다. Static Value에 16진수로 적은 숫자는 바로 연결된다. 10진 정수에서 시작하려면 먼저 Int to Bytes로 바꾼다.
| 포트 이름 | 포트 ID | 데이터 타입 | 필수 여부 | 노출 조건 | 설명 |
|---|---|---|---|---|---|
N |
n |
Bytes |
필수 | 항상 노출 | 모듈러스 N이다. 홀수이고 1보다 커야 한다. |
e |
e |
Bytes |
필수 | 항상 노출 | 공개 지수 e이다. 홀수이고 3 이상이며 N보다 작아야 한다. 보통 01 00 01(65537)이다. |
d |
d |
Bytes |
필수 | keyType = Private | 개인 지수 d이며 1 < d < N이어야 한다. 두 소인수는 이 값에서 계산하며 입력이 아니다. |
출력 포트
포트 성격: 고정 출력 포트(총 1개).
| 포트 이름 | 포트 ID | 데이터 타입 | 노출 조건 | 설명 |
|---|---|---|---|---|
Key |
key |
Bytes |
항상 노출 | DER 바이트로 된 RSA 키이다. Key Type이 Public이면 SPKI 공개키, Private이면 PKCS#8 개인키이다. |
오류 케이스
실행 중 아래 조건이 발생하면 이 노드는 ERROR 상태가 되며, 출력 포트에 연결된 하위 노드는 실행되지 않는다.
| 오류 코드 | 기본 엔진 메시지 | 발생 조건 |
|---|---|---|
RSA_COMPONENTS_INVALID |
RSA 구성 요소(N, e, d)가 올바르지 않습니다 | 숫자들이 RSA 키를 이룰 수 없을 때 발생한다. 메시지에 어느 검사에서 실패했는지 적힌다.
|
활용 예시
N, e, d로 개인키 만들기
공개된 숫자로 RSA 노드에서 데이터를 복호화한다.
- 세 값을 Static Value 노드 셋(타입
bytes, 16진수로 입력)에 넣어 각각N,e,d에 연결한다. Key Type은Private으로 설정한다. Key를 암호문과 함께 RSA Decrypt의Private Key에 연결한다.RSA_COMPONENTS_INVALID가 나오면 숫자들이 서로 맞는 키가 아니다. 각 값을 출처와 대조한다.
N과 e로 공개키 만들기
모듈러스와 지수만 알 때 공개키를 만든다.
- Key Type을
Public으로 두고N과e를 연결한다.d입력은 보이지 않는다. Key를 메시지, 서명과 함께 RSA Verify의Public Key에 연결한다.