RSA Key Encoder

카테고리: 비대칭키 & 타원곡선 · 노드 타입 ID: asymmetric-rsa-key-encode

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와 이 노드에 차례로 통과시키면 원래 바이트와 똑같이 돌아온다.

사용 시점

파라미터 설정

파라미터 (ID)타입 및 기본값노출 조건설명 및 옵션
Key Type
keyType
select
기본값: Public
항상 노출 만들 키의 종류이다. 출력 형식과 d 입력의 존재 여부를 함께 정한다.
  • Public: 공개키(SPKI). N과 e가 필요하며 SPKI 공개키를 출력한다.
  • Private: 개인키(PKCS#8). d도 필요하며 PKCS#8 개인키를 출력한다.

포트 입출력 명세

연결 규칙, 데이터 타입 색상, 동적 포트 생성은 포트와 연결을 참고한다.

입력 포트

포트 성격: 조건부 입력 포트(항상 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 (SPKI/PKCS#8 DER) 항상 노출 DER 바이트로 된 RSA 키이다. Key Type이 Public이면 SPKI 공개키, Private이면 PKCS#8 개인키이다.

오류 케이스

실행 중 아래 조건이 발생하면 이 노드는 ERROR 상태가 되며, 출력 포트에 연결된 하위 노드는 실행되지 않는다.

오류 코드기본 엔진 메시지발생 조건
RSA_COMPONENTS_INVALID RSA 구성 요소(N, e, d)가 올바르지 않습니다 숫자들이 RSA 키를 이룰 수 없을 때 발생한다. 메시지에 어느 검사에서 실패했는지 적힌다.
  • N, e, d가 비었거나 0이거나, N이 짝수이거나 1이거나, e가 짝수·3 미만이거나 N 이상이거나, d가 1과 N 사이가 아닐 때이다. 값과 바이트 순서를 확인한다. little-endian으로 읽은 값이나 중간에 잘린 16진수 문자열이 흔한 원인이다.
  • 소인수를 복원하지 못하거나 d가 N, e와 맞지 않을 때이다. 세 숫자가 같은 키의 것이 아니다. 예를 들어 d를 다른 키에서 복사했거나 한 자리가 바뀐 경우이다. N은 정확히 소수 두 개의 곱이어야 한다.

활용 예시

N, e, d로 개인키 만들기

공개된 숫자로 RSA 노드에서 데이터를 복호화한다.

  1. 세 값을 Static Value 노드 셋(타입 bytes, 16진수로 입력)에 넣어 각각 N, e, d에 연결한다. Key Type은 Private으로 설정한다.
  2. Key를 암호문과 함께 RSA Decrypt의 Private Key에 연결한다.
  3. RSA_COMPONENTS_INVALID가 나오면 숫자들이 서로 맞는 키가 아니다. 각 값을 출처와 대조한다.

N과 e로 공개키 만들기

모듈러스와 지수만 알 때 공개키를 만든다.

  1. Key Type을 Public으로 두고 N과 e를 연결한다. d 입력은 보이지 않는다.
  2. Key를 메시지, 서명과 함께 RSA Verify의 Public Key에 연결한다.